เปลี่ยน ubuntu sources.list ก่อนสร้าง image ด้วย dockerfile

การใช้งาน 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 ที่อ่านมา พบว่าน่าสนใจ ลองอ่านดูครับ อ่านง่าย

 

บทความในต่างประเทศ

  1. 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)
  2. How to Build an Image with the Dockerfile (https://www.sitepoint.com/how-to-build-an-image-with-the-dockerfile/)
  3. Dockerfile reference (https://docs.docker.com/engine/reference/builder/)
  4. Best practices for writing Dockerfiles (https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/)
  5. How to update Docker image to maintain your containers secure  (https://bobcares.com/blog/update-docker-image/2/)
  6. How to upgrade docker container after its image changed
    (https://stackoverflow.com/questions/26734402/how-to-upgrade-docker-container-after-its-image-changed)
  7. Manage data in containers (https://docs.docker.com/engine/tutorials/dockervolumes/)