xóa hình ảnh Docker được gắn thẻ từ đăng ký riêng


10

Làm cách nào tôi có thể xóa thẻ được thêm nhầm từ hình ảnh trong sổ đăng ký Docker riêng? Tùy chọn -rmi dường như không hoạt động đối với các hình ảnh từ xa trong Docker 1.9.1.

user@ubuntu-user:~$ docker --version  
Docker version 1.9.1, build a34a1d5

user@ubuntu-user:~$ docker search myregistry:5000/user/image
NAME                                                                     
myregistry:5000/user/image:20160119                                         
myregistry:5000/user/image:20160119-20160120        

user@ubuntu-user:~$ docker rmi myregistry:5000/user/image:20160119-20160120
Error response from daemon: could not find image: no such id: myregistry:5000/user/image:20160119-20160120
Error: failed to remove images: [myregistry:5000/user/image:20160119-20160120]

Câu trả lời:


9

Cho đến ngày nay, dường như không có phương pháp đơn giản nào để xóa hình ảnh khỏi sổ đăng ký và có vẻ như đây là một tính năng cho cột mốc đăng ký 2.1 .

Một trong những lựa chọn những gì chúng ta có ngày hôm nay với điều này không hoạt động

anovil@ubuntu-anovil remove-registry]$ curl -X DELETE localhost:5000/v2/alpine/manifests/v1
{"errors":[{"code":"UNSUPPORTED","message":"The operation is unsupported."}]}
[anovil@ubuntu-anovil remove-registry]$ 

là tự gỡ bỏ nó khỏi registry. Chỉ để tránh vô tình xóa nhầm tập tin, tôi đã thử nó với tập lệnh này từ github . Tôi không đảm bảo về cách thức hoạt động của tập lệnh này (mặc dù tôi đã kiểm tra nó một cách nhanh chóng trước khi tôi kiểm tra nó).

Vì vậy, tôi đã làm một bài kiểm tra và dường như nó hoạt động :)

[1] Tôi cho rằng, bạn đang chạy một sổ đăng ký với chính docker.

[anovil@ubuntu-anovil remove-registry]$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
88f8e1a1d7a7        registry:2          "/bin/registry /etc/d"   37 minutes ago      Up 37 minutes       0.0.0.0:5000->5000/tcp   registry
[anovil@ubuntu-anovil remove-registry]$ 

[2] Tôi đã tạo một Dockerfile tối thiểu chỉ với FROM alpinenội dung và tạo alpine: v1 và được đẩy đến sổ đăng ký riêng của tôi chạy trên localhost: 5000. Truy vấn nó từ registry, nó trở lại như mong đợi.

[anovil@ubuntu-anovil remove-registry]$ curl -X GET localhost:5000/v2/alpine/tags/list
{"name":"alpine","tags":["v1"]}
[anovil@ubuntu-anovil remove-registry]$ 

[3] Sau đó, tôi đăng nhập vào sổ đăng ký docker execvà kiểm tra việc sử dụng đĩa trước khi thực hiện thử nghiệm của mình

root@88f8e1a1d7a7:/# du -sch /var/lib/registry/                     
2.5M    /var/lib/registry/
2.5M    total
root@88f8e1a1d7a7:/# 

[4] Sau khi trở về máy chủ của mình, tôi đã sao chép một tập tin nặng (mongodb.tgz) vào thùng chứa của mình và tạo một phiên bản v2 được xây dựng và đẩy.

[anovil@ubuntu-anovil remove-registry]$ docker build -t localhost:5000/alpine:v2 .
Sending build context to Docker daemon 61.99 MB
Step 1 : FROM alpine
 ---> 2314ad3eeb90
Step 2 : COPY mongodb.tgz /mongodb.tgz
 ---> d7c7645a3fe2
Successfully built d7c7645a3fe2
[anovil@ubuntu-anovil remove-registry]$ docker push localhost:5000/alpine:v2
The push refers to a repository [localhost:5000/alpine] (len: 1)
d7c7645a3fe2: Pushed 
5ff05309724e: Image already exists 
v2: digest: sha256:7bea1ec2910170bd88412b622aee6129791673cf1fd8c0e1e34f15ec26428774 size: 4467
[anovil@ubuntu-anovil remove-registry]$ 

