Cách để xóa Docker Images, Containers, và Volumes

4 năm trước

 

Giới Thiệu 

Docker giúp dễ dàng gói các ứng dụng và dịch vụ của bạn trong các containers để bạn có thể chạy chúng ở mọi nơi. Tuy nhiên, khi bạn làm việc với Docker, bạn cũng có thể dễ dàng tích lũy quá nhiều hình ảnh, containers và volumes dữ liệu không được sử dụng làm lộn xộn đầu ra và tiêu thụ không gian đĩa.

Docker cung cấp cho bạn tất cả các công cụ cần thiết để dọn sạch hệ thống của bạn từ dòng lệnh. Tài liệu hướng dẫn kiểu trang tính này cung cấp tham chiếu nhanh đến các lệnh hữu ích để giải phóng dung lượng đĩa và giữ cho hệ thống của bạn được sắp xếp bằng cách loại bỏ các hình ảnh, containers và volumes Docker chưa sử dụng.

Cách để sử dụng hướng dẫn này :

  • Hướng dẫn này có định dạng trang cheat với đoạn mã dòng lệnh khép kín
  • Chuyển đến bất kỳ phần nào có liên quan đến tác vụ bạn đang cố gắng hoàn thành..

Cú pháp thay thế lệnh, command $(command), được sử dụng trong các lệnh có sẵn trong nhiều shell phổ biến như bash, zsh và Windows Powershell.

 

Xóa tất cả hình ảnh chưa sử dụng hoặc thừa, Containers, Volumes và Networks

