HomeArtTechHackBlockchain

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

By Khomkrid Lerdprasert
Published in Technology
June 04, 2021
1 min read
บันทึก การทำ 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

Share

Previous Article
firebase cloud function golang ดึง api เพลงจาก Discogs
Khomkrid Lerdprasert

Khomkrid Lerdprasert

Full Stack Life

Related Posts

สร้าง Key pair เพื่อทำการ signing document signature ด้วย Go lang
March 13, 2024
1 min
© 2024, All Rights Reserved.
Powered By

Quick Links

Author

Social Media