При запуске контейнера, если образа нет, он скачивается:
docker run -it ubuntu /bin/bash Unable to find image 'ubuntu:latest' locally latest: Pulling from library/ubuntu 84ed7d2f608f: Pull complete be2bf1c4a48d: Pull complete a5bdc6303093: Pull complete e9055237d68d: Pull complete Digest: sha256:868fd30a0e47b8d8ac485df174795b5e2fe8a6c8f056cc707b232d65b8a1ab68 Status: Downloaded newer image for ubuntu:latest
Тут мы видим: 84ed7d2f608f, be2bf1c4a48d, a5bdc6303093, e9055237d68d
Это - слои, образ в докере состоит из слоев
Слои в терминологии докера называются "образами", что может вводить в заблуждение
Т.е. образ может содержать внутри себя слои "образы"
Т.е. к примеру образ Centos имеет: Базовый образ 0 (файловая система и директории минимально нужные для запуска) Образ 1 (на пример какое-то установленное ПО, веб-сервер, базы данных и т.п.) Образ 2 (на пример еще какое-то установленное ПО или обновления) и т.д.
Т.е. мы будем иметь в нашем случае три разных образа одного образа...
Все слои монтируются в режиме для чтения, поверх монтируется слой с возможностью перезаписи
При запуске контейнера еще монтируется слой bootfs перед базовым, после запуска контейнера он исчезает
Unable to find image 'ubuntu:latest' locally
Где 'ubuntu:latest':
Означает версию, если явно не указывать, то будет скачана последняя версия - latest
docker pull ubuntu - скачает последнюю версию образа ubuntu
docker pull -a ubuntu - скачает все версии образов ubuntu
Список скачанных образов:
docker images ubuntu REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 14.04 7e4b16ae8b23 3 weeks ago 188MB ubuntu latest 1d9c17228a9e 3 weeks ago 86.7MB ubuntu 14.04.5 132b7427a3b4 19 months ago 188MB ubuntu 12.04 5b117edd0b76 21 months ago 104MB ubuntu 12.04.5 5b117edd0b76 21 months ago 104MB ubuntu 14.04.4 0ccb13bf1954 2 years ago 188MB ubuntu 14.04.3 3876b81b5a81 3 years ago 188MB ubuntu 14.04.2 44ae5d2a191e 3 years ago 188MB ubuntu 14.10 a8a2ba3ce1a3 3 years ago 194MB ubuntu 14.04.1 ab1bd63e0321 3 years ago 188MB ubuntu 12.10 3e314f95dcac 4 years ago 172MB
Тэги говорят нам о версии образа
ID образа, например 5b117edd0b76 повторяется дважды, указывает на один и тот-же образ
На диске образы будут храниться в /var/lib/docker/{driver-name}
По умолчанию это будет aufs, но может быть и overlay, overlay2, btrfs, devicemapper или zfs
Смена директории Docker
Делайте бэкапы перед сменой директории!!!
Расположение Docker по умолчанию - /var/lib/docker
Все существующие образы и контейнеры хранятся здесь
Если запущены какие-либо контейнеры, остановите, затем определите драйвер хранилища, используемый Docker docker info Docker Root Dir: /var/lib/docker
Создание файла Drop-In
Следующим шагом является создание файла вставки "docker.conf" в /etc/systemd/system/docker.service.d
По умолчанию, каталог docker.service.d не будет присутствовать, вам придется его создать
Определить новое место хранения (на моей машине драйвер изначально при дефолтной установке определился как overlay2):
vi /etc/systemd/system/docker.service.d/docker.conf [Service] ExecStart= ExecStart=/usr/bin/dockerd --graph=/data/docker --storage-driver=overlay2
docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 14.04 7e4b16ae8b23 3 weeks ago 188MB ubuntu latest 1d9c17228a9e 3 weeks ago 86.7MB centos latest 1e1148e4cc2c 6 weeks ago 202MB ubuntu 14.04.5 132b7427a3b4 19 months ago 188MB ubuntu 12.04 5b117edd0b76 21 months ago 104MB ubuntu 12.04.5 5b117edd0b76 21 months ago 104MB ubuntu 14.04.4 0ccb13bf1954 2 years ago 188MB ubuntu 14.04.3 3876b81b5a81 3 years ago 188MB ubuntu 14.04.2 44ae5d2a191e 3 years ago 188MB ubuntu 14.10 a8a2ba3ce1a3 3 years ago 194MB ubuntu 14.04.1 ab1bd63e0321 3 years ago 188MB ubuntu 12.10 3e314f95dcac 4 years ago 172MB
Вариант без копирования\переноса директории сделать символическую ссылку и не создавть конфигурационный файл:
ln -s /data/docker /var/lib/docker
Подключиться к ранее запущенному контейнеру можно например по CONTAINER ID или NAMES:
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3eedb76b59d1 ubuntu "/bin/bash" 17 seconds ago Exited (0) 10 seconds ago modest_fermat
docker attach 3eedb76b59d1 You cannot attach to a stopped container, start it first
Необходимо стартануть конетейнер прежде:
docker start 3eedb76b59d1
По выходу с помощью "Exit" контейнер снова остановится
Для выхода без остановки используйте сочетание клавиш Right Ctrl + P + Q
Выполнить команду не заходя в контейнер:
docker run centos /bin/bash -c "echo 'testfile' > /tmp/testfile"
Видим наш контейнер:
docker ps -a CONTAINER ID IMAGE COMMAND ... 34042afce686 centos "/bin/bash -c 'echo …" ...
Создадим новый образ с именем "NewImageName", который будет иметь все изменения:
docker commit 34042afce686 newimagename sha256:9af4feb50b2c1b896bc93974efc9a5bc15d049f95fbfcb4bd3197a2eca737bb2
docker images REPOSITORY TAG IMAGE ID CREATED SIZE newimagename latest 9af4feb50b2c 16 seconds ago 202MB
Посмотрим историю изменений образа:
docker history newimagename IMAGE CREATED CREATED BY ... 9af4feb50b2c About a minute ago /bin/bash -c echo 'testfile' > /tmp/testfile ...
Сохранить образ в файл:
docker save -o /tmp/newimagename.tar newimagename
Развернуть этот файл на любом другом сервере docker, сначала посмотрим содержимое архива:
tar -tf /tmp/newimagename.tar
9af4feb50b2c1b896bc93974efc9a5bc15d049f95fbfcb4bd3197a2eca737bb2.json
a95c45423f187795e35dab840f24cbf66549bec52fdc419f7c96296f375f5530/
a95c45423f187795e35dab840f24cbf66549bec52fdc419f7c96296f375f5530/VERSION
a95c45423f187795e35dab840f24cbf66549bec52fdc419f7c96296f375f5530/json
a95c45423f187795e35dab840f24cbf66549bec52fdc419f7c96296f375f5530/layer.tar
f6afe6d9be35217c08579ac3d29894892d4871dccc98916b285f5e13c942a8a6/
f6afe6d9be35217c08579ac3d29894892d4871dccc98916b285f5e13c942a8a6/VERSION
f6afe6d9be35217c08579ac3d29894892d4871dccc98916b285f5e13c942a8a6/json
f6afe6d9be35217c08579ac3d29894892d4871dccc98916b285f5e13c942a8a6/layer.tar
manifest.json
repositories
Запустить контейнер:
docker run -it newimagename /bin/bash
Проверяем:
cat /tmp/testfile
testfile
Запустим долгоиграющую команду и выйдем Right Ctrl + P + Q:
ping 8.8.8.8 -c 50
Узнаем id нашего контейнера:
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 93ad8ebb3170 newimagename "/bin/bash" About an hour ago Up About an hour frosty_hodgkin
Посмотрим процессы, запущенные внутри контейнера:
docker top 93ad8ebb3170 UID PID PPID C STIME TTY TIME CMD root 11027 11010 0 14:48 ? 00:00:00 /bin/bash root 11226 11027 0 15:34 ? 00:00:00 ping 8.8.8.8
Дать команду существующему контейнеру в интерактивном или фоновом режиме:
Физически конетейнеры хранятся по умолчанию в папке:
/var/lib/docker/containers/
Информацию по контейнеру можно вывести так:
docker inspect 93ad8ebb3170
По сути это 2 файла json, физически находящихся внутри папки контейнера:
ls -l /data/docker/containers/...81dfa82bdf6c97849358.../ | grep "\.json" -rw------- 1 root root 2787 Jan 21 14:35 config.v2.json -rw-r--r-- 1 root root 1421 Jan 21 14:35 hostconfig.json
docker attach подключает нас к процессу с pid 1
Если мы пробовали на конетейнерах с оболочкой, запущенной с pid 1
Машина например с веб-сервером нам не ответит взаимностью
Посему можно использовать ssh или nsenter
ns - сокращение от namespace
nsenter получает pid контейнера, который мы можем узнать с помощью docker inspect
При выходе из контейнера - exit, контейнер не остановится т.к. не будет закончен процесс с pid 1
Более простой вариант подключения (принимает CONTAINER ID или NAMES):
docker exec -it 67d66a2aac63 /bin/bash
/usr/sbin/nginx -v
nginx version: nginx/1.15.8
exit
При выходе из контейнера - exit, контейнер не остановится т.к. не будет закончен процесс с pid 1
Комментарии пользователей
Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!