จะแชร์ Docker-Image โดยไม่ใช้ Docker-Hub ได้อย่างไร?


257

ฉันสงสัยว่าภาพของ Docker จะถูกเก็บไว้ที่ใดในเครื่องโฮสต์ท้องถิ่น ฉันสามารถแชร์ Docker-Image โดยไม่ต้องใช้Docker-Hubหรือ a Dockerfileแต่เป็น 'ของจริง' Docker-Image ได้หรือไม่? และเกิดอะไรขึ้นเมื่อฉัน 'ดัน' Docker-Image ของฉันไปยัง Docker-Hub


2
สำหรับการอ้างอิงในอนาคต: บทความที่ดีเกี่ยวกับภาพเคลื่อนไหวนักเทียบท่ารอบ
Mifeet

คำตอบ:


243

อิมเมจนักเทียบท่าจะถูกจัดเก็บเป็นเลเยอร์ระบบไฟล์ ทุกคำสั่งใน 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 (ฉันยังไม่ได้ลองเลย) แม้ว่าจะมีข้อกังวลอะไรก็ตามที่คุณมีกับตัวเชื่อมต่อฮับก็อาจใช้งานได้เช่นกัน


6
สำหรับการอ้างอิงในอนาคตลิงค์ไปยังอิมเมจรีจิสตรีของนักเทียบท่านั้นล้าสมัยแล้ว ตอนนี้คุณควรใช้Docker Registry 2.0และรหัสบนgithub /
docker

1
ฉันไม่แน่ใจว่าเป็นที่ชัดเจนว่า Registry 2.0 พร้อมสำหรับการใช้แทนต้นฉบับ ดูเหมือนว่าจะพลาดฟังก์ชั่นพื้นฐานบางอย่างเช่น search stackoverflow.com/questions/30113726/docker-registry-2-0-api-v2
JoshRivers

1
คำถามเกี่ยวกับdocker save: เมื่อฉันผลักรูปภาพที่มาจากรูปภาพอื่น (สมมติว่าpython:2.7) ไปยังรีจิสทรีภาพหลักไม่จำเป็นต้องอัปโหลดมากกว่าหนึ่งครั้งเว้นแต่จะมีการเปลี่ยนแปลง ฉันสามารถบันทึกภาพบางส่วนเพื่อให้ได้ขนาดที่เหมาะสมที่สุดได้หรือไม่ ฉันกระโดดผ่านห่วงเหล่านี้เพราะฉันเป็นงานอดิเรกที่มีหลายภาพและฉันไม่ต้องการจ่ายค่ารีจิสทรีส่วนตัว
Pieter

4
คุณไม่สามารถดึงไฟล์ src จาก git repo รวมถึง Dockerfile และdocker buildโฮสต์ได้หรือไม่?
jshxe

1
@ Jishaxe ส่วนหนึ่งของงานสร้างของฉันคือnpm install... ฉันไม่สามารถสร้างบนโฮสต์ได้เพราะมีหน่วยความจำน้อยมากและขั้นตอนนี้ล้มเหลวเสมอ (ดู: github.com/npm/npm/issues/5021 )
Soft Bullets

46

จากบล็อกนี้ผู้ใช้หนึ่งคนสามารถแชร์ภาพนักเทียบท่าได้โดยไม่มีการลงทะเบียนนักเทียบท่าโดยดำเนินการ:

docker save --output latestversion-1.0.0.tar dockerregistry/latestversion:1.0.0

เมื่อคำสั่งนี้เสร็จสมบูรณ์แล้วหนึ่งสามารถคัดลอกภาพไปยังเซิร์ฟเวอร์และนำเข้าดังต่อไปนี้:

docker load --input latestversion-1.0.0.tar

18

การส่งรูปภาพนักเทียบท่าไปยังเซิร์ฟเวอร์ระยะไกลสามารถทำได้ใน 3 ขั้นตอนง่ายๆ:

  1. ในพื้นที่บันทึกภาพนักเทียบท่าเป็น. tar :
docker save -o <path for created tar file> <image name>
  1. ในพื้นที่ใช้scpเพื่อถ่ายโอน. tarไปยัง remote

  2. บนเซิร์ฟเวอร์ระยะไกลให้โหลดอิมเมจลงในตัวเทียบท่า:

docker load -i <path to docker image tar file>

8

หากคุณไม่ต้องการใช้ 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.