วิธีการแสดงรายการและลบ Docker Image?

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

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

เราจะครอบคลุมถึงการจัดการอิมเมจ Docker โดยส่วนใหญ่จะเป็นการบรรยายสรุปเกี่ยวกับวิธีการแสดงรายการอิมเมจ Docker และรับข้อมูลที่จำเป็น จากนั้นจึงต่อยอดจากการเรียนรู้ที่จะลบรูปภาพอย่างน้อยหนึ่งภาพอย่างมีประสิทธิภาพ

มาเริ่มกันเลยดีกว่า

แสดงรายการ Docker Images

ในการแสดงรายการอิมเมจ Docker ที่ดึงออกมา ให้ใช้:

 abhisheknair@geekflare:~$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE redis latest aa4d65e670d6 9 days ago 105MB mysql latest c60d96bd2b77 10 days ago 514MB ubuntu latest c29284518f49 2 weeks ago 72.8MB nginx latest 4cdc5dd7eaad 3 weeks ago 133MB hello-world latest d1165f221234 4 months ago 13.3kB redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$

เช่นเดียวกับคำสั่ง docker อื่น ๆ มันรองรับคำสั่ง images มีหลายตัวเลือก

 $ docker images [OPTIONS] [REPOSITORY[:TAG]]

หากคุณเรียกใช้ docker images โดยไม่มีตัวเลือกใดๆ มันจะแสดงรูปภาพระดับบนสุดให้คุณเห็น เช่น docker image ls ที่เก็บข้อมูลและแท็ก และขนาดบนดิสก์

 abhisheknair@geekflare:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest c60d96bd2b77 10 days ago 514MB ubuntu latest c29284518f49 2 weeks ago 72.8MB nginx latest 4cdc5dd7eaad 3 weeks ago 133MB hello-world latest d1165f221234 4 months ago 13.3kB redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$

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

รูปภาพจะแสดงรายการหลายครั้งหากมีชื่อที่เก็บหรือแท็กหลายรายการ แม้ว่ารูปภาพเดียวที่ระบุโดย IMAGE ID จะใช้ SIZE ที่แสดงเพียงครั้งเดียว

แสดงรายการภาพล่าสุด

 abhisheknair@geekflare:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest c60d96bd2b77 10 days ago 514MB ubuntu latest c29284518f49 2 weeks ago 72.8MB nginx latest 4cdc5dd7eaad 3 weeks ago 133MB hello-world latest d1165f221234 4 months ago 13.3kB redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$

แสดงรายการรูปภาพตาม Repository และ Tag

ในการแสดงรายการรูปภาพทั้งหมดที่เป็นของที่เก็บเฉพาะ ให้ระบุชื่อที่เก็บ เช่น:

 abhisheknair@geekflare:~$ docker images redis REPOSITORY TAG IMAGE ID CREATED SIZE redis latest aa4d65e670d6 9 days ago 105MB redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$

คุณสามารถระบุชื่อที่เก็บเพิ่มเติมด้วยแท็กสำหรับเอาต์พุตที่กรองเพิ่มเติม:

 abhisheknair@geekflare:~$ docker images redis:4.0 REPOSITORY TAG IMAGE ID CREATED SIZE redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$

ระบุรหัสรูปภาพแบบเต็มความยาว

ในการแสดงรายการภาพทั้งหมดโดยไม่ตัดทอน IMAGE ID ให้ใช้:

 abhisheknair@geekflare:~$ docker images --no-trunc REPOSITORY TAG IMAGE ID CREATED SIZE redis latest sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 9 days ago 105MB mysql latest sha256:c60d96bd2b771a8e3cae776e02e55ae914a6641139d963defeb3c93388f61707 10 days ago 514MB ubuntu latest sha256:c29284518f497b8c5f49933e74e43ca5221e69c8251e780427f7d12f716625ff 2 weeks ago 72.8MB nginx latest sha256:4cdc5dd7eaadff5080649e8d0014f2f8d36d4ddf2eff2fdf577dd13da85c5d2f 3 weeks ago 133MB hello-world latest sha256:d1165f2212346b2bab48cb01c1e39ee8ad1be46b87873d9ca7a4e434980a7726 4 months ago 13.3kB redis 4.0 sha256:191c4017dcdd3370f871a4c6e7e1d55c7d9abed2bebf3005fb3e7d12161262b8 15 months ago 89.3MB abhisheknair@geekflare:~$

