จากบทความของฉันเกี่ยวกับการปรับใช้นักเทียบท่าอัตโนมัติ :
รูปภาพเทียบกับนักเทียบท่า
ใน Dockerland มีภาพและมีภาชนะบรรจุ ทั้งสองมีความสัมพันธ์กันอย่างใกล้ชิด แต่ชัดเจน สำหรับฉันการจับขั้วสองขั้วนี้ทำให้นักเทียบท่าชัดเจนมาก
รูปคืออะไร
รูปภาพเป็นไฟล์เฉื่อยไม่เปลี่ยนรูปที่เป็นสแน๊ปช็อตของคอนเทนเนอร์ ภาพจะถูกสร้างขึ้นด้วยการสร้างคำสั่งและพวกเขาจะผลิตภาชนะเมื่อเริ่มต้นด้วยการวิ่ง ภาพจะถูกเก็บไว้ในรีจิสทรีหางเช่นregistry.hub.docker.com เนื่องจากสามารถมีขนาดค่อนข้างใหญ่ภาพจึงได้รับการออกแบบให้ประกอบด้วยเลเยอร์ของภาพอื่นทำให้สามารถส่งข้อมูลจำนวนเล็กน้อยเมื่อถ่ายโอนภาพผ่านเครือข่าย
สามารถแสดงภาพท้องถิ่นโดยการเรียกใช้docker images
:
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu 13.10 5e019ab7bf6d 2 months ago 180 MB
ubuntu 14.04 99ec81b80c55 2 months ago 266 MB
ubuntu latest 99ec81b80c55 2 months ago 266 MB
ubuntu trusty 99ec81b80c55 2 months ago 266 MB
<none> <none> 4ab0d9120985 3 months ago 486.5 MB
บางสิ่งที่ควรทราบ:
- IMAGE ID เป็นอักขระ 12 ตัวแรกของตัวระบุที่แท้จริงสำหรับรูปภาพ คุณสามารถสร้างแท็กจำนวนมากของภาพที่กำหนด แต่ ID ของพวกเขาจะเหมือนกัน (เหมือนด้านบน)
- VIRTUAL SIZE เป็นเสมือนเพราะมันเพิ่มขนาดของเลเยอร์ต้นแบบที่แตกต่างกันทั้งหมด ซึ่งหมายความว่าผลรวมของค่าทั้งหมดในคอลัมน์นั้นอาจมีขนาดใหญ่กว่าพื้นที่ดิสก์ที่ใช้โดยอิมเมจเหล่านั้นทั้งหมด
- ค่าในคอลัมน์ REPOSITORY มาจากการ
-t
ตั้งค่าสถานะของdocker build
คำสั่งหรือจากdocker tag
อิมเมจที่มีอยู่ คุณมีอิสระในภาพแท็กโดยใช้ศัพท์ที่ทำให้รู้สึกถึงคุณ แต่รู้ว่านักเทียบท่าที่จะใช้แท็กเป็นสถานที่รีจิสทรีในหรือdocker push
docker pull
[REGISTRYHOST/][USERNAME/]NAME[:TAG]
เต็มรูปแบบของแท็กคือ สำหรับubuntu
ข้างต้น REGISTRYHOST registry.hub.docker.com
อนุมานได้ว่าจะเป็น ดังนั้นหากคุณวางแผนที่จะจัดเก็บภาพที่เรียกว่าmy-application
ในรีจิสทรีที่docker.example.com
คุณควรติดแท็กภาพdocker.example.com/my-application
นั้น
- คอลัมน์ TAG เป็นเพียงส่วน [: TAG] ของแท็กแบบเต็ม นี่เป็นคำศัพท์ที่โชคร้าย
latest
แท็กไม่ได้มีมนต์ขลังก็เพียงแท็กค่าเริ่มต้นเมื่อคุณไม่ได้ระบุแท็ก
- คุณสามารถมีภาพที่ไม่ได้ติดแท็กซึ่งสามารถระบุได้ด้วยรหัส IMAGE เท่านั้น สิ่งเหล่านี้จะได้รับ
<none>
แท็กและน่าเชื่อถือ มันง่ายที่จะลืมพวกเขา
ข้อมูลเพิ่มเติมเกี่ยวกับภาพที่ได้จากเอกสารหางและคำศัพท์
คอนเทนเนอร์คืออะไร
ในการใช้คำอุปมาการเขียนโปรแกรมหากภาพเป็นคลาสแล้วคอนเทนเนอร์เป็นตัวอย่างของคลาส - วัตถุรันไทม์ หวังว่าทำไมคุณถึงใช้ตู้คอนเทนเนอร์ พวกเขามีน้ำหนักเบาและห่อหุ้มแบบพกพาของสภาพแวดล้อมที่ใช้งาน
ดูภาชนะที่ใช้งานในท้องถิ่นด้วยdocker ps
:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f2ff1af05450 samalba/docker-registry:latest /bin/sh -c 'exec doc 4 months ago Up 12 weeks 0.0.0.0:5000->5000/tcp docker-registry
ที่นี่ฉันกำลังเรียกใช้รีจิสตรีของ dockerized version เพื่อให้ฉันมีสถานที่ส่วนตัวในการจัดเก็บภาพของฉัน อีกสิ่งที่ควรทราบ:
- เช่นเดียวกับ IMAGE ID CONTAINER ID เป็นตัวระบุจริงสำหรับคอนเทนเนอร์ มันมีรูปแบบเดียวกัน แต่มันระบุวัตถุชนิดอื่น
docker ps
เอาต์พุตเท่านั้นที่รันคอนเทนเนอร์ คุณสามารถดูภาชนะทั้งหมด ( ทำงานหรือหยุด ) docker ps -a
ด้วย
- NAMES สามารถใช้เพื่อระบุคอนเทนเนอร์ที่เริ่มต้นผ่านการ
--name
ตั้งค่าสถานะ
วิธีหลีกเลี่ยงอิมเมจและการ build คอนเทนเนอร์
หนึ่งในความผิดหวังในช่วงต้นของฉันที่มีหางเป็นสะสมอย่างต่อเนื่องดูเหมือนของภาพไม่ติดแท็กและภาชนะบรรจุหยุด ในบางครั้งการสะสมนี้ส่งผลให้ฮาร์ดไดรฟ์ maxed out ช้าลงแล็ปท็อปของฉันหรือหยุดการสร้างอัตโนมัติของฉัน พูดคุยเกี่ยวกับ "ตู้คอนเทนเนอร์ทุกที่"!
เราสามารถลบภาพที่ไม่ได้ติดแท็กทั้งหมดโดยรวมdocker rmi
กับdangling=true
ข้อความค้นหาล่าสุด:
docker images -q --filter "dangling=true" | xargs docker rmi
นักเทียบท่าจะไม่สามารถลบภาพที่อยู่ด้านหลังคอนเทนเนอร์ที่มีอยู่ดังนั้นคุณอาจต้องลบคอนเทนเนอร์ที่หยุดด้วยdocker rm
ก่อน:
docker rm `docker ps --no-trunc -aq`
จุดปวดเหล่านี้รู้จักกับนักเทียบท่าและอาจได้รับการแก้ไขในอนาคต อย่างไรก็ตามด้วยความเข้าใจที่ชัดเจนของรูปภาพและภาชนะบรรจุสถานการณ์เหล่านี้สามารถหลีกเลี่ยงได้ด้วยการฝึกฝนสองวิธี:
- นำภาชนะที่ไม่มีประโยชน์หยุดอยู่
docker rm [CONTAINER_ID]
เสมอด้วย
- ลบภาพที่อยู่เบื้องหลังภาชนะที่ไร้ประโยชน์และหยุด
docker rmi [IMAGE_ID]
เสมอ