Docker cung cấp một lệnh duy nhất sẽ dọn sạch mọi tài nguyên - hình ảnh, containers , volumes và networks - đang treo lơ lửng (không được liên kết với container):

 docker system prune

    Để loại bỏ thêm bất kỳ container đã dừng nào và tất cả các hình ảnh không sử dụng (không chỉ là hình ảnh lơ lửng),hãy thêm chỉ báo -avào lệnh:  

    docker system prune -a
     

    Xóa Docker Images

    Xóa một hoặc nhiều hình ảnh cụ thể

    Sử dụng lệnh docker imagesvới chỉ báo -a  để định vị ID của hình ảnh bạn muốn xóa. Điều này sẽ hiển thị cho bạn mọi hình ảnh, bao gồm các lớp hình ảnh trung gian. Khi bạn đã định vị những hình ảnh bạn muốn xóa, bạn có thể chuyển ID hoặc thẻ của họ tới docker rmi:

    List:

    docker images -a

    Xóa:

    docker rmi ImageImage

    Xóa hình ảnh lơ lửng

    Hình ảnh Docker bao gồm nhiều lớp. Hình ảnh lơ lửnglà các lớp không có mối quan hệ với bất kỳ hình ảnh được gắn thẻ nào. Chúng không còn phục vụ một mục đích và tiêu thụ không gian đĩa. Chúng có thể được định vị bằng cách thêm cờ lọc, -fvới giá trị dangling=true vào lệnh docker images. Khi bạn chắc chắn muốn xóa chúng, bạn có thể sử dụng lệnh docker images purge :

    Nếu bạn xây dựng một hình ảnh mà không gắn thẻ nó, hình ảnh sẽ xuất hiện trên danh sách các hình ảnh lơ lửng bởi vì nó không có liên kết với một hình ảnh được gắn thẻ. Bạn có thể tránh tình trạng này bằng cách cung cấp thẻ khi bạn xây dựng và bạn có thể gắn thẻ lại một hình ảnh với lệnh thẻ docker.

    Chú ý: Nếu bạn xây dựng một hình ảnh mà không gắn thẻ nó , hình ảnh sẽ xuất hiện trên danh sách các hình ảnh lơ lửng bởi vì nó không có liên kết với một hình ảnh được gắn thẻ . Bạn có thể tránh tình trạng này bằng cách cung cấp thẻ khi xây dựng và bạn có thể gắn thẻ lại một hình ảnh với lệnh docker tag.

    List:

    docker images -f dangling=true

    Remove:

    docker images purge

    Xóa hình ảnh theo mẫu

    Bạn có thể tìm thấy tất cả các hình ảnh phù hợp với một mẫu bằng cách  kết hợp docker images và grep. Khi hài lòng,hãy xóa chúng bằng cách sử dụng awk để chuyển các ID tới docker rmi. Lưu ý rằng những tiện ích này không được Docker cung cấp và không nhất thiết phải có trên tất cả cá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ả hình ảnh

    Tất cả các hình ảnh Docker 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. Khi bạn chắc chắn muốn xóa tất cả, bạn có thể thêm cờ-q  để chuyển ID hình ảnh tới docker rmi:

    List:

    docker images -a

    Remove:

    docker rmi $(docker images -a -q)
     

    Xóa Containers

    Xóa một hoặc nhiều container cụ thể

    Sử dụng lệnh docker ps với cờ -a-a để xác định tên hoặc ID của các container mà bạn muốn xóa:

    List:

    docker ps -a

    Remove:

    docker rm ID_or_NameID_or_Name

    Xóa container khi thoát

    Nếu  biết khi nào bạn đang tạo container mà bạn sẽ không muốn giữ nó khi hoàn tất, bạn có thể chạy docker run --rm  để tự động xóa container khi nó thoát.

    Chạy và xóa:

    docker run --rm image_name

    Xóa tất cả các container đã thoát

    Bạn có thể định vị cáccontainer bằng cách sử dụng docker ps -a và lọc chúng theo trạng thái : được tạo, khởi động lại, chạy, tạm dừng hoặc thoát. Để xem lại danh sách các container đã thoát, hãy sử dụng chỉ báo-f  để lọc dựa trên trạng thái. Khi bạn đã xác minh bạn muốn loại bỏ các container đó, hãy sử dụng -q để chuyển các ID tới lệnh docker rm.

    List:

    docker ps -a -f status=exited

    Remove:

    docker rm $(docker ps -a -f status=exited -q)

    Xóa containers bằng nhiều bộ lọc

    Bộ lọc Docker có thể được kết hợp bằng cách lặp lại cờ lọc với một giá trị bổ sung. Điều này dẫn đến một danh sách các container đáp ứng một trong hai điều kiện. Ví dụ: nếu bạn muốn xóa tất cả container được đánh dấu là Created (trạng thái có thể dẫn đến khi bạn chạy container với lệnh không hợp lệ) hoặc  Exited, bạn có thể sử dụng hai bộ lọc:

    List:

    docker ps -a -f status=exited -f status=created

    Remove:

    docker rm $(docker ps -a -f status=exited -f status=created -q)

    Loại bỏ các containers theo mẫu

    Bạn có thể tìm thấy tất cả các containers khớp với mẫu bằng cách kết hợp giữa docker ps và grep. Khi bạn hài lòng rằng bạn có danh sách bạn muốn xóa, hãy sử dụng awk và xargs để cung cấp ID cho  docker rmi. Lưu ý rằng các tiện ích này không được Docker cung cấp và không nhất thiết phải có trên tất cả các hệ thống:

    List:

    docker ps -a | grep "pattern

    Remove:

    docker ps -a | grep "pattern" | awk '{print $3}' | xargs docker rmi

    Dừng và xóa tất cả containers

    Bạn có thể xem lại các container trên hệ thống của bạn với docker ps. Thêm cờ-a  sẽ hiển thị tất cả các container. Khi bạn chắc chắn muốn xóa chúng, bạn có thể thêm cờ -qđể cung cấp các ID cho các lệnh docker stop và docker rm:

    List:

    docker ps -a

    Remove:

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

    Xóa Volumes

    Xóa một hoặc nhiều Volumes cụ thể - Docker 1.9 trở lên

    Sử dụng lệnh docker volume ls để xác định tên volumehoặc tên bạn muốn xóa. Sau đó, bạn có thể xóa một hoặc nhiều volumes bằng lệnh docker volume rm:U

    List:

    docker volume ls

    Remove:

    docker volume rm volume_namevolume_name

    Xóa Volumes lơ lửng - Docker 1.9 trở lên

    Vì điểm của volumes là tồn tại độc lập với các container, khi một container được lấy ra, một volume không được tự động loại bỏ cùng một lúc. Khi một volume tồn tại và không còn kết nối với bất kỳ container nào, nó được gọi là volume lơ lửng. Để xác định vị trí chúng để xác nhận bạn muốn xóa , hãy sử dụng lệnh docker volume lsvới bộ lọc để giới hạn kết quả volumes lơ lửng. Khi bạn đã hài lòng với danh sách, hãy 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 container và volume của nó

    Nếu bạn đã tạo một volume chưa đặt tên, nó có thể bị xóa cùng lúc với container có chỉ báo -v. Lưu ý rằng điều này chỉ hoạt động với volume chưa đặt tên. Khi container được loại bỏ thành công, ID của nó sẽ được hiển thị. Lưu ý rằng không có tham chiếu nào được thực hiện để loại bỏ volume. Nếu chưa được đặt tên, nó sẽ bị xóa khỏi hệ thống. Nếu được đặt tên, nó  vẫn âm thầm 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 được sử dụng để xóa hình ảnh, containers và volumes với Docker. Có nhiều kết hợp và chỉ báo khác có thể được sử dụng với nhau. Để có hướng dẫn toàn diện về những gì có sẵn, xem tài liệu Docker cho  docker system prunedocker rmidocker rm và docker volume rm. Nếu có các tác vụ dọn dẹp thông thường bạn muốn xem trong hướng dẫn, vui lòng hỏi hoặc đưa ra đề xuất trong các nhận xét.