Курс: Продающий лендинг для вашего бизнеса Бесплатно
Создайте сайт с нуля за 40 минут и запустите продажи

Как работать с контейнерами Docker

1 комментарий

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

Из этого руководства вы узнаете о связи контейнеров и образов Docker, а также о том, как устанавливать, запускать, останавливать и удалять контейнеры.

Что такое образ Docker

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

Образы «оживают» в тот момент, когда вы вводите команду docker run – она сразу же создает контейнер в результате добавления поверх образа новый уровень для чтения и записи. Эта комбинация уровней только для чтения (поверх которых добавляется уровень для чтения и записи) также известна как UnionFS – файловая система, производящая каскадно-объединенное монтирование файловых систем. Когда в существующий файл запущенного контейнера вносится какое-либо изменение, файл копируется из области только для чтения на уровень для записи и чтения, где и применяются эти изменения. И теперь изначальный файл скрыт версией с уровнем для записи и чтения, но он не удален. Подобные изменения в уровне для записи и чтения существуют только внутри данного контейнера. Когда контейнер удаляется, все изменения также теряются (если они не были сохранены).

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

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

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

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

$ docker run -ti ubuntu

либо

$ docker run -i -t ubuntu:14.04 /bin/bash

(во втором случае вы запустите команду /bin/bash внутри контейнера и автоматически окажетесь внутри контейнера)

В командной строке появится подтверждение того, что вы находитесь внутри контейнера в качестве суперпользователя. После знака @ вы увидите ID контейнера, в котором находитесь:

root@11cc47339ee1:/#

Теперь, используя команду echo, внесите изменения в директорию /tmp, а затем проверьте, что изменения были записаны при помощи команды cat:

echo "Example1" > /tmp/Example1.txt

cat /tmp/Example1.txt

На экране вы должны увидеть:

Example1

Теперь выйдите из контейнера:

exit

Как только данная команда будет выполнена, а вы выйдете из командной строки, контейнер Docker перестанет работать. Проверить это можно командой 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" 9 minutes ago Exited (127) 10 seconds ago small_sinoussi

Когда создается контейнер, у него появляется ID и автоматически сгенерированное название. В данном случае 11cc47339ee1 – это идентификационный номер (ID) контейнера, а small_sinoussi – сгенерированное имя. Команда ps -a показывает эти данные, а также образ, из которого контейнер был создан (в данном случае ubuntu), когда контейнер был создан (9 минут назад) и какая команда была в нем запущена (/bin/bash). Также вы можете посмотреть статус контейнера (из него вышли 10 секунд назад). Если бы контейнер до сих пор работал, вы бы увидели статус Up и время, в течение которого он работает.

Теперь вы можете еще раз ввести команду для создания контейнера:

$ docker run -ti ubuntu

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

root@6e4341887b69:/# cat /tmp/Example1

Вывод будет:

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

Вам может показаться, что данные исчезли, но дело, конечно же, не в этом. Выйдите из второго контейнера, чтобы убедиться, что оба контейнера (в том числе и первый с нужным файлом) существуют в системе:

root@6e4341887b69:/# exit
$ 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" 15 minutes ago Exited (127) 6 minutes ago small_sinoussi

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

Для того чтобы заново запустить уже созданный контейнер, необходимо команду start использовать с ключом –ai. В конце вам необходимо написать идентификационный номер контейнера, с которым вы хотите работать, либо его название. В итоге ваша команда будет выглядеть следующим образом:

docker start -ai 11cc47339ee1

Теперь вы снова находитесь в оболочке bash внутри контейнера. Убедитесь в том, что файл, который вы создавали ранее, все еще находится здесь:

cat /tmp/Example1.txt

Вы увидите на экране:

Example1

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

exit

Все изменения внутри контейнера сохраняются, даже если вы останавливаете и потом заново запускаете контейнер. Данные удаляются лишь в том случае, если удаляется сам контейнер. Также пример выше показывает, что изменения касаются одного отдельного контейнера (а не всех контейнеров сразу).

Шаг 3: Удаление обоих контейнеров

Завершающим шагом будет удаление двух контейнеров, которые вы создали, следуя данному руководству. Для этого необходимо использовать команду docker rm. Однако она действует только на остановленные контейнеры. После команды необходимо указать идентификационный номер либо название одного или нескольких контейнеров. К примеру, чтобы удалить контейнеры, созданные ранее, необходимо ввести команду:

docker rm 6e4341887b69 small_sinoussi

На экране высветится:

6e4341887b69 
small_sinoussi

Оба контейнера будут удалены.

Заключение

Из данного руководства вы узнали об основных командах для работы в Docker и научились создавать, останавливать, вновь запускать и удалять контейнеры.

VPS сервер в аренду

Комментарии

Artem 0
15 окт в 2018
Спасибо!
А как выйти из bash не выключая контейнер?
С помощью соцсетей
У меня нет аккаунта Зарегистрироваться
Нажимая кнопку «Зарегистрироваться», я даю согласие на обработку своих персональных данных, указанных в форме регистрации.
С помощью соцсетей
У меня уже есть аккаунт Войти
Нажимая кнопку «Зарегистрироваться», я даю согласие на обработку своих персональных данных, указанных в форме регистрации.
Инструкции по восстановлению пароля высланы на Ваш адрес электронной почты.
Пожалуйста, укажите email вашего аккаунта
Ваш баланс 10 ТК
1 ТК = 1 ₽
О том, как заработать и потратить Таймкарму, читайте в этой статье
Чтобы потратить Таймкарму, зарегистрируйтесь на нашем сайте