Первая часть – тут>>>.
Содержание
Запуск контейнеров
Как говорилось в первой части – Docker использует LXC для запуска и управления контейнерами.
Это значит, что в рамках одной хост-системы вы можете запустить любую ОС, которая будет совместима с ядром хоста.
Например, имеется Docker, работающий на Debian 7:
# lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 7.9 (wheezy) Release: 7.9 Codename: wheezy
С ядром:
# uname -r 3.16.0-0.bpo.4-amd64
Попробуем запустить CentOS 7.
Находим образ:
# docker search centos NAME DESCRIPTION STARS OFFICIAL AUTOMATED centos The official build of CentOS. 1399 [OK] ...
Вместо того, что бы сразу запустить контейнер с новым образом, как было показано в первой части – образ сначала можно загрузить в локальное хранилище с помощью опции pull
:
# docker pull centos Using default tag: latest latest: Pulling from library/centos 47d44cb6f252: Pull complete f6f39725d938: Pull complete f9a8cbc8dd13: Pull complete f37e6a610a37: Pull complete 0f73ae75014f: Pull complete Digest: sha256:2d9573acf37315cb8fe2a1420769c3b83f59d8f286fd8898a580578c0d5e66c6 Status: Downloaded newer image for centos:latest
Теперь – его можно запускать локально:
# docker run -ti --rm centos [root@cd8cc357e1c3 /]# cat /etc/redhat-release CentOS Linux release 7.1.1503 (Core)
Обратите внимание на ID в строке приглашения комндой строки контейнера: root@cd8cc357e1c3.
Если на хост-машине выполнить:
# docker ps | grep centos cd8cc357e1c3 centos "/bin/bash" 4 minutes ago Up 4 minutes ecstatic_jones
То вы увидите, что ID контейнера == ID в консоли.
Сохранение изменений в контейнерах
Установим в этом CentOS-контейнере vim
:
# yum install vim
# vim --version VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jun 10 2014 06:55:55)
Если мы выйдем и выключим контейнер – то при следующем запуске из этого образа VIM в нём уже не будет.
Что бы сохранить состояние контейнера – выполняем:
# docker commit cd8cc357e1c3 centos_with_vim 656188e54ccedc2fa26e353ced56a8ccb5be41fbc59e7f959c1407f99458023f
Где cd8cc357e1c3 – ID контейнера, а centos_with_vim – имя, под которым мы хотим его потом использовать:
# docker images | grep centos centos_with_vim latest 656188e54cce 52 seconds ago 298.2 MB centos latest 0f73ae75014f 3 weeks ago 172.3 MB
Запускаем его:
# docker run -ti --rm centos_with_vim ... [root@cbe40ad5ccdd /]# vim --version VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jun 10 2014 06:55:55)
Другой вариант запустить контейнер и выполнить в нём команду – указать её после имени образа, который будет запущен:
# docker run -ti --rm centos_with_vim vim --version VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jun 10 2014 06:55:55)
Docker save и export – сохранение контейнера или образа
Кратко о разнице между save
и export
:
save
– создаёт копию гостевой операционной системы, аналог ISO-образа;export
– создаёт копию контейнера.
Пример Docker save
Находим необходимый нам образ:
# docker images | grep vim centos_with_vim latest 656188e54cce 37 minutes ago 298.2 MB
Создаём его копию:
# docker save centos_with_vim > /home/setevoy/centos_with_vim.tar
Копируем архив на другой хост с Docker:
# scp /home/setevoy/centos_with_vim.tar [email protected]:/home/setevoy
Проверяем имеющиеся образы:
# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
А теперь добавляем образ из созданной копии с помощью load
:
# docker load < /home/setevoy/centos_with_vim.tar
Проверяем:
# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos_with_vim latest 656188e54cce 57 minutes ago 298.2 MB
Запускаем:
# docker run -ti --rm centos_with_vim vim --version VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jun 10 2014 06:55:55) ...
Пример Docker export
На первом Docker-хосте находим ID нужного контейнера:
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cd8cc357e1c3 centos "/bin/bash" About an hour ago Up About an hour ecstatic_jones
Експортируем его:
# docker export cd8cc357e1c3 > /home/setevoy/centos_with_vim_export.tar
Проверяем:
# tar tf /home/setevoy/centos_with_vim_export.tar | head .dockerenv .dockerinit bin dev/ dev/console dev/pts/ dev/shm/ etc/ etc/.pwd.lock etc/BUILDTIME ...
# ls -lh /home/setevoy/ | grep cent -rw-r--r-- 1 root root 280M Sep 29 05:14 centos_with_vim_export.tar -rw-r--r-- 1 root root 295M Sep 29 04:52 centos_with_vim.tar
Копируем его на тот же удалённый хост со вторым Docker, и пробуем там запустить:
# cat /home/setevoy/centos_with_vim_export.tar | docker import - centos_with_vim_export:exported 12b806f347a44cdf864f2518010ca5b1ef05a2894f04a5ddfe1545949c4df7d0
# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos_with_vim_export exported 12b806f347a4 8 seconds ago 282 MB centos_with_vim latest 656188e54cce About an hour ago 298.2 MB
Пробуем его запустить:
# docker run --rm centos_with_vim_export:exported vim --version VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jun 10 2014 06:55:55) ...
Больше информации – тут>>> и тут>>>.