компилируется...
Перейти к основному содержанию
Рекомендовать во Вконтакте Рекомендовать в Фейсбуке Рекомендовать в Твиттере

Изучаем команду Docker Run на примерах

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

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

В этой статье мы будем использовать официальное образ Nginx, чтобы показать различные способы запуска контейнера Docker.

Команда Docker Run

Команда docker run принимает следующий вид:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

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

Если команда не указана, то при запуске контейнера выполняется команда, указанная в инструкциях CMD или ENTRYPOINT в Dockerfile.

Начиная с версии 1.13, Docker CLI подвергся реструктуризации, и все команды были сгруппированы под объектом, с которым они взаимодействуют.

Так как команда run взаимодействует с контейнерами, то теперь это подкоманда docker контейнера. Синтаксис новой команды следующий:

docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]

Старый синтаксис версии до 1.13 все еще поддерживается. Под капотом, команда docker run - это псевдоним для запуска docker container run. Пользователям рекомендуется использовать новый синтаксис.

Список всех опций docker container run можно найти на странице документации Docker.

Запуск контейнера на переднем плане

По умолчанию, когда нет опции для команды docker run, корневой процесс запускается на переднем плане. Это означает, что стандартный вход, выход и ошибка корневого процесса привязаны к сеансу терминала.

docker container run nginx

Вывод nginx-процесса будет отображен на вашем терминале. Поскольку подключения к веб-серверу отсутствуют, терминал пуст.

Чтобы остановить контейнер, завершите запущенный процесс Nginx нажатием клавиши CTRL+C.

Запуск контейнера в автономном режиме

Чтобы контейнер продолжал работать при выходе из терминальной сессии, запустите его в автономном режиме. Это похоже на запуск процесса Linux в фоновом режиме.

Используйте опцию -d, чтобы запустить автономный контейнер:

docker container run -d nginx

Вывод команды:

773ff6981ddea83aeb216501477c8c1a82abea6220248e5ec5cba3ea416dae72

Автономный контейнер остановится, когда корневой процесс завершится.

Вы можете перечислить запущенные контейнеры, используя docker container ls.

Чтобы прикрепить терминал к отдельному корневому контейнеру, воспользуйтесь командой docker container attach.

Удаление контейнера после выхода из него

По умолчанию, когда контейнер завершается, его файловая система сохраняется на хост-системе.

Опции --rm указывают команде docker run на автоматическое извлечение контейнера при выходе из него:

docker container run --rm nginx

Образ Nginx может быть не лучшим примером для очистки файловой системы контейнера после выхода из него. Эта опция обычно используется на контейнерах переднего плана, которые выполняют кратковременные задачи, такие как тестирование или резервное копирование баз данных.

Установка имени контейнера

В Docker каждый контейнер идентифицируется по UUID и названию. По умолчанию, если оно явно не задано, демон Docker автоматически генерирует имя контейнера.

Используйте опцию --name для присвоения контейнеру пользовательского имени:

docker container run -d --name my_nginx nginx

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

docker: Error response from daemon: Conflict. The container name "/my_nginx" is already in use by container "73c370a61b7792f6f42326197b78ed9e39367f4c2c0abeaa8c2cb7881050c733". You have to remove (or rename) that container to be able to reuse that name.

Запустите docker container ls -a, чтобы перечислить все контейнеры и увидеть их имена:

docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
73c370a61b77 nginx "nginx -g 'daemon of…" 2 minutes ago Up 2 minutes 80/tcp my_nginx
773ff6981dde nginx "nginx -g 'daemon of…" 11 minutes ago Up 11 minutes 80/tcp musing_rosalind
7f83ddcbb1d1 nginx "nginx -g 'daemon of…" 12 minutes ago Exited (0) 11 minutes ago objective_feistel
d17859c5a0c8 nginx "nginx -g 'daemon of…" 15 minutes ago Exited (0) 12 minutes ago objective_pare

Значимые имена полезны для ссылки на контейнер в сети Docker или при выполнении команд CLI docker.

Публикация портов контейнера

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

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

Чтобы опубликовать порт, воспользуйтесь параметром -p следующим образом:

-p host_ip:host_port:container_port/protocol
  • Если host_ip не указан, по умолчанию он равен 0.0.0.0.0.
  • Если протокол не указан, по умолчанию используется протокол TCP.
  • Чтобы опубликовать несколько портов, используйте несколько опций -p.

Чтобы отобразить TCP порт 80 (nginx) в контейнере на порт 8080 интерфейса локального хоста хоста, нужно запустить команду:

docker container run --name web_server -d -p 8080:80 nginx

Вы можете убедиться, что порт опубликован, открыв http://localhost:8080 в браузере или запустив следующую команду curl:

curl -I http://localhost:8080

Вывод будет выглядеть примерно так:

HTTP/1.1 200 OK
Server: nginx/1.17.6
Date: Tue, 26 Nov 2019 22:55:59 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 19 Nov 2019 12:50:08 GMT
Connection: keep-alive
ETag: "4dee500-124"
Accept-Ranges: bytes

Обмен данными (Монтирование томов)

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

Для создания томов и управления ими используйте опции -v следующим образом:

-v host_src:container_dest:options
  • host_src может быть абсолютным путем к файлу или директории на хосте или названном томе.
  • container_dest - это абсолютный путь к файлу или директории на контейнере.
  • Опции могут быть rw (чтение-запись) и ro (только чтение). Если опция не указана, по умолчанию используется rw.

Чтобы объяснить, как это работает, давайте создадим каталог на хосте и поместим в него файл index.html:

mkdir public_html
echo "Testing Docker Volumes" > public_html/index.html

Далее смонтируем каталог public_html в каталог /usr/share/nginx/html в контейнере:

docker run --name web_server -d -p 8080:80 -v $(pwd)/public_html:/usr/share/nginx/html nginx

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

Теперь, если вы введете http://localhost:8080 в браузере, вы должны увидеть содержимое файла index.html. Вы также можете использовать curl:

curl http://localhost:8080
Testing Docker Volumes

Запуск контейнера в интерактивном режиме

При работе с интерактивными процессами, такими как bash, используйте опции -i и -t для запуска контейнера.

Параметр -it указывает docker оставить стандартный вход подключенным к терминалу и назначить псевдо-tty:

docker container run -it nginx /bin/bash

Оболочка Bash контейнера будет прикреплена к терминалу, и интерпретатор команд изменится:

root@2a46514b35cf:/#

Теперь вы можете взаимодействовать с оболочкой контейнера и выполнять в ней любые команды.

В этом примере мы предоставили команду (/bin/bash) в качестве аргумента для команды запуска доккера, которая была выполнена вместо команды, указанной в Dockerfile.

Заключение

Докер является стандартом для упаковки и развертывания приложений и важным компонентом CI/CD, автоматизации и DevOps.

Команда docker container run используется для создания и запуска контейнеров docker.

Если у вас есть вопросы, пожалуйста, оставьте комментарий ниже.

Комментарии

Пока что нет комментариев, вы можете быть первым.
Войти или Регистрация , чтобы оставлять комментарии.

Лучшие публикации

Популярные теги

Наш сайт использует куки. Узнайте больше о нашем использовании куки: политика в отношении файлов cookie
Наш сайт существует только благодаря показу онлайн-рекламы нашим посетителям.
Пожалуйста, поддержите нас, отключив блокировку рекламы.