Использование Docker-контейнеров

Docker – это популярная платформа контейнеризации приложений. Контейнеры Docker обеспечивают стабильную рабочую среду приложения, благодаря чему такие приложения ведут себя одинаково вне зависимости от того, где они развёрнуты.

Данное руководство предлагает вам краткий обзор Docker-контейнеров (их взаимодействия с образами, управления контейнерами и т.п.).

Краткий обзор Docker-контейнеров

Образ Docker – это шаблон, используемый для создания контейнеров. Образы, как правило, вносят изменения в файловую систему и соответствующие параметры. В отличие от типичного дистрибутива Linux, образ Docker обычно содержит только то, что необходимо для запуска приложения. Образы не имеют состояния, и они не меняются. По сути, образ – это исходная точка контейнеров Docker, состоящая из упорядоченных read-only уровней.

Для создания контейнера используется команда docker run, которая добавляет новый уровень (для чтения и записи). Эта комбинация из нескольких уровней, предназначенных для чтения, и уровня для чтения и записи называется union file system. Когда в существующий файл запущенного контейнера вносятся изменения, этот файл копируется из уровня чтения в уровень записи. Затем эта копия временно заменяет оригинальный файл, но не удаляет его. Изменения, внесённые в файл, будут действительны только в пределах отдельного контейнера. Когда контейнер будет удален, все изменения будут потеряны (конечно, если они не буду сохранены).

Работа с контейнерами

Команда docker run создаёт контейнер из указанного образа. При этом могут возникнуть некоторые недоразумения. Рассмотрим работу команды на нескольких примерах.

1: Создание двух контейнеров

Следующая команда docker run создаст новый контейнер с помощью базового образа ubuntu. Флаг –t запускает терминал, -i включает интерактивный режим. Для запуска оболочки будет использована стандартная команда базового образа Ubuntu.

docker run -ti ubuntu

Командная строка изменится. Это значит, что вы открыли контейнер как пользователь root; 12 символов в строке – это ID контейнера.

root@11cc47339ee1:/#

Добавьте текст в каталог контейнера /tmp,  а затем используйте cat, чтобы убедиться, что текст добавлен:

echo "Example1" > /tmp/Example1.txt
cat /tmp/Example1.txt
Example1

Закройте контейнер:

exit

Docker-контейнеры останавливаются сразу после выполнения заданного процесса или команды. Потому после запуска команды exit контейнер остановился. Команда docker ps выводит список запущенных контейнеров. Теперь он будет пуст:

docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Добавьте в команду флаг –a, чтобы вывести список всех существующих контейнеров:

docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
11cc47339ee1        ubuntu              "/bin/bash"         6 minutes ago       Exited (127) 8 seconds ago                       small_sinoussi

Во время создания контейнера ему были присвоены ID и случайно выбранное имя. В данном случае 11cc47339ee1 – это ID, а small_sinoussi – имя контейнера. Команда ps –a показывает эти значения, а также образ, на основе которого создан контейнер (ubuntu), время его создания (six minutes ago) и команду, которая была запущена в контейнере (/bin/bash). Также вывод сообщает состояние контейнера (Exited) и как давно он перешёл в это состояние (6 seconds ago).

Если вы повторно введёте эту команду:

docker run -ti ubuntu

она создаст абсолютно новый контейнер с другим именем и ID. Попробуйте выполнить команду cat, чтобы запросить добавленный ранее текст:

cat /tmp/Example1
cat: /tmp/Example1: No such file or directory

Как видите, в этом контейнере такого текста нет. Кажется, что добавленные ранее данные исчезли, но это не так. Вы можете получить к ним доступ, поскольку первый контейнер всё ещё находится в системе.

Запросите список всех контейнеров:

docker ps -a
CONTAINER ID        IMAGE          COMMAND            CREATED              STATUS                     PORTS           NAMES
6e4341887b69        ubuntu         "/bin/bash"        About a minute ago   Exited (1) 6 seconds ago                   kickass_borg
11cc47339ee1        ubuntu         "/bin/bash"        13 minutes ago       Exited (127) 6 minutes ago                 small_sinoussi

Закройте второй контейнер:

exit

А теперь попробуйте перезапустить первый контейнер.

2: Перезапуск контейнера

Чтобы перезапустить существующий контейнер, используйте команду start с флагами –a и –i, после которых нужно указать имя или ID контейнера.

docker start -ai 11cc47339ee1

Примечание: Не забудьте указать ID своего контейнера.

Теперь вы снова в командной строке bash первого контейнера. С помощью команды cat запросите данные, добавленные в первом разделе:

cat /tmp/Example1.txt
Example1

Теперь можно закрыть контейнер:

exit

Как видите, внесённые изменения сохранились внутри контейнера. Данные будут утрачены только в случае удаления контейнера из системы.

3: Удаление контейнера

Итак, в системе существует два контейнера на основе одного образа. Удалите их. Для этого используется команда docker rm. Укажите имя или ID контейнера (или контейнеров), который нужно удалить.

docker rm 11cc47339ee1 kickass_borg
11cc47339ee1
kickass_borg

Теперь контейнеры удалены из системы. Данные, добавленные в первый контейнер, теперь утеряны.

Заключение

Теперь вы знаете, как работает команда docker run, и можете использовать её для создания нового контейнера. Кроме того, вы сможете найти остановленный контейнер и перезапустить его.

Читайте также: Как выбрать имя для контейнера Docker

Tags: ,

Добавить комментарий