ลบอิมเมจ Docker วอลุ่ม และคอนเทนเนอร์ในไม่กี่วินาที

เผยแพร่แล้ว: 2023-03-03

Docker เป็นเทคโนโลยีการบรรจุซอฟต์แวร์ที่ช่วยให้นักพัฒนาสร้างและปรับใช้แอปพลิเคชันข้ามแพลตฟอร์มที่แตกต่างกันตั้งแต่เดสก์ท็อปไปจนถึงคลาวด์

สแนปช็อตหรือพิมพ์เขียวของซอร์สโค้ด การขึ้นต่อกัน และเครื่องมือที่จำเป็นในการสร้างแอปพลิเคชันภายในคอนเทนเนอร์ 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 เข้าครอบงำระบบของคุณ! เรียนรู้วิธีล้างอิมเมจ วอลุ่ม และคอนเทนเนอร์อย่างมีประสิทธิภาพด้วยคำสั่งแสนสะดวกเหล่านี้ คลิกเพื่อทวีต

ลบรูปภาพเฉพาะตามชื่อ

คุณสามารถกำหนดเป้าหมายรูปภาพเพื่อนำออกโดยอ้างอิงชื่อ:

 $ 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 ของคุณ การลบอิมเมจ วอลุ่ม และคอนเทนเนอร์ที่ไม่จำเป็นเป็นจุดเริ่มต้นที่ดี! คลิกเพื่อทวีต

สรุป

บทความนี้อธิบายวิธีลบอิมเมจ Docker วอลุ่ม และคอนเทนเนอร์ คุณได้เรียนรู้วิธีการต่างๆ เพื่อรักษาระบบที่สะอาดและเป็นระเบียบ มันครอบคลุมคำสั่งให้ลบรูปภาพที่ไม่ได้ใช้ ไม่ติดแท็ก หรือเฉพาะออกทั้งหมดตาม ID หรือชื่อ คุณยังได้เรียนรู้คำสั่งในการลบคอนเทนเนอร์ที่หยุดทำงานทั้งหมดหรือคอนเทนเนอร์เฉพาะตาม ID หรือชื่อ

การลบอิมเมจ วอลุ่ม และคอนเทนเนอร์ของ Docker เป็นกระบวนการที่ไม่ซับซ้อนซึ่งสามารถช่วยคุณจัดการส่วนประกอบที่ไม่ได้ใช้ กู้คืนพื้นที่ว่างในดิสก์อันมีค่า และมักจะปรับปรุงประสิทธิภาพของระบบ

ความเรียบง่ายนี้เองที่ดึงดูดนักพัฒนาให้มาที่ Docker และไม่มีวิธีที่ง่ายกว่าในการปรับใช้แอปพลิเคชันที่พัฒนาใน Docker มากกว่าการใช้แพลตฟอร์มการโฮสต์แอปพลิเคชันของ Kinsta คุณสามารถทดลองใช้ได้ฟรีในขณะนี้