ลบอิมเมจ Docker วอลุ่ม และคอนเทนเนอร์ในไม่กี่วินาที
เผยแพร่แล้ว: 2023-03-03Docker เป็นเทคโนโลยีการบรรจุซอฟต์แวร์ที่ช่วยให้นักพัฒนาสร้างและปรับใช้แอปพลิเคชันข้ามแพลตฟอร์มที่แตกต่างกันตั้งแต่เดสก์ท็อปไปจนถึงคลาวด์
สแนปช็อตหรือพิมพ์เขียวของซอร์สโค้ด การขึ้นต่อกัน และเครื่องมือที่จำเป็นในการสร้างแอปพลิเคชันภายในคอนเทนเนอร์ Docker เรียกว่าอิมเมจ แอปพลิเคชันนักเทียบท่าที่ต้องการข้อมูลถาวรสามารถใช้พื้นที่เก็บข้อมูลที่เรียกว่าวอลุ่มที่ไม่ขึ้นกับระบบปฏิบัติการพื้นฐาน
การจัดระเบียบอิมเมจ วอลุ่ม และคอนเทนเนอร์ที่มีประสิทธิภาพเป็นสิ่งสำคัญเมื่อใช้ Docker การแปลงสินทรัพย์เหล่านี้โดยไม่ได้ใช้งานสามารถสะสม ใช้พื้นที่ดิสก์อันมีค่า และส่งผลต่อประสิทธิภาพของระบบในที่สุด
บทความนี้จะสำรวจวิธีต่างๆ ในการรักษาระบบองค์กรโดยการล้างอิมเมจ (ทั้งทีละภาพและทั้งหมดในคราวเดียว) ไดรฟ์ข้อมูล และคอนเทนเนอร์ และเราจะใช้อินเทอร์เฟซบรรทัดคำสั่ง docker
(CLI) เพื่อให้งานเหล่านี้เสร็จสิ้นอย่างรวดเร็ว
วิธีลบอิมเมจนักเทียบท่า
การลบอิมเมจที่ล้าสมัยหรือไม่จำเป็นออกจาก Docker เป็นสิ่งจำเป็นสำหรับการรักษาระบบที่สะอาดและเป็นระเบียบ มาดูกันว่า CLI สามารถกำหนดเป้าหมายรูปภาพบางรูปเพื่อนำออกได้อย่างไร
ก่อนอื่น มาดูอิมเมจในสภาพแวดล้อม Docker ด้วยคำสั่ง docker image ls
:
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE my_image latest 2cbc27836df4 60 seconds ago 7.05MB <none> <none> 85b412789704 2 days ago 7.05MB demo latest 26d80cd96d69 15 months ago 28.5MB
รายการรูปภาพด้านบนได้เปิดเผยรูปภาพชื่อ my_image และ demo ซึ่งทั้งสองแท็ก ล่าสุด ภาพที่สามไม่มีชื่อหรือแท็ก ในกรณีนี้ เป็นภาพ "ห้อย": ภาพที่คอนเทนเนอร์ไม่ได้ใช้งานอยู่ในขณะนี้ ภาพที่ห้อยอยู่นี้เกิดจากการสร้าง my_image ขึ้นใหม่ (สถานการณ์ทั่วไป) อิมเมจเวอร์ชันก่อนหน้ายังคงอยู่ในระบบไฟล์ แต่ตอนนี้ไม่ได้ใช้งานแล้ว
รายการยังแสดงอักขระ 12 ตัวแรกของ ID 64 อักขระของรูปภาพแต่ละรูป วันที่สร้าง และพื้นที่จัดเก็บรูปภาพที่ใช้
ลบภาพที่ไม่ได้ใช้ทั้งหมด
ในตัวอย่างรายการด้านบน เรามีภาพที่ห้อยอยู่ อย่างไรก็ตาม เป็นไปได้ที่รูปภาพที่ไม่มีชื่อหรือแท็กจะทำงานได้ ตัวอย่างเช่น สามารถใช้เพื่อเริ่มคอนเทนเนอร์โดยอ้างอิงรหัสของมัน
หากต้องการลบรูปภาพทั้งหมดที่ห้อยจริงๆ อย่างปลอดภัย คุณสามารถใช้คำสั่ง docker image prune
:
$ docker image prune WARNING! This will remove all dangling images. Are you sure you want to continue? [y/N] y Deleted Images: deleted: sha256:85b412789704c17e9c5e7edc97b2f64c748bbdae7eaa44d3fe2cc21a87acad3d Total reclaimed space: 7.05MB
เราจะลงรายการภาพของเราอีกครั้งเพื่อดูผลงานของเรา:
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE my_image latest 2cbc27836df4 70 seconds ago 7.05MB demo latest 26d80cd96d69 15 months ago 28.5MB
หลังจากกระบวนการตัดแต่ง ภาพที่ไม่มีชื่อหรือแท็กได้หายไป
ลบรูปภาพเฉพาะตามชื่อ
คุณสามารถกำหนดเป้าหมายรูปภาพเพื่อนำออกโดยอ้างอิงชื่อ:
$ docker image rm <image_name>
หมายเหตุ: คุณไม่สามารถลบรูปภาพที่ยังใช้งานอยู่ได้อย่างง่ายดาย คุณควรหยุดหรือลบคอนเทนเนอร์ที่กำลังใช้งานซึ่งกำลังใช้อิมเมจ แม้ว่าโดยทั่วไปจะไม่แนะนำ แต่คุณบังคับลบรูปภาพที่ใช้งานอยู่ได้โดยใช้แฟล็ก -f
:
$ docker image rm <image_name> -f
การใช้ชวเลข rmi สำหรับการลบรูปภาพ
Docker CLI มีวิธีย่อในการลบรูปภาพในนามแฝง rmi
การใช้มันเพื่อลบรูปภาพตามชื่อมีลักษณะดังนี้:
$ docker rmi demo Untagged: demo:latest Deleted: sha256:2cbc27836df4a7707e746e28368f1fdecfefbfb813aae06611ca6913116b80b4
เราจะใช้ rmi
สำหรับตัวอย่างการลบรูปภาพต่อไปนี้
ลบภาพที่ไม่ติดแท็กทั้งหมด
ภาพที่ไม่ติดแท็กยังคงใช้พื้นที่ว่างในดิสก์อันมีค่า ซึ่งทำให้ระบบของคุณช้าลงมากขึ้นเรื่อยๆ เมื่อเวลาผ่านไป
หากต้องการลบภาพที่ไม่ติดแท็กทั้งหมดใน Docker ให้ใช้คำสั่ง docker rmi
พร้อมตัวกรอง คุณสามารถระบุตัวกรองตามเกณฑ์เฉพาะได้โดยใช้ตัวเลือก -f
(เพื่อไม่ให้สับสนกับแฟล็ก -f
สำหรับ image rm
เพื่อบังคับการกระทำ)
ตัวกรอง dangling=true
ใช้เพื่อระบุภาพที่ไม่ติดแท็ก:
$ docker rmi $(docker images -f "dangling=true" -q)
ตัวเลือก -q
ในคำสั่งด้านบนแสดงรหัสรูปภาพของรูปภาพที่ไม่ติดแท็กทั้งหมด ID ทั้งหมดเหล่านี้จะถูกส่งผ่านเป็นอาร์กิวเมนต์ไปยัง docker rmi
เพื่อลบออก
ฟิลเตอร์นี้ใช้คีย์เวิร์ด “dangling” แต่ตามที่ระบุไว้ข้างต้น รูปภาพบางรูปที่ไม่มีแท็กอาจใช้งานได้จริง คุณจะได้รับคำเตือนหากรูปภาพที่เลือกโดยฟิลเตอร์นี้ไม่ห้อยจริงๆ
ลบรูปภาพเฉพาะตาม ID
คุณสามารถใช้คำสั่ง docker rmi
เพื่อลบอิมเมจใด ๆ โดยอ้างอิง ID ของมัน:
$ docker rmi <image_id>
ลบรูปภาพเฉพาะตามชื่อและแท็ก
คุณสามารถลบรูปภาพที่ต้องการพร้อมกับชื่อและแท็กได้โดยใช้คำสั่ง docker rmi
ตัวอย่างเช่น หากคุณมีรูปภาพหลายรูปที่มีชื่อเดียวกันแต่แท็กต่างกัน คุณสามารถลบรูปภาพที่ต้องการได้โดยใช้รูปแบบนี้:
$ docker rmi <image_name>:<tag>
วิธีนี้มีประโยชน์เมื่อคุณต้องการลบอิมเมจเวอร์ชันเฉพาะ แทนที่จะลบอิมเมจทั้งหมดที่เกี่ยวข้องกับที่เก็บ
ลบรูปภาพทั้งหมดด้วยแท็กล่าสุด
ใน Docker แท็ก "ล่าสุด" หมายถึงเวอร์ชันล่าสุดของอิมเมจ Docker เฉพาะ แท็กล่าสุดมักใช้เป็นแท็กเริ่มต้นสำหรับอิมเมจ Docker มันถูกกำหนดให้กับบิลด์ล่าสุดของรูปภาพโดยอัตโนมัติ เว้นแต่จะมีการระบุแท็กอื่นไว้อย่างชัดเจน
Docker ให้คำสั่งเพื่อลบรูปภาพทั้งหมดที่มีแท็ก "ล่าสุด":
$ docker rmi $(docker images | grep "latest" | awk '{print $3}')
คำสั่งดังกล่าวแบ่งออกเป็น 2 ส่วน อันดับแรกจะได้รับรายการ ID ของรูปภาพ จากนั้นจึงส่งรายการนี้เป็นอาร์กิวเมนต์ไปยังคำสั่ง docker rmi
ลบรูปภาพออกจากพื้นที่เก็บข้อมูลระยะไกล
หากต้องการลบอิมเมจออกจากที่เก็บระยะไกล เช่น Docker Hub คุณจะต้องลงชื่อเข้าใช้บัญชีโดยใช้ Docker CLI ก่อน
เมื่อคุณเข้าสู่ระบบ คุณเพียงแค่ต้องใช้คำสั่ง docker rmi
เพื่อลบรูปภาพ คำสั่ง docker rmi
สามารถลบอิมเมจทั้งโลคัลและรีโมต:
docker rmi my_repo/my_image_tag
โดยเฉพาะอย่างยิ่ง คุณสามารถลบรูปภาพที่ถูกพุชไปยังที่เก็บเท่านั้น ในทำนองเดียวกัน คุณไม่สามารถลบอิมเมจที่ใช้โดยรันคอนเทนเนอร์ได้
ลบหลายภาพออกจากพื้นที่เก็บข้อมูลระยะไกล
หากต้องการลบรูปภาพหลายรูปออกจากที่เก็บระยะไกล คุณสามารถใช้คำสั่ง docker rmi
ตามด้วย ID รูปภาพหรือแท็ก ตัวอย่างเช่น:
docker rmi my_repo/image_tag_1 my_repo/image_tag_2 my_repo/image_tag_3
วิธีนี้จะลบรูปภาพสามรูปที่มีแท็ก image_tag_1
, image_tag_2
และ image_tag_3
ออกจากที่เก็บ my_repo
วิธีลบวอลุ่มนักเทียบท่า
วอลุ่ม Docker อาจใช้พื้นที่ดิสก์มาก โดยเฉพาะอย่างยิ่งหากมีข้อมูลจำนวนมากหรือมีการสำรองข้อมูลหลายรายการ ด้วยการลบวอลุ่มที่ไม่จำเป็นต้องใช้อีกต่อไป คุณจะลดความเสี่ยงของการละเมิดข้อมูลและมั่นใจได้ว่าผู้ใช้ที่ไม่ได้รับอนุญาตจะไม่สามารถเข้าถึงข้อมูลที่ละเอียดอ่อนได้ การลบไดรฟ์ข้อมูลเป็นประจำยังสามารถทำให้สภาพแวดล้อมของ Docker เป็นปัจจุบันอยู่เสมอ และป้องกันปัญหาที่เกิดจากข้อมูลที่ล้าสมัย
คำสั่งเหล่านี้จะทำลายข้อมูลทั้งหมดที่จัดเก็บไว้ในวอลุ่มอย่างถาวร ดังนั้นโปรดใช้ด้วยความระมัดระวัง
ลบวอลุ่มที่ไม่ได้ใช้ทั้งหมด
ใน Docker การลบวอลุ่มที่ไม่ได้ใช้มีความสำคัญเทียบเท่ากับการลบอิมเมจหรือคอนเทนเนอร์
เพื่อเพิ่มพื้นที่ว่างในดิสก์ คุณสามารถใช้คำสั่ง docker volume prune
ลบไดรฟ์ข้อมูลเฉพาะตามชื่อ
การลบโวลุ่มเฉพาะใน Docker นั้นมีประโยชน์สำหรับการลบโวลุ่มที่ไม่ได้ใช้ นี่คือคำสั่งเพื่อลบโวลุ่ม:
docker volume rm my_volume_name
ด้วยคำสั่งข้างต้น ไดรฟ์ข้อมูล my_volume_name จะถูกลบออก นักเทียบท่าสร้างข้อผิดพลาดหากคุณพยายามลบโวลุ่มที่ใช้แล้ว คุณสามารถตรวจสอบวอลุ่มที่มีอยู่ได้โดยใช้คำสั่ง docker volume ls
วิธีลบคอนเทนเนอร์นักเทียบท่า
เมื่อคุณทำงานกับ Docker มากขึ้น คุณอาจสะสมคอนเทนเนอร์ที่ไม่ได้ใช้จำนวนมากซึ่งครอบครองทรัพยากรดิสก์ หากคุณไม่ลบออก สิ่งเหล่านี้อาจสะสมเมื่อเวลาผ่านไปและใช้ทรัพยากรดิสก์ที่มีค่า ทำให้ระบบของคุณทำงานช้าลงและอาจทำให้คุณตกอยู่ในความเสี่ยง
ลบคอนเทนเนอร์ที่หยุดทั้งหมด
คำสั่ง docker container prune
สามารถลบคอนเทนเนอร์ที่หยุดทำงานใน Docker ได้ทั้งหมด ที่นี่ คำสั่งจะสร้างรายการคอนเทนเนอร์ที่หยุดทำงานทั้งหมดซึ่งจะถูกลบออกและขอการยืนยันก่อนดำเนินการต่อ สิ่งนี้จะช่วยเรียกคืนพื้นที่ดิสก์และรักษาสภาพแวดล้อม Docker ที่สะอาดและเป็นระเบียบ ในขณะที่ให้คุณตรวจสอบอีกครั้งว่าคุณไม่ได้สูญเสียสิ่งสำคัญ:
$ docker container prune WARNING! This will remove all stopped containers. Are you sure you want to continue? [y/N] y Deleted Containers: 4df4c47c4df4 d35bcec20bce
โปรดทราบว่าสามารถลบคอนเทนเนอร์ที่หยุดทำงานได้ด้วยคำสั่งนี้เท่านั้น หากคุณต้องการลบคอนเทนเนอร์ที่กำลังทำงานอยู่ คุณจะต้องหยุดคอนเทนเนอร์ก่อนหรือใช้คำสั่งอื่น
ลบคอนเทนเนอร์เฉพาะด้วย ID
ใน Docker คุณสามารถลบคอนเทนเนอร์ที่ระบุด้วย ID โดยใช้ docker rm command
พร้อมกับ ID คอนเทนเนอร์ ก่อนอื่น รับ ID คอนเทนเนอร์ทั้งหมดโดยใช้ docker ps command
:
$ docker ps -a -q 1ce3cdeb4035 06b79541e25c fa98f1804e3e $ docker rm 1ce3cdeb4035
คำสั่งดังกล่าวใช้งานได้เฉพาะเมื่อคอนเทนเนอร์อยู่ในสถานะหยุดทำงาน หากคอนเทนเนอร์กำลังทำงานอยู่ คุณต้องลบออกโดยใช้แฟล็ก -f:
$ docker rm -f 1ce3cdeb4035
ลบคอนเทนเนอร์เฉพาะตามชื่อ
นักเทียบท่าจัดเตรียมคำสั่ง docker rm
แบบอเนกประสงค์เพื่อลบคอนเทนเนอร์ทั้งสองตามชื่อและตาม ID
ตัวอย่างเช่น หากคุณมีคอนเทนเนอร์ชื่อ web_server คุณสามารถลบออกได้โดยใช้คำสั่งต่อไปนี้:
$ docker rm web_server
ขั้นแรก สิ่งสำคัญคือต้องหยุดคอนเทนเนอร์ นักเทียบท่าจัดเตรียมคำสั่ง docker stop
เพื่อหยุดคอนเทนเนอร์เฉพาะ
ลบคอนเทนเนอร์ที่ทำงานอยู่ทั้งหมด
หากต้องการลบคอนเทนเนอร์ที่กำลังทำงานอยู่ทั้งหมด คุณสามารถใช้คำสั่ง docker rm
:
$ docker rm $(docker ps -q)
การใช้ docker ps -q
แสดงรายการ ID ของคอนเทนเนอร์ที่กำลังรัน หลังจากนั้น ID จะถูกส่งผ่านไปยังคำสั่ง docker rm
ซึ่งจะลบคอนเทนเนอร์ทั้งหมด
โปรดทราบว่าคำสั่งนี้จะลบเฉพาะคอนเทนเนอร์ที่ทำงานอยู่เท่านั้น หากคุณต้องการลบคอนเทนเนอร์ทั้งหมด รวมถึงคอนเทนเนอร์ที่หยุดทำงาน คุณสามารถใช้คำสั่งต่อไปนี้แทน:
$ docker rm $(docker ps -a -q)
สรุป
บทความนี้อธิบายวิธีลบอิมเมจ Docker วอลุ่ม และคอนเทนเนอร์ คุณได้เรียนรู้วิธีการต่างๆ เพื่อรักษาระบบที่สะอาดและเป็นระเบียบ มันครอบคลุมคำสั่งให้ลบรูปภาพที่ไม่ได้ใช้ ไม่ติดแท็ก หรือเฉพาะออกทั้งหมดตาม ID หรือชื่อ คุณยังได้เรียนรู้คำสั่งในการลบคอนเทนเนอร์ที่หยุดทำงานทั้งหมดหรือคอนเทนเนอร์เฉพาะตาม ID หรือชื่อ
การลบอิมเมจ วอลุ่ม และคอนเทนเนอร์ของ Docker เป็นกระบวนการที่ไม่ซับซ้อนซึ่งสามารถช่วยคุณจัดการส่วนประกอบที่ไม่ได้ใช้ กู้คืนพื้นที่ว่างในดิสก์อันมีค่า และมักจะปรับปรุงประสิทธิภาพของระบบ
ความเรียบง่ายนี้เองที่ดึงดูดนักพัฒนาให้มาที่ Docker และไม่มีวิธีที่ง่ายกว่าในการปรับใช้แอปพลิเคชันที่พัฒนาใน Docker มากกว่าการใช้แพลตฟอร์มการโฮสต์แอปพลิเคชันของ Kinsta คุณสามารถทดลองใช้ได้ฟรีในขณะนี้