2014-06-30 2 views
172

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

+1

На будущее: хорошая статья на [ перемещение изображений докеров] (https://blog.giantswarm.io/moving-docker-container-images-around/) – Mifeet

ответ

186

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

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

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

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

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

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

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

+6

Для дальнейшего использования ссылка на образ реестра докеров устарела. Теперь вы должны использовать [Docker Registry 2.0] (https://docs.docker.com/registry/) и код в [github/docker/distribution] (https://github.com/docker/distribution) – RoelAdriaans

+1

I ' m не уверен, что ясно, что Registry 2.0 готов к использованию для замены оригинального. Кажется, упускают некоторые базовые функции, такие как поиск http://stackoverflow.com/questions/30113726/docker-registry-2-0-api-v2 – JoshRivers

+1

Вопрос о 'docker save': когда я нажимаю изображение, которое происходит от другого image (скажем, 'python: 2.7') в реестр, родительское изображение не нужно загружать более одного раза, если оно не изменяется. Могу ли я сохранить частичные изображения для достижения подобной оптимизации размера файла? Я прыгаю через эти обручи, потому что я любитель с несколькими изображениями, и я не хочу платить за частный реестр. – Pieter

6

Если вы не хотите использовать сам Docker Hub, вы можете разместить свой собственный репозиторий Docker под Artifactory по JFrog:

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

, который будет работать на вашем собственном сервере (s).

Другие поставщики хостинга доступны, например CoreOS:

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

, который купил набережную.И.О.

1

на основе this blog, были выполнены следующие команды:

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

скопировать изображение на сервер, а импорт выглядит следующим образом:

docker load --input latestversion-1.0.0.tar 
Смежные вопросы