1.Установка Docker
Установим пакеты необходимые для работы apt с https-методом и CA-сертификатами
1 |
# apt-get install apt-transport-https ca-certificates |
Импортирование GPG-ключа, которым подписаны пакеты
1 |
# apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D |
Добавление репозитария Docker
1 |
# echo "deb https://apt.dockerproject.org/repo debian-jessie main" | tee -a /etc/apt/sources.list.d/docker.list |
Обновление локального кеша пакетов
1 |
# apt-get update |
Проверка того, что установка Docker будет производиться с официального репозитария Docker, а не с Debian-репозитария
1 |
# apt-cache policy docker-engine | less |
1 2 3 4 5 |
Candidate: 1.12.1-0~jessie Version table: 1.12.1-0~jessie 0 500 https://apt.dockerproject.org/repo/ debian-jessie/main amd64 Packages …………………… |
Установка Docker
1 |
# apt-get install docker-engine |
Проверим,запустился ли докер после установки
1 |
# ps ax | grep docker |
Если нет,то запускаем вручную
1 |
# service docker start |
Просмотр Docker компонентов и их версий
1 |
# docker version |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Client: Version: 1.12.1 API version: 1.24 Go version: go1.6.3 Git commit: 23cf638 Built: Thu Aug 18 05:02:53 2016 OS/Arch: linux/amd64 Server: Version: 1.12.1 API version: 1.24 Go version: go1.6.3 Git commit: 23cf638 Built: Thu Aug 18 05:02:53 2016 OS/Arch: linux/amd64 |
Просмотр размещения различных компонентов, кол-ва контейнеров и образов, информации о операционноой системе, версии ядра, процессоре, памяти, имени хоста и т.д.
1 |
# docker info |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 1.12.1 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 0 Dirperm1 Supported: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: overlay null host bridge Swarm: inactive Runtimes: runc Default Runtime: runc Security Options: Kernel Version: 3.16.0-4-amd64 Operating System: Debian GNU/Linux 8 (jessie) OSType: linux Architecture: x86_64 CPUs: 4 Total Memory: 2.943 GiB Name: debian81 ID: K3YC:WJP4:IAC7:G43F:JM67:4BMH:GF7J:O4AV:FT52:6UPZ:NRYN:2SIC Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ WARNING: No memory limit support WARNING: No swap limit support WARNING: No kernel memory limit support WARNING: No oom kill disable support WARNING: No cpu cfs quota support WARNING: No cpu cfs period support Insecure Registries: 127.0.0.0/8 |
Присутствуют ряд предупреждений
1 2 3 4 5 6 |
WARNING: No memory limit support WARNING: No swap limit support WARNING: No kernel memory limit support WARNING: No oom kill disable support WARNING: No cpu cfs quota support WARNING: No cpu cfs period support |
Включим поддержку разделения виртуальной памяти
1 |
# nano /etc/default/grub |
1 |
GRUB_CMDLINE_LINUX_DEFAULT="quiet cgroup_enable=memory swapaccount=1" |
Обновим загрузчик
1 |
# update-grub |
Перезагрузим систему для применения изменений
1 |
# reboot |
Проверяем после пере загрузки
1 |
# docker info |
1 2 3 4 5 |
…… WARNING: No kernel memory limit support WARNING: No cpu cfs quota support WARNING: No cpu cfs period support …… |
1 |
# journalctl -u docker | grep warning |
1 2 3 |
Sep 22 00:03:55 debian81 dockerd[645]: time="2016-09-22T00:03:55.616597762+03:00" level=warning msg="Your kernel does not support kernel memory limit." Sep 22 00:03:55 debian81 dockerd[645]: time="2016-09-22T00:03:55.616627155+03:00" level=warning msg="Your kernel does not support cgroup cfs period" Sep 22 00:03:55 debian81 dockerd[645]: time="2016-09-22T00:03:55.616641697+03:00" level=warning msg="Your kernel does not support cgroup cfs quotas" |
Для включения поддержки вышеуказанных параметров обновим ядро с версии 3.X до версии 4.X
1 |
# uname -r |
1 |
3.16.0-4-amd64 |
1 |
# nano /etc/apt/sources.list |
1 |
deb http://httpredir.debian.org/debian jessie-backports main |
1 |
# apt-get update |
1 |
# apt-get install linux-base/jessie-backports |
1 |
# apt-get -t jessie-backports install linux-image-amd64 |
1 |
# reboot |
1 |
# uname -r |
1 |
4.6.0-0.bpo.1-amd64 |
1 |
# ps ax | grep [d]ocker |
Docker не запустился по причине
1 |
# journalctl -u docker |
1 2 3 4 |
Sep 22 00:25:31 debian81 dockerd[717]: time="2016-09-22T00:25:31.996595191+03:00" level=error msg="[graphdriver] prior storage driver \"aufs\" failed: driver not supported" Sep 22 00:25:31 debian81 dockerd[717]: time="2016-09-22T00:25:31.996698849+03:00" level=fatal msg="Error starting daemon: error initializing graphdriver: driver not support Sep 22 00:25:31 debian81 systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE Sep 22 00:25:32 debian81 systemd[1]: Failed to start Docker Application Container Engine. |
Решение
1 |
# rm -rf /var/lib/docker/aufs |
1 |
# service docker start |
1 |
# ps ax | grep [d]ocker |
1 2 |
918 ? Ssl 0:00 /usr/bin/dockerd -H fd:// 924 ? Ssl 0:00 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --shim docker-containerd-shim --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --runtime docker-runc |
Проверим статус докера и при необходимости добавим его в автозагрузку
1 |
# systemctl status docker |
1 |
# systemctl enable docker.service |
1 |
# docker info | grep -iE 'Storage Driver|warning' |
1 2 |
WARNING: Usage of loopback devices is strongly discouraged for production use. Use `--storage-opt dm.thinpooldev` to specify a custom block storage device. Storage Driver: devicemapper |
В качестве Storage Driver вместо aufs используется devicemapper
2.Запуск контейнера Docker
1 |
# docker run hello-world |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world c04b14da8d14: Pull complete Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker Hub account: https://hub.docker.com For more examples and ideas, visit: https://docs.docker.com/engine/userguide/ |
3.Работа с Docker/полезные команды Docker
Поиск доступных Docker -образов c операционной системой Ubuntu
1 |
# docker search ubuntu |
1 2 3 |
NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Ubuntu is a Debian-based Linux operating s... 4749 [OK] ………… |
Скачать образ, не создавая контейнер
Например, Ubuntu 14.04
1 |
# docker pull ubuntu:14.04 |
1 2 3 4 5 6 7 8 |
14.04: Pulling from library/ubuntu 71a21fdea81d: Pull complete cf68a3ea6e1d: Pull complete 31cb2a4d344a: Pull complete 0341b6fcb0fe: Pull complete c8777cc48364: Pull complete Digest: sha256:93a14ad7bd339597b91d945b097c5a7b249e33bd680159551ac5c96025da7520 Status: Downloaded newer image for ubuntu:14.04 |
Например, Ubuntu 16.04
1 |
# docker pull ubuntu:16.04 |
Если не указывать версию, то скачивается последняя стабильная версия ubuntu:latest
Просмотр списка доступных Docker-образов в системе
1 |
# docker images |
1 2 3 |
REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 14.04 b1719e1db756 3 days ago 187.9 MB hello-world latest c54a2cc56cbb 11 weeks ago 1.848 kB |
Удалить Docke-образ hello-world c системы
1 |
# docker rmi hello-world |
1 |
Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container d6ce873254c9 is using its referenced image c54a2cc56cbb |
Пока невозможно удалить этот образ т.к. он используется в контейнере
Просмотр существующих контейнеров(как запущенных, так и остановленных)
1 |
# docker ps -a |
1 2 |
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d6ce873254c9 hello-world "/hello" 15 minutes ago Exited (0) 15 minutes ago elated_easley |
Просмотр ТОЛЬКО запущенных контейнеров
1 |
# docker ps |
Удалить контейнер (имя контейнера или его ID можно определить с предыдущей команды)
1 |
# docker rm elated_easley |
Удалить все контейнеры
1 |
# docker rm $(docker ps -q) |
Удалить Docker-образ hello-world c системы
1 |
# docker rmi hello-world |
1 2 3 4 |
Untagged: hello-world:latest Untagged: hello-world@sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9 Deleted: sha256:c54a2cc56cbb2f04003c1cd4507e118af7c0d340fe7e2720f70976c4b75237dc Deleted: sha256:a02596fdd012f22b03af6ad7d11fa590c57507558357b079c3e8cebceb4262d7 |
Проверка существующих в системе образов
1 |
# docker images |
1 2 |
REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 14.04 b1719e1db756 3 days ago 187.9 MB |
Создание/запуск контейнера с Ubuntu14.04 (если образ предварительно не был скачан, то Docker сам автоматически его скачает с Docker public registry)
1 |
# docker run -dit --name docker-ubuntu14.04 --hostname="ubuntu14.04" ubuntu:14.04 /bin/bash |
1 |
0e6e195a47c8493165bfdfdf3e29ea3a4d978ba1e53ea4536fdf9dad4c549c3e |
1 2 3 4 5 |
-d – запускать контейнер в фоновом режиме -t-запускать контейнер в интерактивном режиме -i-выделить tty-терминал, который требуется для присоединения к контейнеру --name – имя Docker-контейнера --hostname – установить имя хоста внутри контейнера |
Проверка состояния нашего контейнера
1 |
# docker ps -a |
1 2 |
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0e6e195a47c8 ubuntu:14.04 "/bin/bash" 2 minutes ago Up 2 minutes docker-ubuntu14.04 |
Подключение к контейнеру
1 |
# docker attach docker-ubuntu14.04 |
Просмотр запущенных процессов внутри Docker-контейнера
1 |
# docker top docker-ubuntu14.04 |
1 2 |
UID PID PPID C STIME TTY TIME CMD root 1515 1500 1 22:36 pts/3 00:00:00 /bin/bash |
Просмотр использование ресурсов контейнером
(процессорного времени, памяти, дисковой подсистемы, сетевой подсистемы)
1 |
# docker stats docker-ubuntu14.04 |
1 2 |
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS docker-ubuntu14.04 0.00% 5.074 MiB / 2.934 GiB 0.17% 0 B / 648 B 5.038 MB / 0 B 1 |
Копирование файлов с Docker-контейнера на хостовую ноду
(например,каталога /etc контейнера в каталог /root хостовой ноды)
1 |
# docker cp docker-ubuntu14.04:/etc /root/ |
Остановка контейнера
1 |
# docker stop docker-ubuntu14.04 |
Остановка всех контейнеров
1 |
# docker stop $(docker ps -q) |
Запуск контейнера
1 |
# docker start docker-ubuntu14.04 |
Перезапуск контейнера
1 |
# docker restart docker-ubuntu14.04 |
Переименование контейнера
1 |
# docker rename docker-ubuntu14.04 docker-myubuntu14.04 |
Просмотр всех настроек контейнера
1 |
# docker inspect docker-myubuntu14.04 | less |
4. Построение Docker-образа
1.Запускаем/создаем контейнер из необходимого/первоначального образа операционной системы
2. Устанавливаем необходимые пакеты и делаем необходимые настройки конфигурационных файлов
3. Сохраняем состояние контейнера(commit) как новый Docker-образ локально на сервере
4.Загружаем новый образ на Docker Hub(push) (предварительно необходимо зарегистрироваться на нем)
https://hub.docker.com/
Итого схема имеет вид/последовательность
1 |
Build images->Commit Image->Push image to Docker Registry/Hub->Pull Image from Docker Registry/Hub |
1.В системе уже есть запущенный контейнер с Ubuntu 14.04.
Подключимся к нему
1 |
# docker attach docker-myubuntu14.04 |
2.Установим Apache внутри контейнера
1 |
# apt-get update && apt-get install apache2 |
1 |
# /etc/init.d/apache2 start |
Выходим с контейнера
1 |
root@ubuntu14:/# exit |
3.Сохраняем локально новое состояние контейнера, тем самым создавая новый Docker-образ
Сохраняем изменения делая commit, предварительно посмотрим ID-контейнера(0e6e195a47c8)
1 |
# docker ps -a |
1 2 |
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0e6e195a47c8 ubuntu:14.04 "/bin/bash" About an hour ago Exited (0) About a minute ago docker-myubuntu14.04 |
1 |
# docker commit -m "Installed Apache" -a "Eugene Kamenev" 0e6e195a47c8 kamaok/ubuntu_14.04_apache2 |
1 |
sha256:4928e3749143fe570fa8905f5009b5cfd3f866c97f39c919b20647b4f24bd927 |
1 2 3 4 5 |
-m – сообщение,которое будет информировать других пользователей о том, какие изменения были сделаны(аналогично опции -m при использовании систем управления версиями) -a - автор коммита 0e6e195a47c8 – ID-контейнера kamaok –имя пользователя, с которым была произведена регистрация на Docker Hub ubuntu_14.04_apache2 – имя нового Docker-образа |
Проверяем налииче нового Docker-образа
1 |
# docker images |
1 2 3 |
REPOSITORY TAG IMAGE ID CREATED SIZE kamaok/ubuntu_14.04_apache2 latest 4928e3749143 27 seconds ago 224.5 MB ubuntu 14.04 b1719e1db756 3 days ago 187.9 MB |
Теперь этот образ можно использовать при запуске/создании контейнера
1 |
# docker run -tid kamaok/ubuntu_14.04_apache2 /bin/bash |
4.Заливаем новый образ на Docker Hub
Предварительно залогинимся на Docker Hub с командной строки, используя имя пользователя и пароль,указанные при регистрации
1 |
# docker login -u kamaok |
1 2 3 |
Password: Login Succeeded root@debian81:~# |
Загружаем созданный образ на Docker Hub
1 |
# docker push kamaok/ubuntu_14.04_apache2 |
1 2 3 4 5 6 7 8 |
The push refers to a repository [docker.io/kamaok/ubuntu_14.04_apache2] 444681298efd: Pushed 79717468825f: Pushed 6d1cb131e81a: Pushed 374eda78f988: Pushed cf6d1cd028ea: Pushed 3d1126efbbe3: Pushed latest: digest: sha256:25d83320257d1866a07726521c3f95c816ca4d44017c0189f386be40e008a61c size: 1571 |
5.Для запуска нового контейнера с нового образа используем команды:
1 |
# docker pull kamaok/ubuntu_14.04_apache2 |
1 |
# docker images |
1 |
# docker run -dit --name docker-myubuntu14.04-v2 --hostname="ubuntu14.04v2" kamaok/ubuntu_14.04_apache2 |
1 |
# docker ps -a |
1 2 3 |
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1c4369bb39b4 kamaok/ubuntu_14.04_apache2 "/bin/bash" 51 seconds ago Up 42 seconds docker-myubuntu14.04-v2 0e6e195a47c8 ubuntu:14.04 "/bin/bash" 2 days ago Up 5 minutes docker-myubuntu14.04 |
По умолчанию Docker-команды может запускать только root-пользователь
Для того,чтобы дать возможность НЕ root-пользовтелю запускать команды Docker достаточно добавить пользователся в группу docker
1 |
# usermod -a -G docker myusername |
И перелогиниться в системе,чтобы изменения вступили в силы
5.Настройка сети в Docker
Docker использует Linux bridge для внутреннего межконтейнерного взаимодействия, а также для соединения контейнера с внешними сетями.
После установки Doсker автоматически создается bridge с именем docker0
Каждый контейнер будет соединяться с docker0 bridge-интерфейсом
Проверяем настройки сети контейнеров
Для первого контейнера docker-myubuntu14.04
1 |
# docker inspect docker-myubuntu14.04 |
1 2 3 4 5 6 7 8 9 10 |
……………………… "Networks": { "bridge": { ……………………………. "Gateway": "172.17.0.1", "IPAddress": "172.17.0.2", "IPPrefixLen": 16, …………………….. "MacAddress": "02:42:ac:11:00:02" } |
Для второго контейнера
1 |
# docker inspect docker-myubuntu14.04v2 |
1 2 3 4 5 6 7 8 9 10 |
…………… "Networks": { "bridge": { ……. "Gateway": "172.17.0.1", "IPAddress": "172.17.0.3", "IPPrefixLen": 16, ………. "MacAddress": "02:42:ac:11:00:03" } |
В самом контейнере,например, docker-myubuntu14.04, сетевые настройки имеют вид
1 |
# ifconfig |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:02 inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:648 (648.0 B) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) |
1 |
# ip route show |
1 2 |
default via 172.17.0.1 dev eth0 172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.2 |
На втором контейнере docker-myubuntu14.04-v2 настройки аналогичны за исключением IP-адреса и MAC-адреса сетевого интерфейса
При этом настройки сетевых интерфейсов на ноде имеют вид
1 |
# ifconfig |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
docker0 Link encap:Ethernet HWaddr 02:42:0a:a0:f7:8b inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2396 errors:0 dropped:0 overruns:0 frame:0 TX packets:2804 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:141668 (138.3 KiB) TX bytes:14316988 (13.6 MiB) eth0 Link encap:Ethernet HWaddr 00:0c:29:0d:01:00 inet addr:192.168.1.85 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:33393 errors:0 dropped:0 overruns:0 frame:0 TX packets:10569 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:43864458 (41.8 MiB) TX bytes:1320987 (1.2 MiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:3 errors:0 dropped:0 overruns:0 frame:0 TX packets:3 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:280 (280.0 B) TX bytes:280 (280.0 B) veth1e02a4c Link encap:Ethernet HWaddr 56:3b:04:a3:d9:41 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:566 errors:0 dropped:0 overruns:0 frame:0 TX packets:657 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:43701 (42.6 KiB) TX bytes:3555647 (3.3 MiB) veth31fa0e5 Link encap:Ethernet HWaddr 86:2e:7c:e3:12:53 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:10 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:788 (788.0 B) TX bytes:364 (364.0 B) |
6.Создание/построение Docker-образа из Docker-файла Dockerfile
Создадим образ с Ubuntu 16.04, который впоследствии может быть использован для создания контейнера
Для этого создадим Dockerfile, в котором пропишим необходимые инструкции
1 |
# mkdir -p /root/ubuntu16.04 && cd /root/ubuntu16.04 |
1 |
# nano Dockerfile |
1 2 3 4 |
# This is a comment FROM ubuntu:16.04 MAINTAINER Eugene Kamenev <admin@mydomain.com> RUN apt-get update && apt-get install -y apache2 |
Формат Dockerfile имеет вид
1 |
INSTRUCTION statement |
Комментириям предшествует символ #
Название инструкции пишутся с большой буквы
В Dockerfile были использованы следующие инструкции
1 2 3 |
FROM - определяет какой базовый образ будет использоваться для создания нашего образа – Ubuntu 16.04 MAINTAINER – имя и E-mail лица, обслуживающего этот образ RUN - команды, которые необходимо выполнить внутри образа – обновляемый локальный кеш пакетов и устанавливаем Apache |
Запустим сборку/создание образа
1 |
# docker build -t kamaok/ubuntu16.04 . |
1 2 3 |
kamaok - имя пользователя,которому принадлежит образ ubuntu16.04 – имя образа . (Точка) – размещение Dockerfile – в текущем каталоге. (также можно определять полный путь к Dockerfile) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Sending build context to Docker daemon 2.048 kB Step 1 : FROM ubuntu:16.04 16.04: Pulling from library/ubuntu ff1f1f1de862: Pull complete 0c7b035e2a1a: Pull complete ac8ee255ff41: Pull complete bf3d47be55f8: Pull complete 22a909724a97: Pull complete Digest: sha256:3235a49037919e99696d97df8d8a230717272d848ee4ddadbca8d54f97ee30cb Status: Downloaded newer image for ubuntu:16.04 ---> 45bc58500fa3 Step 2 : MAINTAINER Eugene Kamenev <admin@mydomain.com> ---> Running in ddc81100fac6 ---> dc62d30e5b40 Removing intermediate container ddc81100fac6 Step 3 : RUN apt-get update && apt-get install -y apache2 ---> Running in 09072c896541 Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB] …….. Removing intermediate container 09072c896541 Successfully built 897175b1e33a |
Проверяем наличие созданного образа с именем kamaok/ubuntu16.04
1 |
# docker images |
1 2 3 4 5 |
REPOSITORY TAG IMAGE ID CREATED SIZE kamaok/ubuntu16.04 latest 897175b1e33a About a minute ago 264.9 MB kamaok/ubuntu_14.04_apache2 latest 4928e3749143 2 days ago 224.5 MB ubuntu 16.04 45bc58500fa3 6 days ago 126.8 MB ubuntu 14.04 b1719e1db756 6 days ago 187.9 MB |
Теперь создаем контейнера из этого образа
1 |
# docker run -dit --name docker-ubuntu16.04 --hostname="ubuntu16.04" kamaok/ubuntu16.04 /bin/bash |
1 |
7c00884c7198ba5ce1e5d67f390b3721befae1bfdf3d5911f4e555eace655d0e |
Проверяем наличие контейнера запущенного из нового образа
1 |
# docker ps -a |
1 2 3 4 |
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7c00884c7198 kamaok/ubuntu16.04 "/bin/bash" 30 seconds ago Up 22 seconds docker-ubuntu16.04 1c4369bb39b4 kamaok/ubuntu_14.04_apache2 "/bin/bash" 5 hours ago Exited (0) 5 hours ago docker-myubuntu14.04-v2 0e6e195a47c8 ubuntu:14.04 "/bin/bash" 3 days ago Up 5 hours docker-myubuntu14.04 |
Подключаемся к контейнеру и проверяем версию операционной системы
1 |
# docker attach docker-ubuntu16.04 |
1 |
root@ubuntu16:/# cat /etc/issue |
1 |
Ubuntu 16.04.1 LTS \n \l |
Источник:
https://docs.docker.com/engine/tutorials/
http://www.itzgeek.com/how-tos/linux/centos-how-tos/working-with-docker-containers-command-line-interface.html#axzz3XxzPCNOT
http://www.itzgeek.com/how-tos/linux/working-with-docker-images-building-docker-images.html
http://xmodulo.com/manage-linux-containers-docker-ubuntu.html
https://www.linode.com/docs/applications/containers/docker-quick-reference-cheat-sheet