В предыдущей статье я рассказывал о том, как создавать Docker-образы. Наступило время их использовать!
Если вы не читали мои предыдущие статьи о Docker или подзабыли разницу между image и container, советую ознакомиться.
Запуск Docker контейнеров
1. Проверим список запущенных контейнеров при помощи команды ps:
1 |
docker ps |
Пока что список пуст.
2. Запустим один контейнер из только что созданного образа example-image:
1 |
docker run -d -p 22:22 -p 8080:80 example1 |
Разберемся с этой строкой:
docker run
Команда создания контейнера.
-d
Тег, который указывает, как запускать процесс: в режиме foreground (активном) или detached (фоновом).
При использовании foreground режима (без указания тега -d) Docker запускает процесс в контейнере, стандартные потоки ввода/вывода/ошибок транслируются в терминал. При этом терминал блокируется.
Если вас это запутывает, не переживайте. В 99,99% случаев контейнеры будут запускаться в фоновом режиме.
С тегом -d контейнер запускается и работает в фоновом (detached) режиме:
Обратите внимание, что для удобства Docker предлагает использовать сокращенные ID контейнеров. Если вам нужно получить полный ID, используйте дополнительный тег —no-trunc:
1 |
docker ps --no-trunc |
-p 22:22 -p 8080:80
Самое интересное. Порты. Они позволяют настроить взаимодействие контейнера и хост-машины. По умолчанию контейнеры являются полностью недоступными, изолированными внутри Docker-машины.
Когда мы создавали образ, то указали инструкцию EXPOSE 22 80. Сама по себе expose не открывает порты контейнера, но дает возможность «привязаться» к порту контейнера во время запуска контейнера. Делается это при помощи тега -p, сразу за которым следует порт хост-машины, потом порт контейнера:
После я связал еще один порт 80 (веб-сервер) контейнера с портом 8080 хост-машины.
3. Контейнер запущен. Теперь я могу работать с веб-сервером на порту 8080 (порт можно выбрать любой). Этот веб-сервер на самом деле находится внутри только что запущенного контейнера:
Стоит отметить, что контейнеров можно запустить большое множество (даже на основе одного образа).
Если материалы заинтересуеют аудиторию, я покажу, как настраивать Docker для production сервера и рабочей машины разработчика. Не стесняйтесь комментировать (здесь и в соц. сетях).
Pingback: Docker. Создание образов — Блог Виктора Зинченко
Pingback: Что такое Docker? — Блог Виктора Зинченко
Шикарные статьи по Docker, многое разъяснили. Спасибо !!
Super!!
«Если материалы заинтересуеют аудиторию, я покажу, как настраивать Docker для production сервера и рабочей машины разработчика.» +++
У меня не запускается веб-сервер.
Мне тоже интересно! +++
Лайфхак: если без использования демонов запустить контейнер в активном режиме (не фоновом) или подключившись к нему через команду docker attach и потом выйти из него используя exit (Ctrl+D), то контейнер завершая процесс оболочки bash тут же выключается, т.е. контейнер гасится, если там нет никаких процессов. Чтобы выходить не гася bash пользуйтесь сочетанием Ctrl+P+Q, тогда оболочка bash останется активной и контейнер будет Up.
Другой способ подключиться к контейнеру: docker exec -it bash, так создаёт отдельный процесс оболочки bash из которого можно выходить через привычный exit, не боясь, что контейнер потухнет
Очень интересно! +++++++
Супер статья, хочу продолжение!
Спасибо)
Очень бы хотелось продолжения — как настраивать Docker для production сервера и рабочей машины разработчика
Коротко и понятно!
Ждем демонстрации. очень интересно!