📝 Задания урока 04

Практические задания из лекции — выполняйте самостоятельно, решения в следующем разделе.

⚡ Три задания

  1. Multistage vs Single-stage: собрать одно Flask-приложение двумя Dockerfile, сравнить размеры образов
  2. MediaWiki + MariaDB: запустить локальную Википедию через Docker Compose
  3. WordPress + MySQL: запустить WordPress с базой данных через Docker Compose

Задание 1: Сравнение Multistage vs Single-stage образов

Из практической работы лекции.

Цель: убедиться на практике, что multistage build уменьшает размер финального образа. Сравнить два образа одного приложения.

Шаги

  1. Создайте рабочую директорию и следующие файлы:

    • app.py — простое Flask-приложение (возвращает JSON)
    • requirements.txt — зависимости: Flask, Werkzeug
    • Dockerfile.multistage — двухстадийный Dockerfile
    • Dockerfile.singlestage — одностадийный Dockerfile (без разделения)
  2. Выполните сборку с multi-stage:
    docker build -t myapp:multistage -f Dockerfile.multistage .
  3. Выполните сборку без multi-stage:
    docker build -t myapp:singlestage -f Dockerfile.singlestage .
  4. Сравните размеры образов:
    docker images myapp:multistage
    docker images myapp:singlestage
  5. Запустите оба контейнера:
    docker run -d --name multistage_app -p 5000:5000 myapp:multistage
    docker run -d --name singlestage_app -p 5001:5001 myapp:singlestage
  6. Откройте http://localhost:5000 и http://localhost:5001 — оба должны работать одинаково.
  7. Просмотрите логи:
    docker logs multistage_app
    docker logs singlestage_app

Ожидаемый результат: multistage-образ значительно меньше (в 2–3 раза). Поведение приложений идентично.

Задание 2: Запуск локальной Википедии (MediaWiki + MariaDB)

Из задания для закрепления лекции.

Цель: запустить MediaWiki с базой данных MariaDB через Docker Compose. После первоначальной настройки Вики должна быть доступна по адресу http://localhost:8080.

Шаги

  1. Создайте директорию mediawiki-compose и в ней файл docker-compose.yml.
  2. Опишите два сервиса:
    • mediawiki: образ mediawiki, порт 8080:80, restart: always
    • database: образ mariadb, переменные окружения для настройки БД, restart: always
  3. Запустите приложение: docker compose up -d
  4. Перейдите по адресу http://localhost:8080 и завершите первоначальную настройку MediaWiki.
  5. Убедитесь, что сервисы работают: docker compose ps
  6. Посмотрите логи: docker compose logs mediawiki

Подсказка: используйте современный стиль — без version:, без links:, сеть организуйте через networks:.

Задание 3: Запуск WordPress + MySQL

Из задания для закрепления лекции.

Цель: запустить WordPress с базой данных MySQL. WordPress должен быть доступен по адресу http://localhost:80 (или http://localhost:8081).

Шаги

  1. Создайте директорию wordpress-compose и файл docker-compose.yml.
  2. Опишите два сервиса:
    • db: образ mysql:8.0, тома для данных, переменные окружения
    • wordpress: образ wordpress:latest, зависимость от db, переменные окружения для подключения к БД
  3. Добавьте healthcheck для MySQL и depends_on: condition: service_healthy для WordPress (современный подход).
  4. Запустите: docker compose up -d
  5. Перейдите по адресу WordPress и завершите установку.
  6. Проверьте, что данные сохраняются: остановите и снова запустите стек. Данные должны сохраниться.

Подсказка: обратите внимание, что WORDPRESS_DB_HOST должен содержать имя сервиса БД и порт (например, db:3306).

Решения всех заданий — в разделе ✅ Решения.