ฉันสงสัยว่าภาพของ Docker จะถูกเก็บไว้ที่ใดในเครื่องโฮสต์ท้องถิ่น ฉันสามารถแชร์ Docker-Image โดยไม่ต้องใช้Docker-Hub
หรือ a Dockerfile
แต่เป็น 'ของจริง' Docker-Image ได้หรือไม่? และเกิดอะไรขึ้นเมื่อฉัน 'ดัน' Docker-Image ของฉันไปยัง Docker-Hub
ฉันสงสัยว่าภาพของ Docker จะถูกเก็บไว้ที่ใดในเครื่องโฮสต์ท้องถิ่น ฉันสามารถแชร์ Docker-Image โดยไม่ต้องใช้Docker-Hub
หรือ a Dockerfile
แต่เป็น 'ของจริง' Docker-Image ได้หรือไม่? และเกิดอะไรขึ้นเมื่อฉัน 'ดัน' Docker-Image ของฉันไปยัง Docker-Hub
คำตอบ:
อิมเมจนักเทียบท่าจะถูกจัดเก็บเป็นเลเยอร์ระบบไฟล์ ทุกคำสั่งใน Dockerfile สร้างเลเยอร์ คุณยังสามารถสร้างเลเยอร์โดยใช้docker commit
จากบรรทัดคำสั่งหลังจากทำการเปลี่ยนแปลงบางอย่าง ( docker run
อาจผ่าน)
/var/lib/docker
ชั้นเหล่านี้จะถูกเก็บไว้โดยอยู่ภายใต้การเริ่มต้น ในขณะที่คุณสามารถเชอร์รี่ (ในทางทฤษฎี) เลือกไฟล์จากที่นั่นและติดตั้งในเซิร์ฟเวอร์นักเทียบท่าที่แตกต่างกันอาจเป็นความคิดที่ดีที่จะเล่นกับการเป็นตัวแทนภายในที่ใช้โดยนักเทียบท่า
เมื่อคุณดันรูปภาพเลเยอร์เหล่านี้จะถูกส่งไปที่รีจิสตรี (ฮับตัวเทียบฮับโดยค่าเริ่มต้น ... เว้นแต่คุณจะแท็กรูปภาพด้วยคำนำหน้ารีจิสตรีอื่น) และเก็บไว้ที่นั่น เมื่อกดจะใช้เลเยอร์ id เพื่อตรวจสอบว่าคุณมีเลเยอร์อยู่แล้วหรือจำเป็นต้องดาวน์โหลด คุณสามารถใช้docker history
ดูเลเยอร์ (รูปภาพอื่น ๆ ) ที่ใช้ (และในระดับหนึ่งคำสั่งใดที่สร้างเลเยอร์)
สำหรับตัวเลือกในการแบ่งปันภาพโดยไม่ต้องกดไปที่รีจิสทรีฮับของนักเทียบท่าตัวเลือกที่ดีที่สุดของคุณคือ:
docker save
รูปภาพหรือdocker export
คอนเทนเนอร์ ออกจะเป็นไฟล์ tar docker save 'dockerizeit/agent' > dk.agent.latest.tar
นี้ออกมาตรฐานดังนั้นคุณจะชอบที่จะทำสิ่งที่ชอบ จากนั้นคุณสามารถใช้docker load
หรือdocker import
ในโฮสต์อื่น
โฮสต์รีจิสตรีของคุณเอง - ล้าสมัยเห็นความคิดเห็น ดูภาพรีจิสทรีนักเทียบท่า เราได้สร้างรีจีสทรีสำรอง s3ซึ่งคุณสามารถเริ่มและหยุดได้ตามต้องการ (สถานะทั้งหมดจะถูกเก็บไว้ในที่เก็บข้อมูล s3 ที่คุณเลือก) ซึ่งไม่สำคัญสำหรับการติดตั้ง นี่เป็นวิธีที่น่าสนใจในการดูว่าเกิดอะไรขึ้นเมื่อผลักดันรีจิสทรี
ใช้รีจิสตรีอื่นเช่นquay.io (ฉันยังไม่ได้ลองเลย) แม้ว่าจะมีข้อกังวลอะไรก็ตามที่คุณมีกับตัวเชื่อมต่อฮับก็อาจใช้งานได้เช่นกัน
docker save
: เมื่อฉันผลักรูปภาพที่มาจากรูปภาพอื่น (สมมติว่าpython:2.7
) ไปยังรีจิสทรีภาพหลักไม่จำเป็นต้องอัปโหลดมากกว่าหนึ่งครั้งเว้นแต่จะมีการเปลี่ยนแปลง ฉันสามารถบันทึกภาพบางส่วนเพื่อให้ได้ขนาดที่เหมาะสมที่สุดได้หรือไม่ ฉันกระโดดผ่านห่วงเหล่านี้เพราะฉันเป็นงานอดิเรกที่มีหลายภาพและฉันไม่ต้องการจ่ายค่ารีจิสทรีส่วนตัว
docker build
โฮสต์ได้หรือไม่?
npm install
... ฉันไม่สามารถสร้างบนโฮสต์ได้เพราะมีหน่วยความจำน้อยมากและขั้นตอนนี้ล้มเหลวเสมอ (ดู: github.com/npm/npm/issues/5021 )
จากบล็อกนี้ผู้ใช้หนึ่งคนสามารถแชร์ภาพนักเทียบท่าได้โดยไม่มีการลงทะเบียนนักเทียบท่าโดยดำเนินการ:
docker save --output latestversion-1.0.0.tar dockerregistry/latestversion:1.0.0
เมื่อคำสั่งนี้เสร็จสมบูรณ์แล้วหนึ่งสามารถคัดลอกภาพไปยังเซิร์ฟเวอร์และนำเข้าดังต่อไปนี้:
docker load --input latestversion-1.0.0.tar
การส่งรูปภาพนักเทียบท่าไปยังเซิร์ฟเวอร์ระยะไกลสามารถทำได้ใน 3 ขั้นตอนง่ายๆ:
docker save -o <path for created tar file> <image name>
ในพื้นที่ใช้scpเพื่อถ่ายโอน. tarไปยัง remote
บนเซิร์ฟเวอร์ระยะไกลให้โหลดอิมเมจลงในตัวเทียบท่า:
docker load -i <path to docker image tar file>
หากคุณไม่ต้องการใช้ Docker Hub เองคุณสามารถโฮสต์ที่เก็บ Docker ของคุณเองภายใต้ Artifactory โดย JFrog:
https://www.jfrog.com/confluence/display/RTF/Docker+Repositories
ซึ่งจะทำงานบนเซิร์ฟเวอร์ของคุณเอง
ผู้ให้บริการโฮสติ้งรายอื่นมีให้บริการเช่น CoreOS:
http://www.theregister.co.uk/2014/10/30/coreos_enterprise_registry/
ซึ่งซื้อ quay.io