[5] Sau khi kiểm tra lại kích thước trong sổ đăng ký, nó đã tăng lên 62MB:

root@88f8e1a1d7a7:/# du -sch /var/lib/registry/                                                                               
62M /var/lib/registry/
62M total
root@88f8e1a1d7a7:/# 

[6] Để chạy delete_docker_registry_image, bạn cần đưa tập lệnh vào vùng chứa đang lưu trữ sổ đăng ký, một tùy chọn để thực hiện việc này là với curl. Ngoài ra, kịch bản này yêu cầu jq.

root@88f8e1a1d7a7:/# apt-get update && apt-get install -y curl jq
...
root@88f8e1a1d7a7:/#

[7] Chạy tập lệnh, thử với --dry-runtùy chọn trước và đừng quên thẻ phiên bản (v2 trong trường hợp này), đó cũng là một điều tốt-h

root@88f8e1a1d7a7:/# delete_docker_registry_image --image alpine:v2 --dry-run
DRY_RUN: would have deleted tag directory: repositories/alpine/_manifests/tags/v2
DRY_RUN: would have deleted manifest revision: repositories/alpine/_manifests/revisions/sha256/7bea1ec2910170bd88412b622aee6129791673cf1fd8c0e1e34f15ec26428774
DRY_RUN: would have deleted directory: blobs/sha256/e2/e2cc9aed084e01fa5cf93c09121035ac4d712113425ae68b678c28591beec5c6
DRY_RUN: would have deleted directory: blobs/sha256/7a/7ada67971e952e353ab14d8f9bdd4e41e4c41099b05a5da09f2700b51d93908a
DRY_RUN: would have deleted directory: blobs/sha256/7b/7bea1ec2910170bd88412b622aee6129791673cf1fd8c0e1e34f15ec26428774
DRY_RUN: would have deleted layer metadata directory: repositories/alpine/_layers/sha256/e2cc9aed084e01fa5cf93c09121035ac4d712113425ae68b678c28591beec5c6
root@88f8e1a1d7a7:/# delete_docker_registry_image --image alpine:v2          
root@88f8e1a1d7a7:/#

[8] Và thì đấy !!

root@88f8e1a1d7a7:/# du -sch /var/lib/registry/                     
2.5M    /var/lib/registry/
2.5M    total
root@88f8e1a1d7a7:/#  


0

Gần đây tôi mới chạy vào đây, nhưng sau đó nghĩ, tại sao lại xóa, tôi sẽ phát hành lại một phiên bản cũ hơn:

docker push my/image:1.0.0
docker push my/image:1.0.1 # This is broken

docker tag  my/image:1.0.0 my/image:1.0.2
docker push my/image:1.0.2

Hình ảnh bị hỏng vẫn sẽ ở đó, nhưng không ai có thể sử dụng nó vì có sẵn phiên bản "mới hơn". Rõ ràng là tốt hơn để khắc phục về phía trước nhưng trong một tình huống khó khăn thì đây là một giải pháp nhanh.

Nếu lý do bạn muốn xóa nó là vì nó có bí mật hoặc thứ gì đó bị lộ mà bạn không muốn thoát ra, thì các giải pháp khác sẽ tốt hơn, nhưng giả sử bất cứ điều gì nó đã được biết và thay đổi nó (mật khẩu, khóa, bất cứ điều gì).


1
Vì vậy, không gian lưu trữ cần thiết chỉ tăng lên và phát triển khi nhiều hình ảnh được đẩy nhưng không bao giờ bị xóa?
emmdee

@emmdee ý tôi là vâng ... nhưng hãy nhớ rằng, thông minh về đĩa, nó chỉ lưu trữ các vùng đồng bằng giữa các phiên bản, giống như git. đối với hình ảnh kết thúc là 1 GB, điều đó không có nghĩa là mỗi khi bạn phát hành phiên bản mới, đó là 1 GB khác được sử dụng trên đĩa.
Michael Butler
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.