Як поділитися моїм Docker-зображенням без використання Docker-Hub?


257

Мені цікаво, де саме зберігаються зображення Докера в моїй локальній машині. Можу чи я поділитися своїм Докер-Image без використання Docker-Hubабо Dockerfileа «реальний» Докер-зображення? І що саме відбувається, коли я "підштовхую" свій Docker-образ до Docker-Hub?


2
Для подальшої довідки: хороша стаття про переміщення зображень
докера

Відповіді:


243

Зображення Docker зберігаються у вигляді шарів файлової системи. Кожна команда в Dockerfile створює шар. Ви також можете створити шари, використовуючи docker commitкомандний рядок після внесення змін ( docker runможливо, через ).

Ці шари за замовчуванням зберігаються під /var/lib/docker. Хоча ви (теоретично) можете вишнево вибирати файли звідти та встановлювати їх на іншому докер-сервері, мабуть, погана ідея грати з внутрішнім представництвом, яке використовує Докер.

Коли ви натискаєте зображення, ці шари надсилаються до реєстру (за замовчуванням реєстр концентратора докер ..., якщо ви не позначите своє зображення іншим префіксом реєстру) і зберігаються там. Під час натискання ідентифікатор шару використовується, щоб перевірити, чи є у вас шар вже локально, або його потрібно завантажити. Ви можете docker historyзаглянути до того, які шари (інші зображення) використовуються (і певною мірою, яка команда створила шар).

Щодо варіантів спільного використання зображення без натискання на реєстр концентраторів докер, найкращі варіанти:

  • docker saveзображення або docker exportконтейнер. Це дозволить вивести файл tar на стандартний вихід, тому ви хочете зробити щось на кшталт docker save 'dockerizeit/agent' > dk.agent.latest.tar. Потім ви можете використовувати docker loadабо docker importв іншому хості.

  • Розмістіть власний приватний реєстр. - Застарілий, дивіться коментарі Дивіться зображення реєстру докера . Ми створили реєстр резервного копіювання s3, який ви можете запустити та зупинити за потребою (весь стан зберігається у вибраному вами відрізку s3), що тривіально для налаштування. Це також цікавий спосіб перегляду того, що відбувається при натисканні на реєстр

  • Використовуйте інший реєстр, наприклад quay.io (я особисто цього не пробував), хоча будь-які занепокоєння щодо докерного центру, ймовірно, стосуватимуться і тут.


6
Для подальшого ознайомлення посилання на зображення реєстру докера застаріло. Тепер ви повинні використовувати Docker Registry 2.0 та код на github / docker / дистрибуцію
RoelAdriaans

1
Я не впевнений, що зрозуміло, що Registry 2.0 - це готова до використання заміна оригіналу. Здається , пропустити деякі базові функції , такі як пошук stackoverflow.com/questions/30113726/docker-registry-2-0-api-v2
JoshRivers

1
Питання про те docker save: коли я натискаю python:2.7в реєстр зображення, що походить від іншого зображення (скажімо ), батьківське зображення не потрібно завантажувати більше одного разу, якщо воно не змінюється. Чи можна зберегти часткові зображення, щоб досягти подібної оптимізації розміру файлу? Я стрибаю через ці обручі, тому що я любитель із кількома зображеннями і не хочу платити за приватний реєстр.
Пітер

4
Не могли б ви просто витягнути файли src з git repo, включаючи Dockerfile, та docker buildз хоста?
jshxe

1
@Jishaxe частина моєї збірки полягає в тому, щоб npm install... Я не можу будувати свій хост, тому що у нього дуже мало пам'яті, і цей крок завжди провалюється (див .: github.com/npm/npm/isissue/5021 )
Soft Bullets

46

На основі цього блогу можна поділитися зображенням докера без реєстру докера, виконавши:

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

Після того, як ця команда буде виконана, ви зможете скопіювати зображення на сервер та імпортувати його наступним чином:

docker load --input latestversion-1.0.0.tar

18

Надсилання зображення докера на віддалений сервер можна виконати в 3 простих кроки:

  1. Місцево збережіть зображення докера як .tar :
docker save -o <path for created tar file> <image name>
  1. Місцево використовуйте scp для передачі .tar на віддалений

  2. На віддалений сервер завантажте зображення в докер:

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

8

Якщо ви не хочете використовувати сам Docker Hub, ви можете розмістити власне сховище Docker під Artifactory від JFrog:

https://www.jfrog.com/confluence/display/RTF/Docker+Repositories

який запуститься на ваших власних серверах.

Доступні інші постачальники хостингу, наприклад, CoreOS:

http://www.theregister.co.uk/2014/10/30/coreos_enterprise_registry/

який купив quay.io

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.