О том, как коммитить изменения в Docker образ
Джек Уаллен, 27 апреля 2017
Если вам нравится использовать докер образы в качестве шаблонов для эффективного деплоя контейнеров, Джек Уоллен покажет вам, как коммитить изменения в запущенный контейнер для создания нового докер образа.
Один способ, которым ваша компания может обращаться с докер контейнерами — создание шаблонных образов для использования в ваших контейнерах. Скажем, для примера, вы используете контейнеры в целях разработки и хотите быть уверены, что все задеплоенные контейнеры стартуют с тем же самым базовым набором инструментов. Вы можете сделать pull образа, запустить контейнер, модифицировать его для того, чтобы он удовлетворял вашим потребностям, а затем начать разработку с этим контейнером, но вы должны будете повторять тот же самый процесс каждый раз, когда вам нужно будет деплоить этот контейнер.
Или же, вы можете сделать pull образа, запустить контейнер, модифицировать его, чтобы он удовлетворял основным потребностям ваших разработчиков, и закоммитить эти изменения в новый образ. Теперь, все, что нужно вашим разработчикам — запустить новый контейнер, базирующийся на модифицированном образе, и они могут это сделать. Им нет нужны модифицировать для этого исходный образ.
Если все это выглядит как процесс, который вы хотите внедрить, удача на вашей стороне — это действительно довольно просто. Скажем, вам нужен образ, базирующийся на последней версии nginx, с установленными PHP, build-essential и nano. Я проведу вас через процесс pull'а образа, запуска контейнера, подключения к нему, добавления программного обеспечения и коммита изменений в новый образ, который может быть запросто использован как базовый для ваших контейнеров.
Pull образа и запуск контейнера
Первый шаг — pull последнего образа nginx. Это выполнено командой:
sudo docker pull nginx
Как только образ загружен, мы можем запустить его, так что мы можем использовать окно терминала таким образом:
sudo docker run --name nginx-template-base -p 8080:80 -e TERM=xterm -d nginx
Я назвал его nginx-template-base, так как это будет то, на чем наш шаблон будет основан.
Подключение и модификация контейнера
Дальше нам нужно получить доступ к контейнеру. Когда вы запустите команду docker run, она покажет вам длинный идентификатор. Запустите команду:
sudo docker exec -it CONTAINER_ID bash
Где CONTAINER_ID — это ID, показынный на экране, когда вы запустили команду run.
После запуска этой команды вы окажетесь с терминале запущенного контейнера. Теперь давайте добавим необходимое программное обеспечение в шаблон. Для этого запустите следующие команды.
apt-get install nano
apt-get install build-essential
apt-get install php5
Заметка: для официального образа nginx PHP 7 недоступен для установки без добавления репозитория.
Выйдите из контейнера и закоммитьте изменения
Теперь, так как мы модифицировали контейнер, нам нужно закоммитить изменения. Во-первых, выйдите из контейнера командой exit. Для коммита изменений и создания нового образа, базирующегося на изменениях выше, выполните команду:
sudo docker commit CONTAINER_ID nginx-template
Где CONTAINER_ID — ID, данный вам, когда вы первоначально запустили контейнер.
Если вы запустите команду docker images, вы увидите новый контейнер (Иллюстрация B):
Иллюстрация В. Свежесозданный шаблон образа готов к использованию.
В этом пункте, вы можете подготовить к запуску новый контейнер, используя новый образ, имея все модификации на месте. Запомните. когда вы запускаете новый контейнер, команда будет выглядать примерно так:
sudo docker run --name nginx-dev -p 8080:80 -e TERM=xterm -d nginx-template
Если вы войдете в этот новый контейнер (используя команду sudo docker exec), вы увидите, что все установленное на месте и готово к использованию.
Легкий путь к шаблонам контейнеров
Если вы ищете способ сделать работу с Docker контейнерами немного более эффективной, этого вам хватит надолго. Как только вы станете создавать шаблоны образов, разработка с Docker контейнерами станет значительно проще.
Руководство по перемещению Docker контейнеров
Рик Донато, 28 октября 2016.
Docker предоставляет различные команды/методы для перемещения контейнеров. В этой статье вы увидите все эти команды, необходимые для перемещения ваших Docker контейнеров между вашими хостами и репозиториями, в примерах.
Из репозитория в репозиторий
Давайте взглянем на то, как мы получаем образ из репозитория, и как мы доставляем наш локальный образ в удаленный репозиторий.
PULL
Команда docker pull используется для того, чтобы получить образ из репозитория.
$ docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
Digest: sha256:29f5d56d12684887bdfa50dcd29fc31eea4aaf4ad3bec43daf19026a7ce69912
Status: Image is up to date for busybox:latest
Совет: по умолчанию, Docker будеть пуллить из docker.io. Для пулла из другого репозитория добавьте имя хоста вашего реестра к команде docker pull, т.е. docker pull registry.fir3net.com/busybox ([1]).
PUSH
Для перемещения образов из репозитория в репозиторий используется docker push. Ниже показаны шаги, затрагивающие push образа в репозиторий.
- Аутентификация — если она требуется репозиторием, то выполняется командой docker login
- Пометка тегом — обеспечивается командой docker tag
- Push — для этого используется команда docker push
Вот пример:
// LOGIN
$ docker login registry.fir3net.com
Username: felix001
Password:
Login Succeeded
// TAG
$ docker tag busybox registry.fir3net.com/busybox-v0.0.1
// PUSH
$ docker push registry.fir3net.com/busybox-v0.0.1
The push refers to a repository [registry.fir3net.com/busybox-v0.0.1] (len: 1)
Sending image list
Pushing repository registry.fir3net.com/busybox-v0.0.1 (1 tags)
d3a1f33e8a5a: Image successfully pushed
c22013c84729: Image successfully pushed
d74508fb6632: Image successfully pushed
91e54dfb1179: Image successfully pushed
Pushing tag for rev [91e54dfb1179] on {https://registry.fir3net.com/v1/repositories/busybox-v0.0.1/tags/latest}
С хоста на хост
Мы можем взять локальный образ или контейнер и затем сделать его загрузку или импорт в другую Docker среду.
EXPORT или SAVE
Хорошо, давайте взглянем на команды docker export и docker save. docker export сохраняет запущенный или поставленный на паузу экземпляр ([2]) контейнера в tar файл. docker save сохраняет образ в tar файл.
Ниже примеры этих двух команд:
Export
$ docker ps
CONTAINER ID IMAGE COMMAND
5e8f397be6fa busybox «sh»
$ docker export 5e8f397be6fa -o busybox-container.tar
Save
$ docker images
REPOSITORY TAG IMAGE ID
busybox latest e02e811dd08f
$ docker save -o busybox-image.tar busybox
IMPORT или LOAD
Наконец, к с первоначально созданном tar файлам применяются команды docker import и docker load.
docker import используется для импортирования tar файла (т.е. контейнера), созданного через docker export. docker load для загрузки tar файла (т.е. образа), созданного через docker save.
// SAVE
$ docker import busybox-container.tar
sha256:94f13e1b4a26cd15a6c6d33da835e7319491a9c1dbeca16583750f7b96235403
// LOAD
$ docker load --input busybox-image.tar
Loaded image: busybox:latest
Ссылки:
[1] stackoverflow.com/questions/33054369/how-to-change-the-default-docker-registry-from-docker-io-to-my-private-registry
[2] blog.giantswarm.io/moving-docker-container-images-around
Автор: Александр