รายชื่อรูปภาพสรุป

อิมเมจ Docker ที่ใช้รูปแบบ v2 หรือใหม่กว่ามีตัวระบุที่อยู่เนื้อหาที่เรียกว่าได digest สต์ ในการแสดงรายการค่าไดเจสต์ของรูปภาพ ให้ใช้ --digest flag เป็น:

 abhisheknair@geekflare:~$ docker images --digests REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE redis latest sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 aa4d65e670d6 9 days ago 105MB mysql latest sha256:8b928a5117cf5c2238c7a09cd28c2e801ac98f91c3f8203a8938ae51f14700fd c60d96bd2b77 10 days ago 514MB ubuntu latest sha256:b3e2e47d016c08b3396b5ebe06ab0b711c34e7f37b98c9d37abe794b71cea0a2 c29284518f49 2 weeks ago 72.8MB nginx latest sha256:c5aab9d8e259d54af91e0548abf1fa8188a43079eb86b6ba8df9f482a5380720 4cdc5dd7eaad 3 weeks ago 133MB hello-world latest sha256:df5f5184104426b65967e016ff2ac0bfcd44ad7899ca3bbcf8e44e4461491a9e d1165f221234 4 months ago 13.3kB redis 4.0 sha256:2e03fdd159f4a08d2165ca1c92adde438ae4e3e6b0f74322ce013a78ee81c88d 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$

ด้วยรีจิสตรี 2.0 คุณสามารถใช้ไดเจสต์เหล่านี้ด้วยคำสั่ง push , pull , create , run และ rmi สิ่งนี้ยังใช้งานได้กับคำสั่ง FROM ใน Dockerfile

การกรองเอาท์พุต

คำสั่ง docker รองรับการกรองด้วย images โดยใช้ --filter flag ตัวกรองที่รองรับในปัจจุบันคือ:

  • ห้อยต่องแต่ง (บูลีน - จริงหรือเท็จ)
  • ป้ายกำกับ ( label=<key> หรือ label=<key>=<value> )
  • ก่อน ( <image-name>[:<tag>] , <image id> หรือ <image@digest> ) – กรองรูปภาพที่สร้างก่อนระบุ id หรือการอ้างอิง
  • ตั้งแต่ ( <image-name>[:<tag>] , <image id> หรือ <image@digest> ) – กรองรูปภาพที่สร้างขึ้นตั้งแต่ระบุ id หรือการอ้างอิง
  • อ้างอิง (รูปแบบของการอ้างอิงรูปภาพ) – กรองรูปภาพที่มีการอ้างอิงตรงกับรูปแบบที่ระบุ

นอกจากนี้ คุณสามารถใช้ตัวกรองหลายตัวโดยการรวมเข้าด้วยกัน เช่น:

 $ docker images --filter "<key1>=<value1>" --filter"<key2>=<value2>"

ตัวอย่าง:

 abhisheknair@geekflare:~$ docker images --filter "before=redis" --filter "since=hello-world" REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest c60d96bd2b77 10 days ago 514MB ubuntu latest c29284518f49 2 weeks ago 72.8MB nginx latest 4cdc5dd7eaad 3 weeks ago 133MB abhisheknair@geekflare:~$

การจัดรูปแบบผลลัพธ์

docker images รองรับการจัดรูปแบบเอาต์พุตที่อาจจำเป็นสำหรับการซ้อนกับคำสั่งอื่น สคริปต์ หรืออย่างอื่น เหล่านี้เป็นตัวยึดตำแหน่งที่รองรับสำหรับแฟ --format :

ตัวยึด คำอธิบาย
.ID รหัสรูปภาพ
.Repository คลังภาพ
.Tag แท็กรูปภาพ
.Digest สรุปรูปภาพ
.CreatedSince เวลาที่ผ่านไปตั้งแต่สร้างภาพ
.CreatedAt ช่วงเวลาที่สร้างภาพ
.Size ขนาดดิสก์อิมเมจ

