เลยลองสร้าง stack docker-compose ขึ้นมาประมาณนี้
version: '3.8'services:database:image: mariadb:10.6container_name: dbports:- 3308:3306volumes:- './database:/var/lib/mysql'environment:MYSQL_ROOT_PASSWORD: passwordMYSQL_DATABASE: diablosphpmyadmin:image: phpmyadmin/phpmyadmincontainer_name: pmaports:- 8000:80environment:PMA_PASSWORD: passwordPMA_USER: rootPMA_HOSTS: databaserabbitmq:image: rabbitmq:management-alpinecontainer_name: rabbitmqports:- 5672:5672- 15672:15672volumes:- './queue/data:/var/lib/rabbitmq'- './queue/log:/var/log/rabbitmq'api:image: golang:1.16-alpinecontainer_name: microservicesvolumes:- './microservices:/app'working_dir: /appports:- 8181:8181command: go run main.golinks:- 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-alpineRUN mkdir /appADD ../micorservices /app/WORKDIR /appRUN go get -v github.com/cosmtrek/airENTRYPOINT ["air"]
โดยเราจะ download แล้วสั่งติดตั้ง AIR ลงใน container ของเรา
และในส่วนของ docker-compose.yml เราจะแก้ในส่วนของ api เรานิดนึง
api:build:context: .dockerfile: ./Dockerfile/go-dev.Dockerfilecontainer_name: microservicesvolumes:- './microservices:/app'working_dir: /appports:- 8181:8181links:- 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 ... doneStarting rabbitmq ... doneStarting pma ... doneCreating microservices ... doneAttaching to db, rabbitmq, pma, microservicesmicroservices |microservices | __ _ ___microservices | / /\ | | | |_)microservices | /_/--\ |_| |_| \_ 1.27.3, built with Go 1.16.3microservices |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 changedmicroservices | building...microservices | running...
แค่นี้เราก็ใช้ hot reload บน container ร่วมกับ go Fiber ได้แล้ว
Quick Links
Legal Stuff