docker image commit <container-name> <image-name>:<tag>
Working with NGINX
docker container run -d --name demo01 nginx:latest
docker container exec -it demo01 bash
#curl localhost
#apt update
#apt install curl -y
#curl localhost
docker container commit demo01 demo01-image:0.1
docker image ls
# Create new container from new image
docker container run -d --name demo02 demo01-image:0.1
docker container exec -it demo02 bash
#curl localhost
docker container stop demo01
docker container stop demo02
docker container prune
- FROM : เป็นการระบุ image ตั้งต้นที่จะใช้งาน
- RUN คือคำสั่งที่รันขณะ build
- CMD ["executable","param1","param2"] เป็นสำสั่งเริ่มต้นเมื่อ image ที่ถูกสร้างขึ้ถูกสั่งให้ run เป็น container หรือเป็น parameter ที่ส่งต่อให้ ENTRYPOINT
- EXPOSE [/...] เป็นการระบุมาเมื่อ image ที่ถูกสร้างนี้ run เป็น container แล้วจะเปิด port ไหนสำหรับใช้งาน
- ARG [=] เป็นการกำหนดค่าตัวแปรในขณะ build image
- ENV = เป็นการกำหนดค่าตัวแปร environment เพื่อใช้งานขณธ build
- COPY/ADD
- ENTRYPOINT ["executable", "param1", "param2"] เป็นคำสั่งที่จะทำงานเมื่อ image ถูก run เป็น container
- WORKDIR /path/to/workdir เป็นการระบุ directory เริ่มต้นในการทำงาน RUN, CMD, ENTRYPOINT, COPY ถ้า path ของ WORKDIR ไม่มีอยู่ก่อนจะถูกสร้างขึ้นเอง
- ทำให้เรียบง่าย ไม่ซับซ้อน
- 1 service 1 container
- เลือก image เริ่มต้นจากเจ้าของ image ที่เป็นทางการ
- build image ให้มีขนาดเล็กที่สุด
- directory ที่ใช้ build ให้แยกกันใช้เฉพาะงาน
- ใช้เฉพาะ file ที่จำเป็น
- ติดตั้ง component/library เท่าที่จำเป็นต้องใช้
- RUN ควรรวบทุกคำสั่งที่ติดตั้ง software มาทำครั้งเดียว
- ลบ temp file ที่เกิดจากการติดตั้ง software
- จัดเรียงคำสั่งให้อ่านง่าย ใช้ \ ในการขึ้นบรรทัดใหม่เพื่อให้ยังเป็นชุดคำสั่งเดิม
- ระบุ EXPOSE port ทุกครั้ง
- ระบุ WORKDIR ทุกครั้งก่อน RUN, ENTRYPOINT, CMD, COPY
- https://www.fromlatest.io/ เครื่องมือตรวจสอบ Dockerfile
Workshop with NGINX
- Workshop 01 :: Introduction to Dockerfile
- Workshop 02 :: Extend or change from base image
- Workshop 03 :: Working with CMD
- Workshop 04 :: Working with ENTRYPOINT and CMD
- Workshop 05 :: Bad Dockerfile
- Workshop 06 :: Good Dockerfile
Build Docker image from Dockerfile
docker image build -t <image name>:<tag> .