Команда запуска Docker с примерами

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

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

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

Команда запуска Docker

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

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

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

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

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

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

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

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

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

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

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

docker container run nginx

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

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

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

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

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

docker container run -d nginx
050e72d8567a3ec1e66370350b0069ab5219614f9701f63fcf02e8c8689f04fa

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

Вы можете перечислить запущенные контейнеры с помощью команды 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 "9...c". You have to remove (or rename) that container to be able to reuse that name.

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

docker container ls
CONTAINER ID  IMAGE  COMMAND                 CREATED         STATUS         PORTS   NAMES
9d695c1f5ef4  nginx  "nginx -g 'daemon of…"  36 seconds ago  Up 35 seconds  80/tcp  my_nginx

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

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

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

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

Для публикации порта используйте следующие параметры -p :

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

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

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

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

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: "5dd3e500-264"
Accept-Ranges: bytes

Совместное использование данных (монтаж томов)

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

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

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

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

mkdir public_htmlecho "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@1da70f1937f5:/#

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

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

Выводы

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

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

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

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