การใช้งาน docker นั้นเราสามารถใช้ image จาก docker hub หรือเราจะสร้าง image ของเราเอง ซึ่งมีหลายวิธีในการสร้าง image แบบของเราเอง (custom) วิธีหนึ่งคือการใช้ dockerfile อย่างคร่าว ๆ คือ
mkdir ~/mydocker cd ~/mydocker touch dockerfile docker built -t test_app:20170713 . docker images
ในไฟล์ชื่อ dockerfile นี้จะมีไวยกรณ์ประมาณนี้
# Image tag: test_app:20170713 <– บรรทัดนี้คือ comment
FROM ubuntu:16.04 <– บรรทัดนี้คือ ไปเอา image ชื่อ ubuntu:16.04 จาก docker hub
RUN apt-get update <– บรรทัดนี้คือ คำสั่งบอกว่าจะติดตั้ง หลังคำว่า RUN นั่นเอง
RUN apt-get dist-upgrade -y
RUN apt-get install -y apache2 libapache2-mod-php7.0 php7.0
COPY …
ADD …
EXPOSE …
CMD …
และยังมี command อื่น ๆ อีก
ทีนี้จากการที่ต้องลองผิดลองถูกบ่อย ๆ จึงพบว่า หากเราเพิ่มคำสั่ง 2 บรรทัดนี้เข้าไปก่อนบรรทัด RUN apt-get update ก็จะทำให้เราได้ใช้ ubuntu repository ที่ต้องการแทนค่า default ที่ archive.ubuntu.com เช่นต้องการให้มาใช้ th.archive.ubuntu.com ก็เขียนคำสั่งดังนี้
RUN sed -i 's/\/us.archive/\/th.archive/g' /etc/apt/sources.list RUN sed -i 's/\/archive/\/th.archive/g' /etc/apt/sources.list
ผลลัพธ์คือ หลังจากทำคำสั่ง docker built -t test_app:20170713 . จะเห็นว่าในขั้นตอนการ build นั้นจะดาวน์โหลดไฟล์ได้รวดเร็วกว่าเดิมมาก
จึงนำความรู้มาบอกกันครับ อ้อลืมบอกว่าบทความที่เขียนนี้ ผมทดสอบกับ docker version 17.06.0-ce ครับ
อยากแนะนำความรู้เกี่ยวกับ docker ที่อ่านมา พบว่าน่าสนใจ ลองอ่านดูครับ อ่านง่าย
บทความในต่างประเทศ
- How To Install and Use Docker on Ubuntu 16.04 (https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-16-04)
- How to Build an Image with the Dockerfile (https://www.sitepoint.com/how-to-build-an-image-with-the-dockerfile/)
- Dockerfile reference (https://docs.docker.com/engine/reference/builder/)
- Best practices for writing Dockerfiles (https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/)
- How to update Docker image to maintain your containers secure (https://bobcares.com/blog/update-docker-image/2/)
- How to upgrade docker container after its image changed
(https://stackoverflow.com/questions/26734402/how-to-upgrade-docker-container-after-its-image-changed) - Manage data in containers (https://docs.docker.com/engine/tutorials/dockervolumes/)