Команда docker run используется для запуска контейнеров.
Научиться использовать команду docker run – это рекомендация для всех разработчиков, которые хотят познакомиться с Docker.
При работе с Docker разработчики программного обеспечения в основном используют команду docker run, чтобы:
- Создать контейнер из заданного образа докера
- Запустить контейнер со своим именем
- Запустить контейнер на переднем плане
- Запустить контейнер в автономном режиме
- Запустить контейнер в интерактивном режиме
- Назначить порты контейнеру на хост-машине
- Совместное использование данных между контейнерами и хост-машиной
- Удалить контейнер после его остановки
Команда Docker run
Синтаксис команды:
docker run [options] image-name [command] [arg...]
docker run image-name
где:
image-name может быть образом на вашем локальном компьютере или быть извлеченным из онлайн-реджестри, такого как Docker Hub и Quay.io.
В следующем примере мы запустим контейнер из общедоступного образа hello-world, который находится в Docker Hub.
$ sudo docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 0e03bdcc26d7: Pull complete Digest: sha256:7f0a9f93b4aa3022c3a4c147a449bf11e0941a1fd0bf4a8e6c9408b2600777c5 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly.
$ sudo docker image ls
Вывод:
REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 4e2eef94cd6b 9 days ago 73.9MB nginx latest 4bb46517cac3 2 weeks ago 133MB alpine latest a24bb4013296 3 months ago 5.57MB truongnh1992/go latest 57b4af3567ac 3 months ago 7.41MB hello-world latest bf756fb1ae65 7 months ago 13.3kB
$ sudo docker run bf756fb1ae65 Hello from Docker! This message shows that your installation appears to be working correctly. ...
Примечание. Начиная с версии Docker 1.13, в связи с новым синтаксисом, мы используем «docker container run» вместо «docker run».
Как запустить контейнер с определенным именем
Когда вы запускаете контейнер с базовым синтаксисом «docker container run», Docker случайным образом сгенерирует имя для каждого контейнера, как вы можете видеть ниже:
$ sudo docker container ls -a
вывод:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 941b67537bbb ubuntu "/bin/bash" 4 seconds ago Exited (0) 3 seconds ago musing_elgamal a7b197b56d2c bf756fb1ae65 "/hello" About a minute ago Exited (0) About a minute ago determined_faraday 0b40e331161e hello-world "/hello" 4 minutes ago Exited (0) 4 minutes ago nervous_sammet
Если вы хотите явно присвоить имя своему контейнеру, давайте запустим команду со следующим синтаксисом:
$ docker container run --name container-name image-name
Пример:
$ sudo docker container run --name hello-linoxide hello-world
Вывод:
$ sudo docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES eb2f0c9cc658 hello-world "/hello" 21 seconds ago Exited (0) 20 seconds ago hello-linoxide ...
Как запустить контейнер на переднем плане
Когда мы работаем с контейнерами докеров, их можно запускать в двух режимах: attached mode и detached mode.
По умолчанию Docker запускает контейнер на переднем плане (attached mode)
Это означает, что процесс контейнера подключается к сеансу терминала и отображает результат.
Если контейнер все еще запущен, он не вернет командную строку.
Например:
$ sudo docker container run nginx /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Configuration complete; ready for start up
Как запустить контейнер в автономном режиме
Если вы хотите запустить этот контейнер в фоновом режиме (detached mode), давайте воспользуемся параметром -d:
$ sudo docker container run -d nginx 4fd8f2933eafaebcc75ef4fe6d0a961f76d8fdbf64383caff7f422a25c60951f
Как запустить контейнер в интерактивном режиме
Docker поддерживает запуск контейнера в интерактивном режиме.
Благодаря этой функции вы можете выполнять команды внутри контейнера с оболочкой.
Использование опции -it после ‘/bin/bash’ или ‘/bin/sh’ для запуска интерактивного режима, например:
$ sudo docker container run -it ubuntu /bin/bash root@d99e70bff763:/# echo $0 /bin/bash
$ sudo docker container run -it ubuntu /bin/sh # echo $0 /bin/sh
Проброс портов для контейнера
По умолчанию, чтобы получить доступ к процессу, запущенному внутри контейнера, вы должны войти внутрь него.
Если вы хотите получить к нему доступ извне, давайте откроем порт.
Публикуя порты, вы можете сопоставить порты контейнера с портами на вашем хост-компьютере, используя параметр -p следующим образом:
$ dock container run -p host-port:container-port image
Например, чтобы сопоставить порт 80 контейнера nginx с портом 8080 на хост-машине, запустите:
$ sudo docker container run -d -p 8080:80 nginx cd85a291dab1ff92fa2ee6275446f758baa8322de2b706f7b581a54825142c5b
Теперь давайте воспользуемся curl для получения контента с localhost: 8080
$ curl localhost:8080
Монтирование томов для контейнера
Данные в контейнере эфемерны, они уже не существуют, когда контейнер остановлен.
Если вы хотите постоянно хранить данные в контейнере, вам необходимо подключить их к общему тому хранилища.
Давайте использовать параметр -v для монтирования томов следующим образом:
$ docker container run -v host-machine-location:container-storage image
Например, давайте смонтируем каталог «share-data» на вашем хост-компьютере в «/home» в контейнере:
$ mkdir share-data/ $ echo "Hello itisgood readers" > share-data/test.txt $ sudo docker container run -it -v $(pwd)/share-data:/home alpine
вывод:
/ # ls /home/ test.txt / # cat /home/test.txt Hello itisgood readers
Как удалить контейнер после его остановки
По умолчанию, когда контейнер останавливается, его файловая система все еще остается на хост-машине.
Они занимают много места для хранения.
Если вы хотите автоматически удалить контейнер после его выхода, используйте параметр –rm:
$ docker container run --rm image
Например, запуск контейнера без опции –rm:
$ sudo docker container run ubuntu $ sudo docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ad348fb61463 ubuntu "/bin/bash" 8 seconds ago Exited (0) 6 seconds ago distracted_hoover
При использовании опции –rm, когда контейнер остановлен, он будет автоматически удален.
$ sudo docker container run --rm ubuntu $ sudo docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Заключение
Docker – это платформа с открытым исходным кодом, которая позволяет разработчикам программного обеспечения создавать, развертывать и управлять контейнерными приложениями.
Docker – действительно мощный инструмент для любого разработчика, особенно инженеров DevOps.
Освоение способа использования команд «Docker container run» – ключ к раскрытию мощи Docker.
Спасибо за прочтение и, пожалуйста, оставьте свои предложения в разделе комментариев ниже.
см. также:
- 🐳 Как запустить службу Docker при загрузке системы
- 🐳 Лучшие инструменты с графическим интерфейсом для Docker
- ☸️ Как опубликовать образ Docker в Docker Hub с помощью Podman