วิธี ADD / COPY Hidden File ขณะ Build Docker Image

ปัญหา

เมื่อเราใช้คำสั่ง ADD หรือ COPY ใน Dockerfile เพื่อคัดลอก Hidden File (ไฟล์ในระบบ Linux ที่ชื่อขึ้นต้นด้วยจุด .) ไปยัง Docker Image ในขณะที่เรา Build Image

ถ้าเราใช้รูปแบบคำสั่งเป็น

ADD <src>... <dest>

หรือ

COPY <src>... <dest>

เราอาจจะพบข้อผิดพลาดดังนี้

lstat destdir/.filename: no such file or directory

วิธีแก้ไข

เพื่อหลีกเลี่ยงข้อผิดพลาดดังกล่าว แนะนำให้ใช้คำสั่ง ADD และ COPY ในอีกรูปแบบหนึ่ง ดังนี้

ADD ["<src>",... "<dest>"]

หรือ

COPY ["<src>",... "<dest>"]

ซึ่งโดยส่วนตัวแล้ว ผมคิดว่ารูปแบบนี้น่าใช้กว่ารูปแบบแรก เพราะนอกจากจะใช้คัดลอก Hidden File ได้แล้ว ก็ยังสามารถใช้รูปแบบนี้คัดลอกไฟล์ที่มี Whitespace (เว้นวรรค) ได้ด้วย

ข้อมูลเพิ่มเติม

แบ่งปันสิ่งนี้บน

วิธี save docker image เป็นไฟล์ .tar.gz

เมื่อคุณ save docker image โดยใช้คำสั่ง “docker save” คุณจะได้ไฟล์ออกมาเป็น .tar (tar archive)

docker save image_name > image_name.tar

คำสั่งนี้เป็นแค่คำสั่งที่รวมให้ docker image ซึ่งประกอบไปด้วยไฟล์หลายๆ ไฟล์ออกมาเป็นไฟล์ๆ เดียว แต่ยังไม่ได้ผ่านกระบวนการบีบอัดไฟล์ จึงทำให้ขนาดไฟล์ยังมีขนาดที่ข้อนข้างใหญ่ครับ (แต่ถ้าใครคิดว่าขนาดไฟล์ไม่ใช่ปัญหา ก็ใช้คำสั่งนี้ไปก็ได้ครับ)

วิธี save docker image เป็นไฟล์ .tar.gz

คุณสามารถ save docker image ให้ไฟล์ที่ออกมามีขนาดเล็กลงกว่าเดิมได้ โดยการบีบอัดด้วย gzip โดยใช้คำสั่งด่านล่างนี้ครับ

docker save image_name | gzip > image_name.tar.gz

นอกจากนี้คุณยังสามารถบีบอัดไฟล์ด้วย xz หรือ bzip2 ได้อีกด้วย

เช่น คำสั่งด้านล่างนี้ สำหรับ save docker image เป็น .tar.xz

docker save image_name | xz > image_name.tar.xz

หรือ คำสั่งด้านล่างนี้ สำหรับ save docker image เป็น .tar.bz2

docker save image_name | bzip2 > image_name.tar.bz2

วิธี load docker image จากไฟล์ .tar.gz

ข้อความจากเว็บไซต์ docker

The tarball may be compressed with gzip, bzip, or xz

หมายความว่า คุณสามารถ load docker image จากไฟล์ที่ถูกบีบอัดด้วย gzip, bzip หรือ xz ก็ย่อมได้

ดังนั้นคุณสามารถใช้คำสั่ง “docker load” แบบธรรมดาๆ ได้เลย โดยไม่จำเป็นต้องใส่ option เพิ่มเติมใดๆ เลย เช่น

docker load -i image_name.tar.gz

หรือ

docker load -i image_name.tar.bz2

หรือ

docker load -i image_name.tar.xz

ข้อมูลเพิ่มเติม

แบ่งปันสิ่งนี้บน