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

by itisgood

Команда 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.
При первом запуске контейнера демон Docker извлекает образ hello-world из Docker Hub.
Затем он создает новый контейнер из этого образа и передает вывод на ваш терминал.
С этого момента образ загрузился на ваш локальный компьютер.
Вы можете просмотреть все образы, запустив:
$ 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
В следующий раз, когда вы запустите этот образ, он будет быстрее, чем в первый раз, и вы можете использовать IMAGE-ID вместо имени.
Например:
$ 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 run рекомендуется указать sudo или использовать обходной путь:

Как запустить контейнер с определенным именем

Когда вы запускаете контейнер с базовым синтаксисом «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.

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

см. также:

 

You may also like

Leave a Comment