Làm cách nào để chia sẻ Docker-Image của tôi mà không cần sử dụng Docker-Hub?


257

Tôi đang tự hỏi nơi hình ảnh của Docker được lưu trữ chính xác trong máy chủ cục bộ của tôi. Tôi có thể chia sẻ Docker-Image của mình mà không cần sử dụng Docker-Hubhoặc một DockerfileDocker-Image 'thật' không? Và chính xác thì chuyện gì đang xảy ra khi tôi 'đẩy' Docker-Image của mình sang Docker-Hub?


2
Để tham khảo trong tương lai: một bài viết hay về di chuyển hình ảnh
docker

Câu trả lời:


243

Hình ảnh Docker được lưu trữ dưới dạng các lớp hệ thống tập tin. Mỗi lệnh trong Dockerfile tạo ra một lớp. Bạn cũng có thể tạo các lớp bằng cách sử dụng docker committừ dòng lệnh sau khi thực hiện một số thay đổi ( docker runcó thể thông qua ).

Các lớp này được lưu trữ theo mặc định dưới /var/lib/docker. Mặc dù về mặt lý thuyết, bạn có thể chọn các tệp anh đào từ đó và cài đặt nó trong một máy chủ docker khác, có lẽ là một ý tưởng tồi để chơi với biểu diễn bên trong được sử dụng bởi Docker.

Khi bạn đẩy hình ảnh của mình, các lớp này được gửi đến cơ quan đăng ký (đăng ký trung tâm docker, theo mặc định, trừ khi bạn gắn thẻ hình ảnh của mình với một tiền tố đăng ký khác) và được lưu trữ ở đó. Khi đẩy, id lớp được sử dụng để kiểm tra xem bạn đã có lớp cục bộ hay chưa cần tải xuống. Bạn có thể sử dụng docker historyđể xem qua các lớp (hình ảnh khác) được sử dụng (và, ở một mức độ nào đó, lệnh nào đã tạo ra lớp đó).

Đối với các tùy chọn để chia sẻ một hình ảnh mà không cần đẩy vào sổ đăng ký trung tâm docker, các tùy chọn tốt nhất của bạn là:

  • docker savemột hình ảnh hoặc docker exportmột container. Điều này sẽ xuất một tệp tar thành đầu ra tiêu chuẩn, vì vậy bạn sẽ muốn làm một cái gì đó như thế nào docker save 'dockerizeit/agent' > dk.agent.latest.tar. Sau đó, bạn có thể sử dụng docker loadhoặc docker importtrong một máy chủ khác.

  • Lưu trữ đăng ký riêng của bạn. - Lỗi thời, xem bình luận Xem hình ảnh đăng ký docker . Chúng tôi đã xây dựng một sổ đăng ký được hỗ trợ s3 mà bạn có thể bắt đầu và dừng khi cần thiết (tất cả trạng thái được giữ trong nhóm s3 bạn chọn) rất đơn giản để thiết lập. Đây cũng là một cách thú vị để xem những gì xảy ra khi đẩy vào sổ đăng ký

  • Sử dụng một sổ đăng ký khác như quay.io (cá nhân tôi chưa từng thử nó), mặc dù bất kỳ mối quan tâm nào của bạn với trung tâm docker cũng có thể sẽ áp dụng ở đây.


6
Để tham khảo trong tương lai, liên kết đến hình ảnh đăng ký docker đã lỗi thời. Bây giờ bạn nên sử dụng Docker Registry 2.0 và mã trên github /
docker

1
Tôi không chắc chắn rằng Registry 2.0 đã sẵn sàng để sử dụng thay thế cho bản gốc. Nó dường như bỏ lỡ một số chức năng cơ bản như tìm kiếm stackoverflow.com/questions/30113726/docker-regology-2-0-api-v2
JoshRivers

1
Câu hỏi về docker save: khi tôi đẩy một hình ảnh xuất phát từ một hình ảnh khác (giả sử python:2.7) sang một sổ đăng ký, hình ảnh gốc không cần phải được tải lên nhiều lần trừ khi nó thay đổi. Tôi có thể lưu hình ảnh một phần để đạt được tối ưu hóa kích thước tệp tương tự không? Tôi đang nhảy qua những vòng quay này bởi vì tôi là người có sở thích với nhiều hình ảnh và tôi không muốn trả tiền cho một sổ đăng ký riêng.
Pieter

4
Bạn có thể không chỉ kéo các tệp src từ repo git, bao gồm Dockerfile và docker buildtrên máy chủ không?
jshxe

1
@Jishaxe một phần trong bản dựng của tôi là npm install... Tôi không thể xây dựng trên máy chủ của mình vì nó có rất ít bộ nhớ và bước này luôn thất bại (xem: github.com/npm/npm/issues/5021 )
Đạn mềm

46

Dựa trên blog này , người ta có thể chia sẻ hình ảnh docker mà không cần đăng ký docker bằng cách thực hiện:

docker save --output latestversion-1.0.0.tar dockerregistry/latestversion:1.0.0

Khi lệnh này đã được hoàn thành, người ta có thể sao chép hình ảnh vào máy chủ và nhập nó như sau:

docker load --input latestversion-1.0.0.tar

18

Gửi một hình ảnh docker đến một máy chủ từ xa có thể được thực hiện trong 3 bước đơn giản:

  1. Tại địa phương, lưu hình ảnh docker dưới dạng .tar :
docker save -o <path for created tar file> <image name>
  1. Tại địa phương, sử dụng scp để chuyển .tar sang từ xa

  2. Trên máy chủ từ xa, tải hình ảnh vào docker:

docker load -i <path to docker image tar file>

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.