ตัวอย่างเช่น คำสั่งด้านล่างจะพิมพ์เอาต์พุตโดยไม่มีส่วนหัว และส่งออก ID และ Repository ที่คั่นด้วยโคลอน ( : ) สำหรับรูปภาพทั้งหมด:

 abhisheknair@geekflare:~$ docker images --format "{{.ID}}: {{.Repository}}" aa4d65e670d6: redis c60d96bd2b77: mysql c29284518f49: ubuntu 4cdc5dd7eaad: nginx d1165f221234: hello-world 191c4017dcdd: redis abhisheknair@geekflare:~$

หรือหากต้องการแสดงรายการรูปภาพทั้งหมดที่มีที่เก็บและแท็กในรูปแบบตาราง คุณสามารถใช้:

 abhisheknair@geekflare:~$ docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}" IMAGE ID REPOSITORY TAG aa4d65e670d6 redis latest c60d96bd2b77 mysql latest c29284518f49 ubuntu latest 4cdc5dd7eaad nginx latest d1165f221234 hello-world latest 191c4017dcdd redis 4.0 abhisheknair@geekflare:~$

การลบ Docker Images

ในการลบอิมเมจ Docker อย่างน้อยหนึ่งอิมเมจออกจากระบบ เราใช้:

 $ docker image rm [OPTIONS] IMAGE [IMAGE...]

หากต้องการลบภาพเดียว ให้ระบุชื่อภาพ:

 abhisheknair@geekflare:~$ docker image rm redis Untagged: redis:latest Untagged: redis@sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 Deleted: sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 Deleted: sha256:3bd00d38f5ca70200050477c527cc60cfdf82911d6fe03932e2bcae31a95cfa2 Deleted: sha256:22722fde392d188cfbe5bbd0c2451cc71cf5b000afc0e5114c1066bb5e113ec9 Deleted: sha256:38212b55ef525e86cd726cd83c1a82a6009c68d24771d6e93d439fdc88e66f0e Deleted: sha256:188c498579cef37b65a93d6448c6b129fa07d5740fc213a18843ff22d80cd10d Deleted: sha256:2117165cd53c98f13ec7af36c9d8acd239fc541c847efaccb49885decf615d68 abhisheknair@geekflare:~$

หรือหากต้องการลบหลายภาพ ให้ระบุชื่อภาพหลายภาพโดยคั่นด้วยการเว้นวรรค:

 abhisheknair@geekflare:~$ docker image rm redis mariadb Untagged: redis:latest Untagged: redis@sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 Deleted: sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 Deleted: sha256:3bd00d38f5ca70200050477c527cc60cfdf82911d6fe03932e2bcae31a95cfa2 Deleted: sha256:22722fde392d188cfbe5bbd0c2451cc71cf5b000afc0e5114c1066bb5e113ec9 Deleted: sha256:38212b55ef525e86cd726cd83c1a82a6009c68d24771d6e93d439fdc88e66f0e Deleted: sha256:188c498579cef37b65a93d6448c6b129fa07d5740fc213a18843ff22d80cd10d Deleted: sha256:2117165cd53c98f13ec7af36c9d8acd239fc541c847efaccb49885decf615d68 Untagged: mariadb:latest Untagged: mariadb@sha256:3b6f9fa1d406e168998d62501b2ee4f27d53138bebfcdac03540758996c5ff1d Deleted: sha256:fd17f57768027456cc17987058474fb21d3c51e9dd764e4497c1dfe92ff058db Deleted: sha256:a638f04e531b032c81a84bda59a36d1df3c4cec62560c403bc2edb642bce79ba Deleted: sha256:af7a7e7bf72e7ad0c5227995f219d9094fafbe0ac973dbe7eb4ab190a5a58ba5 Deleted: sha256:a0cfd81b291e8da6bca0731c9db70fe1b61d176906b1cf05ade1cd61572ffaaa Deleted: sha256:38b00cb5dab64398092fab2b18563af1ef4a9445dec8a531ac725059dc218f41 Deleted: sha256:6e60d29d2d76125f989f503a78729984f7ba3e26bfbf7038d5ab644b8755b7c2 Deleted: sha256:1dafdd60e471b4c1f5244cfe1d20d79f934f504ef42180b637886be2b0b74370 Deleted: sha256:2fffe8e736cdb99359084e297f4bb54a4cac879366bd3e4333d3dbe966f8e9a6 Deleted: sha256:f728037697805db453111266541c202c74971484ef359ea29b9c60064ed9e47e Deleted: sha256:28155a13db3520201db576bf6d56b68fc08ef27b1c4c49dbfeadef523d35c5f0 Deleted: sha256:7555a8182c42c7737a384cfe03a3c7329f646a3bf389c4bcd75379fc85e6c144 abhisheknair@geekflare:~$

