Это машинный перевод текста, который может содержать ошибки!
Docker как автоматизация
С помощью Compose вы описываете желаемую конфигурацию в файле и позволяете Docker создавать контейнеры. Здесь вы начинаете с веб-сервера Nginx из готового образа. Затем вы можете добавить службу и проверить то, что создается автоматически.
Перед началом работы: Docker Engine и Compose из раздела [[Docker Level 1 - Ком i gang|Docker Level 1]] должны работать. Выполните команду docker compose version в виртуальной машине Linux. Вам не нужны приложение Flask, файл Dockerfile или учетная запись GitHub. Справочник по YAML предоставляет поддержку отступов и списков; его можно прочитать без создания workflow на GitHub.
Сначала выполните «Задание 1» и проверьте ответ веб-сервера. Обновление — это справочный материал для последующей работы. «Задание 2» позволяет вам попробовать несколько служб в одном проекте.
Что такое Docker Compose?
С помощью Docker Compose вы описываете одну или несколько служб в файле. В этом упражнении каждая служба запускает один контейнер. Здесь используется файл docker-compose.yml.
Файлы compose.yaml и docker-compose.yml поддерживаются Compose как допустимые имена. Используйте один из них в папке проекта и выполняйте команды из этой папки. Здесь используется файл docker-compose.yml.
services:
web:
image: nginx:latest
ports:
- "127.0.0.1:8083:80"
Одна команда настраивает всё:
docker compose up -d
Файл Compose может быть использован на другом сервере, но вам также необходимо переместить необходимые данные и локальные файлы и настроить пароли, сеть и другие параметры. Теги, такие как latest, могут указывать на новый образ в будущем. Если сборки должны быть идентичными, вы также обязаны зафиксировать используемый образ.
Почему это автоматизация?
Подумайте о разнице:
| Ручная настройка | С помощью Docker Compose |
|---|---|
| Установите Nginx вручную | image: nginx:latest |
| Настройте порты | ports: "80:80" |
| Установите Grafana вручную | image: grafana/grafana:latest |
| Задокументируйте все шаги | Опишите желаемую конфигурацию в файле Compose |
| Повторите всё на следующем сервере | docker compose up -d |
Файл Compose является частью технической документации и описывает желаемую конфигурацию. Фактическое состояние проверяется с помощью docker compose ps и журналов. Обоснования, результаты тестирования и процедуры резервного копирования должны быть задокументированы дополнительно.
Прочитайте небольшой пример
services собирает сервисы. web — это имя, которое мы даём веб-серверу. image выбирает готовый образ, а ports связывает порт 8083 на обратном адресе ВМ с портом 80 в контейнере. Поэтому вы тестируете непосредственно из виртуальной машины. Сборка из исходного кода будет рассмотрена в разделе [[Docker Level 2 - Dockerfile и Compose|Docker Level 2]].
Полезные команды Docker
| Команда | Что она делает |
|---|---|
docker compose up -d | Запускает все сервисы в фоновом режиме |
docker compose down | Останавливает и удаляет контейнеры проекта и сеть |
docker compose logs -f | Просматривает логи в реальном времени |
docker compose pull | Получает образы, на которые указывают теги проекта |
docker compose restart | Перезапускает контейнеры проекта без смены образа |
docker ps | Показывает работающие контейнеры |
Когда сервису требуется хранилище
В разделе [[Containerbruk Level 2 - Bevar data utanfor containeren|Сохранение данных вне контейнера]] описаны механизмы bind mount и именованных volumes (объёмов). В упражнении с Nginx ниже не требуются база данных или подключение к хранилищу. Используйте поддержку хранения перед расширением проекта сервисом, который должен сохранять данные.
Обновление сервисов
Обновление сервиса Docker просто:
# Получить последнюю версию
docker compose pull
# Перезапустить с новой версией
docker compose up -d
Команда up -d применяет новый образ путём пересоздания контейнера. Проверьте работоспособность службы после обновления; новая версия образа может потребовать изменений в конфигурации или данных.
Задание 1 — Настройка Nginx с помощью Docker Compose
Работайте в консоли виртуальной машины. Создайте новую папку, чтобы это упражнение не изменяло другой проект Compose:
mkdir compose-ovelse
cd compose-ovelse
nano docker-compose.yml
Если папка уже существует, откройте её и проверьте содержимое перед продолжением. Запишите пример Nginx из раздела «Что такое Docker Compose?» в файл. Сохраните с помощью Ctrl+O, подтвердите нажатием Enter и завершите работу Ctrl+X. Проверьте и запустите:
docker compose config --quiet
docker compose up -d
docker compose ps
curl http://127.0.0.1:8083
Команда config --quiet должна завершаться без сообщений об ошибках. Если вы исправите ошибку в файле, выполните проверку повторно перед запуском. Команда ps должна показывать процесс web как работающий, а команда curl должна отображать содержимое Nginx с текстом Welcome to nginx!.
Если порт занят, выберите другой свободный порт хоста в файле и используйте тот же порт в команде curl. Если контейнер останавливается, прочитайте вывод команды docker compose logs web. Не начинайте новый проект в случайной папке для повторных попыток.
Объясните перед продолжением: Какой файл описывает сервис и что создала команда docker compose up -d? Остановите проект командой docker compose stop, запустите его снова командой docker compose up -d и повторяйте тестирование с помощью curl. Если вы используете эту страницу как поддержку при выполнении другой задачи, теперь можно вернуться к ней.
Задание 2 — Добавление службы
Расширьте docker-compose.yml из задания 1 дополнительной службой. Например:
- Uptime Kuma на порту 3001
- Grafana на порту 3000
Используйте отдельное имя службы в секции services, с тем же уровнем отступа, что и у web. Изучите официальный пример Docker для этой службы, чтобы определить необходимый образ, порт и хранилище данных. Используйте свободный порт хоста и ограничьте доступ к учебной среде. Тег latest не является фиксированной версией.
Сначала выполните команду docker compose config --quiet. Затем запустите контейнеры командой docker compose up -d и убедитесь, что обе службы работают одновременно. Если вы используете привязку обратного адреса (reverse binding), как это было сделано для Nginx, проверяйте порт из виртуальной машины; доступ с другого устройства требует согласования адреса, порта и сетевых настроек.
Покажите вывод команды docker compose ps и ожидаемый ответ каждой службы по адресу и порту, которые вы фактически настроили. Устно или письменно объясните, что Compose создает автоматически, а что вам все еще нужно настроить самостоятельно, например данные, конфигурацию и резервное копирование. Если одна служба останавливается, просмотрите логи командой docker compose logs перед изменением конфигурации. Остановите отслеживание логов нажатием Ctrl+C.
Резюме
- Docker Compose позволяет определить несколько сервисов в одном файле
- Файл Compose является одновременно конфигурацией и документацией
- Обновление выполняется командой
docker compose pull+docker compose up -d - Docker упрощает перенос служб между серверами
Источники: Docker Compose: первый проект и Сервисы Compose.