Запуск первого сервиса

DockerBeginner
Практиковаться сейчас

Введение

В современной разработке программного обеспечения контейнеры стали распространённым способом упаковки и развёртывания приложений. Контейнер — это не полноценная виртуальная машина. Он использует ядро хост-системы, но запускает приложение в изолированной среде процессов со своим представлением файловой системы и собственной сетевой конфигурацией.

В этой лабораторной работе вы сделаете первые шаги с Docker, запустив реальное приложение — веб-сервер Nginx. Это полезный навык, потому что многие контейнеры предназначены не для выполнения одноразовых команд. Они работают как долгоживущие сервисы, поэтому важно понимать их жизненный цикл.

Это важное отличие от примера hello-world. В отличие от контейнера, который запускается, выводит сообщение и завершается, теперь вы будете работать с контейнером сервиса. Такой контейнер должен продолжать работать, пока выполняется его основной процесс.

Вы научитесь:

  • Запускать контейнер в фоновом режиме (в отсоединённом режиме).
  • Просматривать состояние запущенных контейнеров.
  • Останавливать контейнер после завершения работы.
  • Удалять контейнер, чтобы освободить системные ресурсы.

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

Запуск веб-сервера в фоновом режиме

На этом шаге вы запустите веб-сервер Nginx.

При выполнении команды в терминале она обычно занимает экран до своего завершения. Однако сервису, например веб-серверу, нужно постоянно работать в фоновом режиме, чтобы вы могли использовать терминал для других задач. В Docker такой режим называется «отсоединённым режимом».

Чтобы запустить контейнер в отсоединённом режиме, используется флаг -d. Кроме того, мы укажем флаг --name, чтобы задать контейнеру конкретное, легко запоминающееся имя.

Отсоединённый режим не меняет работу контейнера. Он меняет только способ подключения терминала к контейнеру. Сервис продолжает работать, а приглашение оболочки сразу возвращается.

Выполните следующую команду, чтобы запустить контейнер Nginx с именем my-nginx:

docker run --name my-nginx -d nginx

Разбор команды:

  • docker run: команда для создания и запуска нового контейнера.
  • --name my-nginx: присваивает контейнеру имя my-nginx. Если не указать имя, Docker назначит случайное имя, например happy_hopper.
  • -d: запускает контейнер в отсоединённом режиме (в фоновом режиме).
  • nginx: используемый образ. Docker сначала ищет его локально, а если образ не найден, загружает его из Docker Hub.

Вывод:

В терминале появится длинная строка символов. Это идентификатор контейнера (Container ID). Если приглашение командной строки сразу вернулось, это подтверждает, что контейнер работает в фоновом режиме.

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

Проверка состояния контейнера

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

Выполните следующую команду:

docker ps

Вы должны увидеть вывод, похожий на этот:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
a1b2c3d4e5f6   nginx     "/docker-entrypoint.…"   10 seconds ago   Up 10 seconds   80/tcp     my-nginx

Как читать вывод:

  • CONTAINER ID: уникальный идентификатор контейнера (сокращённая версия длинной строки, которую вы видели ранее).
  • IMAGE: запущенный образ (nginx).
  • STATUS: значение Up означает, что контейнер работает корректно.
  • NAMES: назначенное нами имя (my-nginx).

Если вы видите такую строку, веб-сервер успешно работает в фоновом режиме.

Вывод docker ps — один из основных рабочих видов Docker. Он показывает, какие контейнеры активны сейчас, из какого образа они созданы и как долго работают.

Остановка сервиса

После завершения работы с сервисом или перед его перенастройкой необходимо остановить работающий контейнер.

Команда docker stop отправляет контейнеру сигнал для корректного завершения работы. В качестве цели можно указать идентификатор контейнера или его имя. Поскольку мы назвали контейнер my-nginx, будем использовать имя.

Корректная остановка важна, потому что многим сервисам требуется время, чтобы закрыть файлы, освободить порты или завершить текущие операции. Остановка контейнера — это не просто «выключение»: основной процесс получает запрос на корректное завершение.

Выполните следующую команду:

docker stop my-nginx

В терминале появится my-nginx, что подтверждает получение команды.

Проверьте, что контейнер остановлен:

Снова выполните docker ps. Список должен быть пустым (или в нём не должно быть my-nginx).

Чтобы убедиться, что контейнер всё ещё существует, но остановлен, используйте флаг -a (all — все):

docker ps -a

Теперь в списке появится my-nginx со статусом Exited.

Удаление ресурсов

Остановка контейнера не удаляет его. Контейнер остаётся на диске, сохраняя свои журналы и конфигурацию. Это полезно, если позже вы захотите снова запустить его с помощью docker start.

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

Однако если работа с контейнером полностью завершена, его следует удалить, чтобы не загромождать систему. Команда docker rm удаляет остановленные контейнеры.

Выполните следующую команду, чтобы удалить my-nginx:

docker rm my-nginx

В терминале появится my-nginx, что подтверждает удаление.

Итоговая проверка:

В последний раз выполните docker ps -a. Вы увидите, что контейнер полностью исчез из списка.

Примечание: обычно нельзя удалить работающий контейнер с помощью docker rm. Сначала его нужно остановить, как мы сделали выше, либо использовать флаг -f (force — принудительно). Однако предпочтительный способ — корректно остановить контейнер.

Итоги

В этой лабораторной работе вы успешно освоили полный жизненный цикл контейнера Docker. Вы научились:

  • Запускать сервис в фоновом режиме с помощью docker run -d.
  • Проверять состояние активных контейнеров с помощью docker ps.
  • Корректно останавливать сервис с помощью docker stop.
  • Удалять остановленный контейнер с помощью docker rm, чтобы освободить ресурсы.

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