HomeArtTechHackBlockchain
ONLINE ·
Index
/
Technology
/
Article

บันทึก การทำ Golang Live-reload ใน Docker Container

Operator
Khomkrid Lerdprasert
Filed
June 04, 2021
Channel
Technology
Read
~1 min
บันทึก การทำ Golang Live-reload ใน Docker Container

พอดีมีงานที่จะต้องใช้ mariadb, rabbitmq, Golang gofiber, phpmyadmin, และ reactjs

เลยลองสร้าง stack docker-compose ขึ้นมาประมาณนี้

version: '3.8'
services:
database:
image: mariadb:10.6
container_name: db
ports:
- 3308:3306
volumes:
- './database:/var/lib/mysql'
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: diablos
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: pma
ports:
- 8000:80
environment:
PMA_PASSWORD: password
PMA_USER: root
PMA_HOSTS: database
rabbitmq:
image: rabbitmq:management-alpine
container_name: rabbitmq
ports:
- 5672:5672
- 15672:15672
volumes:
- './queue/data:/var/lib/rabbitmq'
- './queue/log:/var/log/rabbitmq'
api:
image: golang:1.16-alpine
container_name: microservices
volumes:
- './microservices:/app'
working_dir: /app
ports:
- 8181:8181
command: go run main.go
links:
- database
- rabbitmq

หลังจากนั้นลองเขียน go เพื่อทดสอบ connection ระหว่าง go กับ database และ rabbitmq ดู พอผ่านแล้ว รู้สึกว่าชีวิตลำบากตรงที่ต้อง สั่ง docker-compose down เพื่อ reload go ที่ update code เข้าไปทุกรอบ เลยต้องมาทำ hot reload ดู ชีวิตจะได้สบายมากขึ้น

นั่งค้น google ไปจนเจอ AIR ครับ https://github.com/cosmtrek/air

เริ่มด้วยการ สร้าง go-dev.Dockerfile ขึ้นมาก่อน

FROM golang:1.16-alpine
RUN mkdir /app
ADD ../micorservices /app/
WORKDIR /app
RUN go get -v github.com/cosmtrek/air
ENTRYPOINT ["air"]

โดยเราจะ download แล้วสั่งติดตั้ง AIR ลงใน container ของเรา

และในส่วนของ docker-compose.yml เราจะแก้ในส่วนของ api เรานิดนึง

api:
build:
context: .
dockerfile: ./Dockerfile/go-dev.Dockerfile
container_name: microservices
volumes:
- './microservices:/app'
working_dir: /app
ports:
- 8181:8181
links:
- database
- rabbitmq

โดย โครงสร้าง Directory เราจะเป็นประมาณนี้

.
├── Dockerfile
│   └── go-dev.Dockerfile
├── Readme.md
├── WPMultiPostContent.code-workspace
├── database
├── docker-compose.yml
├── microservices
│   ├── go.mod
│   ├── go.sum
│   ├── main.bak
│   ├── main.go
│   └── tmp
│   ├── build-errors.log
│   └── main
├── queue
│   ├── data
│   │   └── mnesia
│   └── log
│   └── log
└── web
├── README.md
├── public
├── src
│   ├── apis
│   ├── commons
│   ├── components
│   ├── containers
│   ├── mock
│   ├── pages
│   ├── stylesheet
│   └── utils
└── yarn.lock

เมื่อเราสั่ง

docker-compose up

เราจะพบกับ log ว่าใช้งาน air ได้แล้ว

Starting db ... done
Starting rabbitmq ... done
Starting pma ... done
Creating microservices ... done
Attaching to db, rabbitmq, pma, microservices
microservices |
microservices | __ _ ___
microservices | / /\ | | | |_)
microservices | /_/--\ |_| |_| \_ 1.27.3, built with Go 1.16.3
microservices |
microservices | ┌───────────────────────────────────────────────────┐
microservices | │ Fiber v2.11.0 │
microservices | │ http://127.0.0.1:8181 │
microservices |(bound on host 0.0.0.0 and port 8181)
microservices | │ │
microservices | │ Handlers ............. 2 Processes ........... 1
microservices | │ Prefork ....... Disabled PID ............... 293
microservices | └───────────────────────────────────────────────────┘
microservices |
microservices | main.go has changed
microservices | building...
microservices | running...

แค่นี้เราก็ใช้ hot reload บน container ร่วมกับ go Fiber ได้แล้ว

◎ Tags

##Go lang##Docker
Khomkrid Lerdprasert
Operator

Khomkrid Lerdprasert

Technical Lead — building AI-powered platforms, omni-channel chat systems, and telemedicine solutions with Go, Next.js & clean architecture. 20+ years shipping software from crypto wallets to e-learning systems. Bangkok-based. Writes code late at night, brews beer on weekends.

GithubInstagram
Previous · transmission
firebase cloud function golang ดึง api เพลงจาก Discogs
Next · transmission
บันทึก การทำ Go fiber กับ JWT Middleware
Metadata
Channel
Technology
Filed
June 04, 2021
Read
~1 min
Language
TH / EN
Transmit

Related

สร้าง Key pair เพื่อทำการ signing document signature ด้วย Go lang
Khomkrid Lerdprasert
March 13, 2024
1 min
aofiee.dev
signal / noise / code · craft
© 2019 – 2026, Khomkrid Lerdprasert.
All transmissions logged.
No newsletter. No profiling. Cookies require consent.
PGP · 7F3D 2024 A21E B584 · 0x7F3D
Channels
  • Art & Culture
  • Technology
  • Hack 101
  • Blockchain 101
  • Archive / All posts
— END OF TRANSMISSION —
// powered by curiosity, coffee, & wuxia
BKK · 13°45′N · 100°30′E