Hình ảnh Docker nguy hiểm là gì?

[ad_1]

Sửa máy tính tại nhà TPHCM

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 3d5052e52b4cdemo: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 psthay 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.

dịch vụ cài win online từ xa

[ad_2]

Vui lòng đánh giá về dịch vụ tại nhà