Мне интересно, где изображения Docker точно хранятся на моей локальной машине.
Могу ли я поделиться своим Docker-Image без использования Docker-Hub
или Dockerfile
, но "реального" Docker-Image? И что именно происходит, когда я "подталкиваю" свой Docker-Image к Docker-Hub?
Как поделиться своим Docker-Image без использования Docker-Hub?
Ответ 1
Изображения 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
на другом хосте.Разместите свой личный реестр. - Устаревший, см. комментарии
См. изображение реестра докера. Мы создали поддерживаемый s3 реестр, который вы можете запускать и останавливать по мере необходимости (все состояния сохраняются в корзине s3 по вашему выбору), что тривиально для установки. Это также интересный способ наблюдения за тем, что происходит при нажатии на реестр.Используйте другой реестр, например quay.io (я лично не пробовал), хотя любые проблемы, которые у вас есть с док-концентратором, вероятно, применимы и здесь.
Ответ 2
На основе этого блога можно опубликовать образ докера без реестра докеров, выполнив:
docker save --output latestversion-1.0.0.tar dockerregistry/latestversion:1.0.0
После выполнения этой команды можно скопировать изображение на сервер и импортировать его следующим образом:
docker load --input latestversion-1.0.0.tar
Ответ 3
Отправка образа докера на удаленный сервер может быть выполнена в 3 простых шага:
- Локально сохраните изображение докера как .tar:
docker save -o <path for created tar file> <image name>
Локально, используйте scp для передачи .tar на удаленный
На удаленном сервере загрузите изображение в докер:
docker load -i <path to docker image tar file>
Ответ 4
Если вы не хотите использовать сам Docker Hub, вы можете разместить свой собственный репозиторий Docker под Artifactory by JFrog:
https://www.jfrog.com/confluence/display/RTF/Docker+Repositories
который затем будет запускаться на вашем собственном сервере.
Другие поставщики хостинга доступны, например, CoreOS:
http://www.theregister.co.uk/2014/10/30/coreos_enterprise_registry/
который купил quay.io