บังคับกำจัด

อาจมีคอนเทนเนอร์ที่ทำงานอยู่ซึ่งกำลังใช้รูปภาพที่คุณพยายามจะลบ ในกรณีดังกล่าว Docker จะออกคำเตือนเมื่อคุณพยายามลบภาพอ้างอิง

 abhisheknair@geekflare:~$ docker image rm nginx Error response from daemon: conflict: unable to remove repository reference "nginx" (must force) - container ce908eadf829 is using its referenced image 4cdc5dd7eaad abhisheknair@geekflare:~$

คุณสามารถหยุดคอนเทนเนอร์ที่เกี่ยวข้องก่อนแล้วจึงลองอีกครั้งหรือใช้แฟล็ก -f ซึ่งบังคับให้ลบรูปภาพ (ระวัง)

 abhisheknair@geekflare:~$ docker image rm nginx -f Untagged: nginx:latest Untagged: nginx@sha256:c5aab9d8e259d54af91e0548abf1fa8188a43079eb86b6ba8df9f482a5380720 Deleted: sha256:4cdc5dd7eaadff5080649e8d0014f2f8d36d4ddf2eff2fdf577dd13da85c5d2f abhisheknair@geekflare:~$

ภาพลูกพรุน

มีบางสถานการณ์ที่ภาพที่ไม่ได้ใช้กำลังใช้พื้นที่ดิสก์หรือคุณเพียงแค่ต้องการล้างรูปภาพเก่าที่ห้อยอยู่ คุณสามารถล้างภาพที่ไม่ได้ใช้ดังกล่าวได้โดยใช้:

 $ docker image prune

ตัวอย่าง:

 abhisheknair@geekflare:~$ docker image prune WARNING! This will remove all dangling images. Are you sure you want to continue? [y/N] y Total reclaimed space: 0B abhisheknair@geekflare:~$

หากคุณต้องการล้างรูปภาพทั้งหมดที่ไม่ได้ใช้โดยคอนเทนเนอร์ใดๆ เช่นกัน ให้ใช้แฟล็ก -a :

 abhisheknair@geekflare:~$ docker image prune -a WARNING! This will remove all images without at least one container associated to them. Are you sure you want to continue? [y/N] y Deleted Images: untagged: mariadb:latest untagged: mariadb@sha256:3b6f9fa1d406e168998d62501b2ee4f27d53138bebfcdac03540758996c5ff1d deleted: sha256:fd17f57768027456cc17987058474fb21d3c51e9dd764e4497c1dfe92ff058db deleted: sha256:a638f04e531b032c81a84bda59a36d1df3c4cec62560c403bc2edb642bce79ba deleted: sha256:af7a7e7bf72e7ad0c5227995f219d9094fafbe0ac973dbe7eb4ab190a5a58ba5 deleted: sha256:a0cfd81b291e8da6bca0731c9db70fe1b61d176906b1cf05ade1cd61572ffaaa deleted: sha256:38b00cb5dab64398092fab2b18563af1ef4a9445dec8a531ac725059dc218f41 deleted: sha256:6e60d29d2d76125f989f503a78729984f7ba3e26bfbf7038d5ab644b8755b7c2 deleted: sha256:1dafdd60e471b4c1f5244cfe1d20d79f934f504ef42180b637886be2b0b74370 deleted: sha256:2fffe8e736cdb99359084e297f4bb54a4cac879366bd3e4333d3dbe966f8e9a6 deleted: sha256:f728037697805db453111266541c202c74971484ef359ea29b9c60064ed9e47e deleted: sha256:28155a13db3520201db576bf6d56b68fc08ef27b1c4c49dbfeadef523d35c5f0 deleted: sha256:7555a8182c42c7737a384cfe03a3c7329f646a3bf389c4bcd75379fc85e6c144 untagged: redis:latest untagged: redis@sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 deleted: sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 deleted: sha256:3bd00d38f5ca70200050477c527cc60cfdf82911d6fe03932e2bcae31a95cfa2 deleted: sha256:22722fde392d188cfbe5bbd0c2451cc71cf5b000afc0e5114c1066bb5e113ec9 deleted: sha256:38212b55ef525e86cd726cd83c1a82a6009c68d24771d6e93d439fdc88e66f0e deleted: sha256:188c498579cef37b65a93d6448c6b129fa07d5740fc213a18843ff22d80cd10d deleted: sha256:2117165cd53c98f13ec7af36c9d8acd239fc541c847efaccb49885decf615d68 Total reclaimed space: 445.2MB abhisheknair@geekflare:~$

