Làm cách nào để xóa bộ đệm hình ảnh docker?

Trong hướng dẫn này, chúng ta sẽ xem xét một số lý do tại sao hình ảnh lơ lửng và không được sử dụng lại phổ biến trong Docker. Sau đó chúng ta sẽ xem xét một số cách để loại bỏ chúng

Thỉnh thoảng nên dọn dẹp các hình ảnh Docker lơ lửng và không sử dụng vì nhiều hình ảnh không sử dụng có thể dẫn đến lãng phí dung lượng ổ đĩa

2. Các đối tượng không sử dụng trong Docker

Docker không tự động xóa các đối tượng không sử dụng. Thay vào đó, nó giữ chúng trên đĩa cho đến khi chúng tôi yêu cầu nó xóa chúng một cách rõ ràng. Một số đối tượng không sử dụng là

  • Mọi hình ảnh được kéo không có vùng chứa đang hoạt động
  • Mọi vùng chứa có trạng thái đã dừng
  • Khối lượng tương ứng với các vùng chứa đã dừng và bị loại bỏ
  • Tạo bộ đệm

Hãy khám phá cách sử dụng Docker có thể dẫn đến những hình ảnh không cần thiết và cách loại bỏ chúng

2. 1. Dangling  Docker Images

Hình ảnh lơ lửng được tạo khi chúng tôi ghi đè lên chúng bằng một hình ảnh mới có cùng tên và thẻ

Hãy xem một ví dụ nhỏ về cách cập nhật hình ảnh sẽ dẫn đến hình ảnh lơ lửng. Dưới đây là một Dockerfile đơn giản

FROM ubuntu:latest
CMD ["echo", "Hello World"]

Hãy xây dựng hình ảnh này

docker build -t my-image .

Chúng tôi có thể xác minh rằng hình ảnh được tạo bằng cách chạy lệnh bên dưới

docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
my-image     latest    7ed6e7202eca   32 seconds ago   72.8MB
ubuntu       latest    825d55fb6340   6 days ago       72.8MB

Giả sử chúng ta thêm một chút thay đổi vào Dockerfile

FROM ubuntu:latest
CMD ["echo", "Hello, World!"]

Hãy xây dựng lại hình ảnh bằng lệnh tương tự như trước và liệt kê lại các hình ảnh

docker images
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
my-image     latest    da6e74196f66   4 seconds ago        72.8MB
<none>       <none>    7ed6e7202eca   About a minute ago   72.8MB
ubuntu       latest    825d55fb6340   6 days ago           72.8MB

The build created a new my-image image. As we can see, the old image is still there, but now it's dangling. Its name and tag are set to :.

Xin lưu ý rằng nếu chúng tôi không thực hiện thay đổi đối với Dockerfile, hình ảnh sẽ không được tạo lại trong khi chạy lệnh build. Nó sẽ được sử dụng lại từ bộ đệm

2. 2. Hình ảnh Docker không sử dụng

Hình ảnh không sử dụng là hình ảnh không có vùng chứa đang chạy hoặc đã dừng được liên kết với chúng

Ví dụ về hình ảnh không sử dụng là

  • Hình ảnh được lấy từ sổ đăng ký nhưng chưa được sử dụng trong bất kỳ vùng chứa nào
  • Bất kỳ hình ảnh nào có vùng chứa đã bị xóa
  • Một hình ảnh được gắn thẻ với phiên bản cũ hơn và không được sử dụng nữa
  • Tất cả hình ảnh lơ lửng

Như chúng ta có thể thấy, hình ảnh không sử dụng không nhất thiết phải treo lủng lẳng. Chúng tôi có thể sẽ sử dụng những hình ảnh này trong tương lai và chúng tôi có thể muốn giữ chúng. Tuy nhiên, giữ nhiều hình ảnh không sử dụng có thể dẫn đến các vấn đề về dung lượng

3. Xóa hình ảnh không cần thiết

Chúng tôi đã xem xét một vài lý do tại sao hình ảnh lơ lửng và không sử dụng lại phổ biến trong Docker. Bây giờ, hãy xem xét một vài cách để loại bỏ chúng

3. 1. Xóa hình ảnh theo ID hoặc tên

Nếu biết ID hình ảnh, chúng tôi có thể sử dụng lệnh docker rmi để xóa hình ảnh

docker rmi 7ed6e7202eca

Lệnh này sẽ xóa hình ảnh có ID 7ed6e7202eca (hình ảnh lơ lửng). Hãy kiểm tra lại các hình ảnh

docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
my-image     latest    da6e74196f66   18 minutes ago   72.8MB
ubuntu       latest    825d55fb6340   6 days ago       72.8MB

Ngoài ra, chúng ta có thể sử dụng lệnh docker rmi với tên và thẻ hình ảnh nếu chúng ta muốn xóa một hình ảnh cụ thể không sử dụng

docker rmi my-image:latest

3. 2. Cắt tỉa hình ảnh Docker

Nếu chúng ta không muốn tìm các hình ảnh lơ lửng và loại bỏ từng cái một, chúng ta có thể sử dụng lệnh docker image prune. Lệnh này loại bỏ tất cả các hình ảnh lơ lửng

Nếu chúng tôi cũng muốn xóa hình ảnh không sử dụng, chúng tôi có thể sử dụng cờ -a

Hãy chạy lệnh dưới đây

________số 8

Lệnh sẽ trả về danh sách ID hình ảnh đã bị xóa và dung lượng đã được giải phóng

Nếu chúng tôi liệt kê lại các hình ảnh, chúng tôi sẽ thấy không còn hình ảnh nào vì chúng tôi không chạy bất kỳ vùng chứa nào

3. 3. Cắt tỉa hệ thống Docker

Tìm và xóa tất cả các đối tượng không sử dụng có thể rất tẻ nhạt. Để làm cho mọi thứ dễ dàng hơn, chúng ta có thể sử dụng lệnh prune hệ thống docker

Theo mặc định, lệnh này sẽ xóa các đối tượng bên dưới

  • Stopped container – container có trạng thái đã dừng
  • Các mạng không được sử dụng bởi ít nhất một vùng chứa
  • hình ảnh lủng lẳng
  • Dangling build cache – bộ đệm xây dựng hỗ trợ hình ảnh lơ lửng

Ngoài ra, chúng ta có thể thêm cờ -a để xóa tất cả vùng chứa, hình ảnh, mạng không sử dụng và toàn bộ bộ đệm bản dựng. Điều này rất hữu ích khi chúng tôi muốn giải phóng nhiều dung lượng

Hãy xem một ví dụ về điều này

docker system prune -a
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N]

4. Phần kết luận

Trong hướng dẫn này, chúng tôi đã xem xét lý do tại sao hình ảnh lơ lửng và không sử dụng lại phổ biến trong Docker. Chúng tôi cũng đã xem xét các cách để loại bỏ chúng bằng lệnh rmi, image prune và system prune