จับ API ของเราใส่ docker กัน
Docker คืออะไร ?
พูดสั้น ๆ ก็.... Docker เป็นเหมือนโปรแกรมที่ทำให้เราจำลอง OS หลาย ๆ OS เพื่อให้เราสามารถ run app หลาย ๆ app ได้ในเครื่องเดียวกัน
ละจับ App ใส่ Docker ยังไง ?
ก่อนอื่น Install docker Desktop กันก่อน
https://www.docker.com/get-started/
ก่อนอื่นเราต้องรู้จัก component หลัก ๆ ใน docker กันก่อน
Dockerfile คือไฟล์ที่เอาไว้สร้าง Docker Image
Docker Image คือไฟล์ที่เก็บ project ไฟล์ของเราไว้
Docker Container คือที่ ๆ เอาไว้ให้เรา run Docker image
ในขั้นตอนนี้เราจะมาสร้าง Docker image กัน แต่เพื่อไม่ให้เป็นการเสียเวลาเราลองเอาโค้ด Dockerfile มาวิเคราะห์กันดีกว่า
ก่อนอื่นสร้าง Dockerfile ใน project เราก่อน แล้ว copy สิ่งนี้ลงไป
FROM golang:alpine AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp
FROM alpine
WORKDIR /app
COPY --from=builder /app/myapp .
EXPOSE <PORT>
ENTRYPOINT [ "/app/myapp" ]
คราวนี้เรามาลองดูโค้ดแต่ละบรรทัดกันว่าทำงานยังไง
# สร้าง process Builder เพื่อ build executable file
FROM golang:alpine AS builder
# set folder ที่จะใช้ build ให้อยู่ใน /app
WORKDIR /app
# copy ไฟล์จากเครื่องเราเข้าไปใน docker image (ใน builder process)
COPY . .
# run go build เพื่อสร้าง execuable file
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp
# สร้าง process ใหม่สำหรับการ run ไฟล์ executable จาก gobuild โดยเฉพาะ
FROM alpine
# set folder ที่จะใช้ run ให้อยู่ใน /app
WORKDIR /app
# copy execuable file จาก builder process ของเราให้มาอยู่ใน running process
# จากที่เห็นว่าเรา copy ไฟล์เดียวคือไฟล์ execuable
COPY --from=builder /app/myapp .
# เปิด port ที่เราใช้ในการ run app ของเรา
EXPOSE <PORT>
# ให้ docker image ใช้ไฟล์ executable ของเราเป็นตัว run
ENTRYPOINT [ "/app/myapp" ]
หลังจากนั้นเราสามารถ run command ด้านล่างเพื่อสร้าง docker image ได้เลย
docker build -t myapp .
หลักจากเรา build docker image แล้ว เราสามารถเช็ค image ที่เรามีได้จากคำสั่ง
docker images
เราสามารถสร้างและ run container จาก docker image ที่เราพึ่งสร้างได้จากคำสั่ง
docker run -p 8000:<PORT> myapp
และเข้าไปดู app ของเราได้จาก http://localhost:8000