Команда Docker Run с примерами

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

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

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

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

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

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

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

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

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

Начиная с версии 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 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
 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 на локальном интерфейсе хоста, выполните:

 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_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@1da70f1937f5:/#

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

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

Заключение

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

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

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

докер

Связанные руководства

Источник

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *