Как поделиться своим Docker-образом без использования Docker-Hub?

257

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

yaquawa
источник
2
Для дальнейшего использования: хорошая статья о перемещении образов докера
Mifeet,

Ответы:

243

Изображения Docker хранятся в виде слоев файловой системы. Каждая команда в Dockerfile создает слой. Вы также можете создавать слои с помощью docker commitкомандной строки после внесения некоторых изменений ( docker runвозможно, через ).

Эти слои хранятся по умолчанию в /var/lib/docker. Хотя вы можете (теоретически) выбрать файлы оттуда и установить их на другом сервере Docker, вероятно, плохая идея поиграть с внутренним представлением, используемым Docker.

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

Что касается параметров обмена изображениями без отправки в реестр концентратора докера, ваши лучшие варианты:

  • docker saveизображение или docker exportконтейнер. Это выведет файл tar на стандартный вывод, так что вы захотите сделать что-то вроде docker save 'dockerizeit/agent' > dk.agent.latest.tar. Тогда вы можете использовать docker loadили docker importв другом хосте.

  • Разместите свой личный реестр. - Устаревший, см. Комментарии. См. Изображение реестра Docker . Мы создали реестр с поддержкой s3, который вы можете запускать и останавливать по мере необходимости (все состояния сохраняются в корзине s3 по вашему выбору), что тривиально для установки. Это также интересный способ наблюдения за тем, что происходит при нажатии на реестр

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

Абель Муйно
источник
6
Для дальнейшего использования ссылка на образ реестра Docker устарела. Теперь вы должны использовать Docker Registry 2.0 и код в github / docker / distribution
RoelAdriaans
1
Я не уверен, что ясно, что Registry 2.0 - готовая замена для оригинальной. Кажется, что пропущены некоторые основные функции, такие как поиск stackoverflow.com/questions/30113726/docker-registry-2-0-api-v2
пропущены
1
Вопрос о том, что docker save: когда я помещаю изображение, полученное из другого изображения (скажем, python:2.7в реестр), родительское изображение не нужно загружать более одного раза, если оно не изменяется. Могу ли я сохранить частичные изображения, чтобы добиться оптимизации размера файла? Я прыгаю через эти обручи, потому что я хобби с несколькими изображениями, и я не хочу платить за частный реестр.
Питер
4
Не могли бы вы просто извлечь файлы src из репозитория git, включая Dockerfile, и docker buildна хосте?
Jshxe
1
@Jishaxe частью моей сборки является npm install... Я не могу собрать на своем хосте, потому что у него очень мало памяти, и этот шаг всегда терпит неудачу (см .: github.com/npm/npm/issues/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
+030
источник
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>
JSON C11
источник
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

MikeW
источник