[ad_1]
Hình ảnh Dangling Docker là các lớp không được gắn thẻ và không được sử dụng tồn tại trên hệ thống tệp của máy chủ lưu trữ của bạn. Bạn có thể không biết về sự hiện diện của chúng và chúng thường là rác không mong muốn.
Trong bài viết này, bạn sẽ tìm hiểu cách hình ảnh treo lơ lửng phát sinh và những gì bạn có thể làm để làm sạch chúng. Bạn nên kiểm tra định kỳ xem bạn có bao nhiêu hình ảnh treo lơ lửng để tránh lãng phí dung lượng đĩa của mình.
Hình ảnh nguy hiểm là gì?
Một hình ảnh treo lơ lửng chỉ đơn giản là một hình ảnh không được sử dụng, không có tên và thẻ. Bạn có thể dễ dàng phát hiện những hình ảnh lủng lẳng khi bạn chạy docker images
lệnh bởi vì chúng hiển thị dưới dạng <none>:<none>
.
Trong ví dụ này, hình ảnh đầu tiên trong danh sách là hình ảnh treo lơ lửng:
$ docker images <none> <none> 509bc96b727d 2 months ago 55.3MB mysql 5.7 f26e21ddd20d 4 months ago 450MB gcr.io/k8s-minikube/kicbase v0.0.30 1312ccd2422d 6 months ago 1.14GB hello-world latest feb5d9fea6a5 11 months ago 13.3kB
Hình ảnh không được gắn thẻ nhưng vẫn tồn tại trên hệ thống của bạn. Trong trường hợp này, 55,3 MB dung lượng ổ đĩa đang được sử dụng.
Bạn có thể xác minh hình ảnh đang treo và không chỉ được sử dụng bằng cách kiểm tra xem có bất kỳ vùng chứa nào tham chiếu đến nó hay không:
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS 2aa683500ee0 gcr.io/k8s-minikube/kicbase:v0.0.30 "/usr/local/bin/entr..." 18 hours ago Exited (130) 18 hours ago
Không có vùng chứa nào tham chiếu đến <none>:<none>
hình ảnh có ID 509bc96b727d
vì vậy nó chắc chắn là treo lủng lẳng. Lưu ý rằng hình ảnh MySQL và Hello World đừng lớp dưới dạng treo lơ lửng – mặc dù không được sử dụng bởi các vùng chứa, chúng được gắn thẻ đúng cách nên có thể bạn sẽ muốn giữ chúng.
Hình ảnh Dangling được tạo ra như thế nào?
Hình ảnh nguy hiểm thường được tạo khi một hình ảnh hiện có được thay thế bằng một bản dựng mới. Đây là một Dockerfile đơn giản để chứng minh những gì sẽ xảy ra:
FROM alpine:latest COPY demo.txt /demo.txt
Tạo một tệp có tên demo.txt
trong thư mục làm việc của bạn và thêm một số nội dung vào đó:
$ echo 1 > demo.txt
Bây giờ hãy xây dựng hình ảnh của bạn với docker build
:
$ docker build -t demo:latest .
Chạy docker images
lệnh để xem hình ảnh mới của bạn:
REPOSITORY TAG IMAGE ID CREATED SIZE demo latest 40395b6c1362 24 seconds ago 5.54MB
Bây giờ hãy sửa đổi nội dung của demo.txt
và xây dựng lại hình ảnh của bạn:
$ echo 2 > demo.txt $ docker build -t demo:latest .
Cùng một thẻ hình ảnh được sử dụng – demo:latest
– vì vậy bản dựng này thay thế bản đầu tiên. Chạy docker images
để xem hiệu quả:
REPOSITORY TAG IMAGE ID CREATED SIZE demo latest 3d5052e52b4c 3 seconds ago 5.54MB <none> <none> 40395b6c1362 59 seconds ago 5.54MB
Hình ảnh mới đã được tạo với ID 3d5052e52b4c
và demo:latest
nhãn. Hình ảnh đầu tiên, ID 40395b6c1362
, vẫn tồn tại nhưng chưa được gắn thẻ. Bây giờ nó hiển thị là <none>:<none>
. Hình ảnh này đã trở thành một hình ảnh treo lơ lửng vì không có thùng chứa nào sử dụng nó.
Bạn có thể sử dụng hình ảnh nguy hiểm không?
Hình ảnh nguy hiểm hoạt động giống như bất kỳ hình ảnh nào khác. Sự khác biệt duy nhất là thẻ bị thiếu. Bạn có thể bắt đầu một vùng chứa từ một hình ảnh treo lơ lửng bằng cách tham chiếu trực tiếp ID của hình ảnh:
$ docker run -it 40395b6c1362 sh / #
Về mặt kỹ thuật, hình ảnh không còn bị treo nữa, bởi vì nó hiện đang được sử dụng tích cực bởi một vùng chứa. Các vùng chứa kết thúc bằng một none
hình ảnh nếu bạn xóa hoặc xây dựng lại thẻ mà họ đã sử dụng. Các vùng chứa có hình ảnh chưa được gắn thẻ sẽ hiển thị ID của hình ảnh trong IMAGE
cột khi bạn chạy docker ps
thay vì thẻ thông thường.
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 26d5609ba75c 40395b6c1362 "sh" 2 seconds ago Up 1 second inspiring_lederberg 91ab866b59a2 portainer/portainer-ce "/portainer" 2 weeks ago Up 2 days 8000/tcp, 9443/tcp portainer_portainer_1
Làm sạch hình ảnh nguy hiểm
Bạn có thể xóa một hình ảnh treo lơ lửng bằng cách sử dụng docker rmi
lệnh, giống như bất kỳ hình ảnh nào khác. Vì hình ảnh sẽ không được gắn thẻ, bạn sẽ cần xác định nó bằng ID của nó.
$ docker rmi 40395b6c1362
Một cách tốt hơn để xóa nhiều hình ảnh treo lủng lẳng là docker image prune
yêu cầu. Thao tác này sẽ tự động xóa tất cả các hình ảnh treo lơ lửng trên máy chủ Docker của bạn.
$ docker image prune Total reclaimed space: 5.54 MB
Đầu ra của lệnh hiển thị dung lượng ổ đĩa đã được giải phóng. Kiểm tra xem hình ảnh của bạn có thực sự bị treo nếu không có gì bị xóa. Không thể xóa hình ảnh được sử dụng bởi vùng chứa. Bạn sẽ cần xóa các vùng chứa với docker rm
đầu tiên, trước khi bạn cố gắng cắt tỉa hình ảnh của mình.
Bạn có thể thấy mình có một hình ảnh lủng lẳng mà bạn thực sự muốn sử dụng lại trong tương lai. Trong tình huống này, bạn có thể gắn thẻ lại nó bằng docker tag
yêu cầu. Điều này sẽ giúp hình ảnh dễ nhận dạng hơn và ngăn nó trở thành mục tiêu của các hoạt động cắt tỉa trong tương lai.
$ docker tag 40395b6c1362 demo:latest
Hình ảnh hiển thị dưới dạng <none>:<none>
có thể không phải là hình ảnh lủng lẳng. Thật khó hiểu, tình huống này cũng xảy ra đối với các hình ảnh được tạo như các lớp trung gian trong quá trình xây dựng.
Mỗi bước trong Dockerfile dẫn đến một lớp trung gian mới được tạo. Hình ảnh được tạo ra ở cuối bản dựng được gán thẻ bạn chỉ định. Các lớp trung gian khác vẫn không được gắn thẻ và có thể được xem bằng cách chạy docker images -a
.
Các lớp này không phải là hình ảnh treo lơ lửng vì các hình ảnh sau đó trong chuỗi xây dựng phụ thuộc vào chúng. Chúng được tham chiếu bởi từng lớp kế tiếp và không gây ra sự cố về dung lượng ổ đĩa. Bạn có thể ngăn các lớp trung gian được lưu vào đĩa bằng cách bao gồm --rm
gắn cờ tại thời điểm xây dựng:
$ docker build --rm -t demo:latest .
Bản tóm tắt
Hình ảnh nguy hiểm là hình ảnh Docker không được gắn thẻ không được vùng chứa sử dụng hoặc phụ thuộc vào hậu duệ. Chúng thường không phục vụ mục đích nhưng vẫn tiêu tốn dung lượng đĩa. Bạn sẽ tích lũy các hình ảnh lủng lẳng khi bạn thay thế một thẻ hiện có bằng cách bắt đầu một bản dựng mới.
Tất cả các hình ảnh lủng lẳng hiển thị dưới dạng <none>:<none>
trong Docker CLI. Có quá nhiều người trong số họ có thể gây choáng ngợp khi bạn có hàng tá hình ảnh không có thông tin về danh tính thực sự của họ. Thường xuyên chạy docker images prune
sẽ tránh lãng phí dung lượng ổ đĩa và dẫn đến danh sách hình ảnh ngắn hơn.
[ad_2]