Docker là công cụ giúp dễ dàng đóng gói các ứng dụng và dịch vụ. Nhưng vẫn cần dọn dẹp thường xuyên để tiết kiệm dung lượng đĩa. Dưới đây là hướng dẫn remove Docker image, container và volume.
Nội dung
Docker Cheat Sheet
Giới thiệu về Docker
Docker giúp bạn dễ dàng gói các ứng dụng và dịch vụ trong container để có thể chạy ở bất cứ đâu. Tuy nhiên, khi làm việc với Docker, bạn cũng có thể tích lũy quá nhiều image, container, data volume. Việc này làm lộn xộn đầu ra và tốn nhiều dung lượng đĩa.
Docker cung cấp cho bạn tất cả công cụ cần để dọn dẹp hệ thống từ command line. Cheat Sheet này sẽ hướng dẫn giải phóng dung lượng đĩa, giữ cho hệ thống được gọn gàng bằng cách remove Docker image, container và volume.
Các cú pháp thay thế lệnh, command $(command)
, sử dụng trong các lệnh đều khả dụng trong các shell phổ biến như bash, zsh và Windows Powershell.
Xóa tất cả dangling image, container, volume và network không sử dụng
Docker cung cấp một lệnh để dọn sạch tất cả tài nguyên – dangling image, container, volume và network (không được liên kết với container):
docker system prune
Để remove thêm bất kỳ container đã ngưng hoạt động, hoặc các image không cần sử dụng, thêm flag -a
vào lệnh:
docker system prune -a
Remove Docker Image
Xóa một hoặc một số image nhất định
Dùng lệnh docker images
với flag -a
để định vị ID của image bạn muốn remove. Nó sẽ hiển thị mọi image, kể cả các lớp image trung gian. Sau khi xác định được image muốn xóa, hãy truyền ID hoặc tag của chúng đến docker rmi
:
List:
docker images -a
Remove:
docker rmi Image Image
Xóa dangling image
Docker image bao gồm nhiều lớp khác nhau. Danling image là các lớp không có liên hệ gì với các image được tag. Chúng không có mục đích gì nữa, và tiêu tốn dung lượng đĩa. Các dangling image có thể được định vị bằng cách thêm filter flag –f
với giá trị dangling=true
vào lệnh docker images
. Khi bạn chắc chắn muốn xóa chung, bạn có thể dùng lệnh docker image prune
.
Lưu ý: Nếu bạn build một image mà không có tag, image sẽ hiện trong danh sách dangling image vì nó không được liên kết với image được tag. Bạn có thể tránh trường hợp này bằng cách bổ sung tag khi build image. Hoặc bạn có thể gắn retroactively tag bằng lệnh dockter tag.
List:
docker images -f dangling=true
Remove:
docker image prune
Xóa image theo mẫu
Bạn có thể tìm được tất cả image theo mẫu cụ thể bằng tổ hợp docker images
và grep
. Sau đó, bạn có thể xóa chúng bằng awk
và pass ID đến docker rmi
. Lưu ý thằng các tiện ích này không được bổ sung với Docker, và không có sẵn trên tất cả hệ thống:
List:
docker images -a | grep "pattern"
Remove:
docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi
Xóa tất cả image
Tất cả Docker image trên một hệ thống có thể được liệt kê bằng cách thêm -a
vào lệnh docker images
. Sau khi chắc chắn bạn muốn xóa hết, hãy thêm flag -q
để pass ID image vào docker rmi
:
List:
docker images -a
Remove:
docker rmi $(docker images -a -q)
Remove Docker Container
Xóa một hoặc một số container nhất định
Dùng lệnh docker ps
với flag -a
để định vị tên hoặc ID của container bạn muốn xóa:
List:
docker ps -a
Remove:
docker rm ID_or_Name ID_or_Name
Xóa một container khi thoát
Khi tạo một container, nếu bạn biết mình không muốn giữ nó sau khi công việc hoàn tất, bạn có thể chạy docker run --rm
để tự động xóa khi thoát container.
Run and Remove:
docker run --rm image_name
Xóa tất cả container đã thoát
Bạn có thể định vị các container bằng docker ps -a
và lọc chúng theo trạng thái: được tạo, đang khởi tạo, đang chạy, đã tạm dừng, đã thoát. Để xem danh sách tất cả container đã thoát, dùng flag -f
để lọc theo trạng thái. Sau khi xác thực bạn muốn xóa các container này, dùng -q
để pass các ID vào lệnh docker rm
.
List:
docker ps -a -f status=exited
Remove:
docker rm $(ps -a -f status=exited -q)
Xóa container sử dụng nhiều hơn một bộ lọc
Các docker filter có thể được kết hợp bằng cách lặp lại các filter flag với một giá trị bổ sung. Nó sẽ trả lại danh sách các container thỏa mãn điều kiện. Ví dụ, bạn muốn xóa tất cả container được đánh dấu là Created (trạng thái có thể do bạn chạy container với lệnh không hợp lệ) hoặc Exited:
List
docker ps -a -f status=exited -f status=created
Remove:
docker rm $(docker ps -a -f status=exited -f status=created -q)
Xóa các container theo mẫu
Bạn có thể tìm tất cả container phù hợp với một mẫu nào đó bằng cách kết hợp docker ps
và grep
. Sau khi hài lòng với danh sách bạn muốn xóa, bạn có thể sử dụng awk
và xargs
để cung cấp ID cho docker rm
. Lưu ý rằng các tiện ích này không được cung cấp bởi Docker và không có sẵn trên tất cả hệ thống:
List:
docker ps -a | grep "pattern”
Remove:
docker ps -a | grep "pattern" | awk '{print $1}' | xargs docker rm
Dừng và xóa tất cả container
Bạn có thể xem lại các container trên hệ thống bằng docker ps
. Thêm flag -a
sẽ hiện tất cả container. Khi chắc chắn bạn muốn xóa chúng, bạn có thể flag -q
để cung cấp ID cho lệnh docker stop
và docker rm
:
List:
docker ps -a
Remove:
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
Remove Docker Volume
Xóa một hoặc một số volume nhất định – Docker 1.9 trở đi
Dùng lệnh docker volume ls
để định vị tên volume bạn muốn xóa. Sau đó, bạn có thể xóa một hoặc nhiều volume với lệnh docker volume rm
:
List:
docker volume ls
Remove:
docker volume rm volume_name volume_name
Xóa dangling volume – Docker 1.9 trở đi
Vì các volume tồn tại độc lập với container, nên khi một container bị xóa, volume không được tự động xóa theo. Khi một volume tồn tại và không được kết nối với bất kỳ container nào, nó được gọi là một dangling volume. Để định vị chúng và xác nhận bạn muốn xóa, hãy dùng lệnh docker volume ls
với một filter để giới hạn kết quả còn dangling volume. Sau khi thỏa mãn với danh sách, bạn có thể xóa tất cả chúng với docker volume prune
:
List:
docker volume ls -f dangling=true
Remove:
docker volume prune
Xóa một container và volume của nó
Nếu bạn tạo một volume chưa được đặt tên, nó có thể bị xóa cùng lúc với container bằng flag -v.
Lưu ý rằng nó chỉ hoạt động với các volume chưa đặt tên. Khi container được xóa thành công, ID của nó sẽ được hiển thị. Ngoài ra, không có tham chiếu nào liên quan đến việc xóa volume. Khi nó không được đặt tên, nó sẽ âm thầm bị xóa khỏi hệ thống. Còn khi đã được đặt tên, nó sẽ tiếp tục tồn tại.
Remove:
docker rm -v container_name
Kết luận
Hướng dẫn này đã bao gồm một số lệnh phổ biến để remove docker image, container và volume. Ngoài ra, còn có nhiều kết hợp với các flag có thể được sử dụng cho mỗi lệnh.
Theo digitalocean.com.