Skip to main content

จับ API ของเราใส่ docker กัน

Docker คืออะไร ? 

พูดสั้น ๆ ก็.... Docker เป็นเหมือนโปรแกรมที่ทำให้เราจำลอง OS หลาย ๆ OS เพื่อให้เราสามารถ run app หลาย ๆ app ได้ในเครื่องเดียวกัน

image.png
( reference: https://www.freecodecamp.org/news/a-beginner-friendly-introduction-to-containers-vms-and-docker-79a9e3e119b/ )


ละจับ App ใส่ Docker ยังไง ?

ก่อนอื่น Install docker Desktop กันก่อน

https://www.docker.com/get-started/

image.png


ก่อนอื่นเราต้องรู้จัก component หลัก ๆ ใน docker กันก่อน

image.png
( reference: https://towardsdatascience.com/how-to-dockerize-an-r-shiny-app-part-2-b029d915e6ac?gi=feb5d38bd285 )

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 .

image.png


หลักจากเรา build docker image แล้ว เราสามารถเช็ค image ที่เรามีได้จากคำสั่ง

docker images

image.png


เราสามารถสร้างและ run container จาก docker image ที่เราพึ่งสร้างได้จากคำสั่ง

docker run -p 8000:<PORT> myapp

และเข้าไปดู app ของเราได้จาก http://localhost:8000

image.png

image.png