Однако по умолчанию Docker также разрешает исходящие запросы. Интересно, как это сделать? Проверьте зависимость DockerFile, которая имеет прямой доступ к NPMs из контейнеров.
Docker, часть 2 – работа с контейнерами
В предыдущей части этого руководства вы узнали, что такое Docker, создали введение в контейнеры и кратко рассмотрели команды, необходимые для начала работы с Docker на простом примере. Далее мы сосредоточимся на работе с контейнерами и рассмотрим соответствующие команды.
Контейнерные команды включают следующие аннуитеты.
Давайте рассмотрим некоторые из них более подробно.
Создание и запуск контейнеров
Запомните основные принципы работы контейнеров Docker
- Контейнер живет, пока живет процесс, вокруг которого рождается контейнер.
- Внутри контейнера этот процесс имеет pid=1
- Рядом с процессом с pid=1 можно порождать сколько угодно других процессов (в пределах возможностей ОС, естественно), но убив (рестартовав) именно процесс с pid=1, контейнер выходит. (см п.1)
- Внутри контейнера вы увидите привычное согласно стандартам FHS расположение директорий. Расположение это идентично исходному дистрибутиву (с которого взят контейнер).
- Данные, создаваемые внутри контейнера остаются в контейнере и нигде более не сохраняются (ну, еще к этому слою есть доступ из хостовой ОС). удалив контейнер — потеряете все ваши изменения. Поэтому данные в контейнерах не хранят, а выносят наружу, на хостовую ОС.
-a — это аббревиатура для -attach. Контейнеры могут быть присоединены к стандартным потокам stdin, stdout или stderr. Активировать существующий контейнер (может относиться к контейнеру с идентификатором или именем):.
Идентификатор или имя можно задать с помощью команды PS. Опция ‘-l’ указывает на последний выполненный контейнер.
Как описано в предыдущем разделе, команда run объединяет создание и загрузку контейнера. Для краткости слово контейнер можно опустить.
Для выполнения в контейнере необходимо выполнить команду:.
-d — это аббревиатура для -detach (отключение). Контейнер работает в фоновом режиме и может использовать терминал для выполнения других команд.
Присвоение имени
Поскольку нет необходимости заучивать и запоминать идентификаторы контейнеров, вы можете использовать командную строку для присвоения уникального имени каждому контейнеру при его создании, как в следующем примере.
Затем вы можете работать с контейнерами (запускать, останавливать, удалять, поднимать вверх и запускать команды статистики). Пример.
docker start myname- связь docker statistics myname- docker top myname resource statistics
Если вы попытаетесь выполнить команду top из приведенного выше примера, будет выдана ошибка
Если вы внимательно прочитаете статью, то найдете причину возникновения ошибки.
Если у вас уже есть изображение Hello World, Docker запустит его. Если такой картинки нет, он возьмет ее из официального репозитория DockerHub, а затем запустит ее. Результат будет выглядеть следующим образом
Синтаксис и опции docker run
Команда Docker Run похожа на другие командные команды Linux и выглядит следующим образом.
$ команда docker run options image
Команда требует передать образ, на котором будет создан контейнер. Изображение может быть локальным или относиться к изображению, которое должно быть получено из сети. Мы рассмотрим их в следующем примере. Опции позволяют более тонко настроить параметры контейнера и загрузки. Сама команда может быть использована для обхода программ, запущенных после запуска контейнера. Например, Running /Bin/Bash можно использовать для подключения к самому контейнеру.
Давайте рассмотрим основной выбор вспомогательных программ для использования. Существует так много вариантов, что мы не можем перечислить их все:.
- -d — запускает контейнер в фоновом режиме;
- -t — прикрепляет к контейнеру псевдо-TTY-консоль;
- -i — выводит в терминал STDIN поток контейнера;
- —name — имя контейнера, по которому потом можно будет к нему обращаться;
- —dns — устанавливает DNS-серверы для контейнера;
- —network — тип сети для контейнера, может принимать такие значения: bridge (используется по умолчанию), none , host. Также можно передать идентификатор сети Docker, к которой надо подключится;
- —add-host — добавляет строчку в /etc/hosts;
- —restart — указывает, когда надо перезапускать контейнер. Возможные значения: no , on-failure , always , unless-stopped ;
- —rm — удаляет контейнер после завершения его работы;
- -m, —memory — количество оперативной памяти, доступное Docker-контейнеру;
- —memory-swap — объём памяти раздела подкачки, доступный в контейнере;
- —cpus — количество ядер процессора, доступных в контейнере;
- —shm-size — размер файла /dev/shm;
- —device — позволяет монтировать устройства из папки /dev в контейнер;
- —entrypoint — позволяет переопределить скрипт, который выполняется при запуске контейнера, перед запуском основной команды;
- —expose — позволяет пробросить несколько портов из контейнера в хост-систему;
- -P — пробрасывает все порты контейнера в хост-систему;
- -p — переносит все порты контейнера в хост-систему без смены номера порта;
- —link — позволяет настроить связь контейнеров Docker;
- -e — добавляет переменную окружения в контейнер;
- -v, —volume — позволяет монтировать папки хоста в контейнер;
- -w — изменяет рабочую директорию контейнера.
Это основные варианты, которые мы будем использовать в этой статье, и давайте рассмотрим пример создания контейнера Docker в Linux.
Создание контейнера Docker
1. Обычный контейнер
Чтобы создать и запустить контейнер, используя параметры по умолчанию в образе, просто выполните команду без параметров. Используйте контейнер Hello World, предназначенный для этого.
Когда контейнер Docker запущен, отображается приветственное сообщение и процесс контейнера завершается.
Готовые образы контейнеров можно найти на сайте DockerHub. Есть образы для большинства дистрибутивов и системных служб, включая Nginx, Apache, PHP-FPM и PhpMyAdmin.
Название контейнера отображается в верхней части, а доступные версии — сразу под ним. При создании контейнера версия описывается через двоеточие. Например, создайте контейнер с Ubuntu 18.04 и запустите его. Используйте параметр -name для присвоения имени контейнеру, чтобы облегчить доступ к нему в дальнейшем.
docker run —name Ubuntu1804 ubuntu:18.04
2. Подключение к контейнеру
Образ Ubuntu 18.04 с контейнером, созданный выше, не имеет команд для постоянного выполнения, поэтому если вы попытаетесь подключиться к образу с помощью команды docker exec, вы получите ошибку. Невозможно подключиться к остановленному контейнеру. Начните сначала:.
Это происходит потому, что среда не может функционировать без основного процесса, в рамках которого был создан контейнер. Во время выполнения процесса контейнер продолжает работать. По завершении процесса контейнер закрывается, а ранее созданные контейнеры становятся полностью недоступными. Сразу после запуска происходит сбой, что делает невозможным подключение к разбившемуся контейнеру. Удаляемый:.
Затем контейнер должен быть создан с помощью команды для выполнения. Для этого просто выполните команду после имени образа. / bin/bash. Чтобы сделать контейнер интерактивным, используйте опции -i и -t для создания контейнера.
docker run -it —name Ubuntu1804 ubuntu:18.04 / bin / bash
Теперь вы можете перейти в контейнер и запустить процесс непосредственно в изолированной среде.
3. Переменные окружения
Переменные среды часто используются для изменения настроек контейнера. Когда переменная окружения определена, ее значение используется собственными программами контейнера для выполнения различных действий. Параметр -e используется для определения переменных среды. Запустите контейнер Docker.
docker run -it -e «FOO = bar» —name Ubuntu1804_2 ubuntu: 18.04 / bin / bash
4. Монтирование папок и хранилищ
Когда вам нужно, чтобы контейнер мог работать с исходными кодами программы или с часто изменяемыми данными, рекомендую сделать специальную настройку — будет неудобно каждый раз копировать информацию в контейнер. Куда проще примонтировать папку хоста в контейнер, и все изменения исходников будут сразу же доступны в контейнере. Это очень удобно. Для монтирования папки следует передать её опции -v. Например, примонтируем папку ~/test_docker в контейнер:
Выводы
В этой статье описано, как запустить и настроить контейнер Docker. Как видите, Docker очень полезен для быстрой разработки окружений рабочего стола. Однако сама команда dockerrun редко используется для этой цели. Обычно используется инструмент docker-compose. Хотите прочитать больше об этом инструменте? Напишите нам комментарий!
Эта статья распространяется по лицензии Creative CommonsShareAlike 4.0.
Поскольку нет необходимости заучивать и запоминать идентификаторы контейнеров, вы можете использовать командную строку для присвоения уникального имени каждому контейнеру при его создании, как в следующем примере.
Как пользоваться командами Docker
С командой docker и командами аргументов можно использовать различные опции. Синтаксис показан ниже: docker options аргументы командыДля просмотра всех подкоманд введите: docker18
Список Docker18 показан здесь.
Вы можете получить информацию об использовании выбранной команды.
Для получения дополнительной информации о Docker необходимо ввести следующее
Как работать с образами Docker
Контейнеры состоят из изображений. Во-первых, Docker получает образы из Docker Hub (реестра образов, поддерживаемого разработчиками). Каждый может создавать и загружать свои собственные изображения. Поэтому для большинства дистрибутивов и программ необходимые образы уже доступны на DockerHub.
Следующая команда проверяет, можно ли получить доступ к образу и загрузить его на Docker Hub (на примере образа hello-world).
Этот вывод данных показывает, что Docker работает правильно.
Первоначально служба не смогла найти образ hello-world на локальной машине, поэтому ей пришлось загрузить образ с узла (репозиторий по умолчанию). После загрузки Docker создал контейнер отдельно от образа и уже запустил программу контейнера.
Изображения, отображаемые на узле, можно найти с помощью команд docker и search. Например, образ Ubuntu можно найти следующим образом
Затем сценарий просматривает содержимое узла и отображает все изображения, соответствующие определенным критериям. В предложенном примере результат будет выглядеть следующим образом
Строка OK в колонке OFFICIAL означает, что изображение было создано и поддерживается компанией, ответственной за проект. Выбрав нужное изображение, вы можете загрузить его на свой компьютер с помощью подкоманды pull.
Используйте следующую команду для загрузки официального образа Ubuntu на ваш компьютер.
После завершения операции на экране появятся следующие результаты После загрузки образа вы можете запустить контейнер из образа с помощью команды run. Используя пример hello-world, если после записи run образ не был загружен, клиент сначала загрузит образ, а затем запустит контейнер, содержащий образ.
Чтобы проверить, какие изображения были загружены на компьютер, используйте следующую команду
Результат будет выглядеть следующим образом Ниже показано, что образ может быть изменен для запуска контейнера и использован для создания других образов. Последние также можно загрузить в DockerHub или другие репозитории. Давайте подробнее рассмотрим, как работать с контейнерами.
Запуск контейнера Docker
Выполненный ранее hello-world является примером контейнера, который открывается и закрывается после отображения тестового сообщения. Однако контейнеры предназначены для выполнения более полезных задач. Они имеют много общего с виртуальными машинами, но требуют гораздо меньше ресурсов для работы. Вы можете проверить, как запускать контейнеры, используя последние образы Ubuntu. Дополнительные опции -i и -t обеспечивают интерактивный доступ к редактору команд.
Командная строка изменится, указывая на переход к контейнеру, и будет выглядеть следующим образом
Обратите внимание, что ID контейнера также отображается. Здесь это 2c88170e5391. В дальнейшем это понадобится, чтобы сообщить клиенту, какой контейнер нужно удалить.
Затем вы можете выполнить любую команду на контейнере. Например, вы можете захотеть обновить базу данных пакетов. Для этого вам не нужно использовать sudo. Это происходит потому, что он выполняется от имени пользователя с привилегиями root.
Затем вы можете установить приложение. Давайте рассмотрим пример установки Node.js.
Эта команда устанавливает Node.js в контейнер, используя репозиторий Ubuntu. После завершения установки вы можете проверить, была ли она успешной.
Отображается номер текущей версии Node.js.
Изменения, внесенные в контейнер, применяются только к нему. Вы можете выйти из контейнера с помощью команды exit.
В конфигурации по умолчанию для запуска Docker вы должны быть пользователем root или пользователем в группе docker, которая автоматически создается при установке службы.
Подводим Итоги
Docker — чрезвычайно полезный инструмент для любого разработчика. Возможность беспрепятственного тестирования, разработки и развертывания приложений — полезная функция, которая может значительно ускорить ваш рабочий процесс. В этом руководстве вы узнаете, как запустить контейнер Docker и некоторые другие команды, которые вам обязательно пригодятся.
Для получения дополнительной информации мы рекомендуем обратиться к другим руководствам или официальной документации Docker.
Ольга работает ИТ-менеджером около пяти лет. Написание технических заданий и инструкций — одна из ее основных обязанностей. Ей нравится узнавать новое и создавать интересные и полезные статьи о новейших технологиях, веб-разработке и языках программирования.
Готовые образы контейнеров можно найти на сайте DockerHub. Есть образы для большинства дистрибутивов и системных служб, включая Nginx, Apache, PHP-FPM и PhpMyAdmin.
Запуск в автономном режиме
Если вы хотите продолжить работу контейнера после выхода из терминала, запустите его в автономном режиме. Используйте опцию -d в команде.
В фоновом режиме вы можете продолжать работу в терминале. Например, введите команду для просмотра списка запущенных контейнеров или завершения работы контейнера.
Автономные контейнеры останавливаются только после завершения корневого процесса. Для отображения списка текущих контейнеров можно использовать следующие команды.
При необходимости подключите терминал к корневому контейнеру. Для этого выполните команду: .
Чтобы остановить контейнер, выполните следующую команду
Запуск в интерактивном режиме
Docker также поддерживает интерактивное выполнение контейнеров. Это означает, что вы можете запускать команды bash внутри контейнеров shell. Опции -i и -t используются для запуска интерактивного режима.
Например, опция -it указывает Docker оставить терминал в качестве стандартного ввода и назначить false-tty.
При выполнении этой команды к терминалу подключается контейнерная оболочка bash. Переводчик будет меняться. Вы сможете взаимодействовать с оболочкой контейнера и выполнять любые команды в контейнере.
Добавление имени контейнера
Docker использует UUID и имена для идентификации контейнеров. Если имя явно не указано, демон Docker автоматически генерирует имя. Это не всегда удобно. Однако его можно легко изменить с помощью параметра -name.
Главное, чтобы имя контейнера было уникальным. Если вы попытаетесь запустить другой контейнер с тем же именем, Docker выдаст ошибку.
Чтобы просмотреть все контейнеры и проверить их названия, используйте следующую команду.
CONTAINER ID | IMAGE | COMMAND | CREATED | STATUS | PORTS | NAMES |
73c370a51b77 | nginx | «nginx -g ‘daemon of…» | 5 minutes ago | Up 5 minutes | 80/tcp | my_nginx |
775fg6985dde | «nginx -g ‘daemon of…» | 7 minutes ago | Up 7 minutes | 80/tcp | friendly_paul | |
7f836dcnb1d1 | «nginx -g ‘daemon of…» | 13 minutes ago | Up 13 minutes | example_one | ||
d1785f35a0c8 | «nginx -g ‘daemon of…» | 29 minutes ago | Up 29 minutes | example_two |
Вам не нужно указывать имя. Это облегчает обращение к контейнерам. Вам не придется постоянно вспоминать список и искать труднозапоминаемые идентификаторы.