คุณยังสามารถใช้แฟล็ก --force หรือ -f เพื่อดำเนินการล้างโดยไม่ต้องมีการยืนยัน หรือใช้แฟ --filter เพื่อระบุค่าตัวกรอง (เช่น 'until=<timestamp>') ให้กับคำสั่ง prune

ตัวอย่าง:

 $ docker image prune -a --force --filter "until=2021-01-04T00:00:00"

หรือ

 $ docker image prune --filter="label=deprecated"

ใช้คำสั่ง rmi

คุณยังสามารถใช้คำสั่ง rmi กับนักเทียบท่าเพื่อลบภาพ

มันลบ (และยกเลิกการแท็ก) หนึ่งภาพขึ้นไปจากโหนด Docker หากรูปภาพมีหลายแท็ก การใช้คำสั่งนี้ร่วมกับแท็กเป็นพารามิเตอร์จะลบเฉพาะแท็กเท่านั้น หากแท็กเป็นเพียงแท็กเดียวสำหรับรูปภาพ ทั้งรูปภาพและแท็กจะถูกลบออก

คำสั่งนี้จะไม่ลบรูปภาพออกจากรีจิสตรี นอกจากนี้ คุณไม่สามารถลบอิมเมจของคอนเทนเนอร์ที่กำลังทำงานอยู่ เว้นแต่คุณจะใช้ตัวเลือก -f เช่นเดียวกับคำสั่ง docker image rm

ตัวอย่าง:

 abhisheknair@geekflare:~$ docker rmi alpine Untagged: alpine:latest Untagged: alpine@sha256:adab3844f497ab9171f070d4cae4114b5aec565ac772e2f2579405b78be67c96 Deleted: sha256:d4ff818577bc193b309b355b02ebc9220427090057b54a59e73b79bdfe139b83 Deleted: sha256:72e830a4dff5f0d5225cdc0a320e85ab1ce06ea5673acfe8d83a7645cbd0e9cf abhisheknair@geekflare:~$

คุณยังสามารถใช้ --no-prune เพื่อระบุว่าจะไม่ลบพาเรนต์ที่ไม่ติดแท็ก

หยุดคอนเทนเนอร์และลบรูปภาพ

หลายครั้ง คุณอาจต้องหยุดคอนเทนเนอร์ทั้งหมดและลบรูปภาพที่เกี่ยวข้องทั้งหมด คุณสามารถทำได้ง่ายๆ ด้วย:

 $ docker rm -vf $(docker ps -a -q)

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

 $ docker rmi -f $(docker images -a -q)

สรุป

Docker เป็นเครื่องมืออเนกประสงค์ซึ่งเป็นส่วนสำคัญของคลังแสงของวิศวกร DevOps ในปัจจุบัน และเป็นส่วนหนึ่งของเทคโนโลยีอื่นๆ เช่น Kubernetes การจัดการอิมเมจ Docker เป็นส่วนสำคัญของการจัดการและแก้ไขปัญหาการปรับใช้ Docker

ตอนนี้คุณควรมีแนวคิดพื้นฐานเกี่ยวกับความสามารถที่คำสั่ง docker CLI นำเสนอด้วยคำสั่งต่างๆ เช่น image , images และ rmi แฟล็กของพวกเขาเสนอการปรับแต่งเพิ่มเติมและเสนอตัวเลือกการกรองและการปรับแต่งขั้นสูงที่สามารถช่วยในระบบอัตโนมัติและการใช้งานขั้นสูง

ใช้ docker [COMMAND] help สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับตัวเลือกที่มีและหัวข้อวิธีใช้ที่เกี่ยวข้อง