Как использовать команду Docker Run в Linux

12 set 2022 4 min di lettura
Как использовать команду Docker Run в Linux
Indice dei contenuti

Введение

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

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

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

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

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

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

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

Если команда не указана, команда, указанная в операторах CMD Dockerfiles или 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

Выходное сообщение должно выглядеть так:

121f93h9139d4b091nds4908nd47190284n71093d7n419dn7903124n7d19023a

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

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

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

Удалить контейнер After Exit

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

Параметры --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
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
 546d4fe312fe nginx "nginx -g 'daemon of…" 23 seconds ago Up 23 seconds 80/tcp my_nginx

Значимые имена полезны для ссылки на контейнер в сети Docker или при выполнении команд интерфейса командной строки 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, 23 Nov 2019 20:13:11 GMT
 Content-Type: text/html
 Content-Length: 612
 Last-Modified: Tue, 11 Nov 2019 11:56:01 GMT
 Connection: keep-alive
 ETag: "4dd1r677-264"
 Accept-Ranges: bytes

Обмен данными (монтажные тома)

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

Для создания томов и управления ими используйте параметр -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 о том, что стандартный ввод должен оставаться подключенным к терминалу и выделять псевдотерминал:

docker container run -it nginx /bin/bash

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

root@1d192392e:/#

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

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

Вывод

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

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

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.