DevOps

Docker. Запуск контейнеров

В предыдущей статье я рассказывал о том, как создавать Docker-образы. Наступило время их использовать!

all-top

Если вы не читали мои предыдущие статьи о Docker или подзабыли разницу между image и container, советую ознакомиться.


Запуск Docker контейнеров

1. Проверим список запущенных контейнеров при помощи команды ps:

1

Пока что список пуст.

2. Запустим один контейнер из только что созданного образа example-image:

Разберемся с этой строкой:

docker run

Команда создания контейнера.


-d

Тег, который указывает, как запускать процесс: в режиме foreground (активном) или detached (фоновом).

При использовании foreground режима (без указания тега -d) Docker запускает процесс в контейнере,  стандартные потоки ввода/вывода/ошибок транслируются в терминал. При этом терминал блокируется.

2

Если вас это запутывает, не переживайте. В 99,99% случаев контейнеры будут запускаться в фоновом режиме.
С тегом -d контейнер запускается и работает в фоновом (detached) режиме:

3

Обратите внимание, что для удобства Docker предлагает использовать сокращенные ID контейнеров. Если вам нужно получить полный ID, используйте дополнительный тег —no-trunc:


-p 22:22 -p 8080:80

Самое интересное. Порты. Они позволяют настроить взаимодействие контейнера и хост-машины. По умолчанию контейнеры являются полностью недоступными, изолированными внутри Docker-машины.
Когда мы создавали образ, то указали инструкцию EXPOSE 22 80. Сама по себе expose не открывает порты контейнера, но дает возможность «привязаться» к порту контейнера во время запуска контейнера. Делается это при помощи тега -p, сразу за которым следует порт хост-машины, потом порт контейнера:

4

После я связал еще один порт 80 (веб-сервер) контейнера с портом 8080 хост-машины.


3. Контейнер запущен. Теперь я могу работать с веб-сервером  на порту 8080 (порт можно выбрать любой). Этот веб-сервер на самом деле находится внутри только что запущенного контейнера:

5

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


Если материалы заинтересуеют аудиторию, я покажу, как настраивать Docker для production сервера и рабочей машины разработчика. Не стесняйтесь комментировать (здесь и в соц. сетях).

Поделитесь с друзьями или сохраните себе
  •  
  •  
  •  
  •  
  •  
  •  
  •  

12 Comments

  1. nikolay

    Super!!
    «Если материалы заинтересуеют аудиторию, я покажу, как настраивать Docker для production сервера и рабочей машины разработчика.» +++

    Reply
  2. Ярослав

    Лайфхак: если без использования демонов запустить контейнер в активном режиме (не фоновом) или подключившись к нему через команду docker attach и потом выйти из него используя exit (Ctrl+D), то контейнер завершая процесс оболочки bash тут же выключается, т.е. контейнер гасится, если там нет никаких процессов. Чтобы выходить не гася bash пользуйтесь сочетанием Ctrl+P+Q, тогда оболочка bash останется активной и контейнер будет Up.
    Другой способ подключиться к контейнеру: docker exec -it bash, так создаёт отдельный процесс оболочки bash из которого можно выходить через привычный exit, не боясь, что контейнер потухнет

    Reply
  3. Лиля

    Спасибо)
    Очень бы хотелось продолжения — как настраивать Docker для production сервера и рабочей машины разработчика

    Reply

Добавить комментарий для Юзерпк Отменить ответ

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


четыре × 5 =