Лаб. работа "Развертывание среды и установка CMS с помощью Docker"

Цель работы

Получить практический навык развёртывания WordPress с использованием контейнеризации (Docker Compose), освоить работу с MySQL/MariaDB и Adminer для администрирования базы данных.

Задачи

  • Установить Docker и Docker Compose
  • Создать конфигурационный файл docker-compose.yml
  • Запустить стек контейнеров (WordPress, MySQL/MariaDB, Adminer)
  • Настроить подключение к базе данных
  • Выполнить установку WordPress
  • Освоить базовое администрирование БД через Adminer

Ключевые навыки

  • Работа с Docker-контейнерами
  • Настройка Docker Compose
  • Управление сервисами в контейнерах
  • Работа с MySQL/MariaDB
  • Использование Adminer для администрирования БД

Теоретическая часть

Что такое Docker?

Docker — платформа для разработки, доставки и запуска приложений в контейнерах. Контейнеры изолируют приложение и его зависимости от инфраструктуры.

Основные понятия:

  • Образ (Image) — шаблон для создания контейнера
  • Контейнер (Container) — запущенный экземпляр образа
  • Dockerfile — файл с инструкциями для сборки образа
  • Docker Compose — инструмент для определения и запуска многоконтейнерных приложений

Что такое Docker Compose?

Docker Compose — инструмент для определения и запуска приложений, состоящих из нескольких контейнеров. Конфигурация описывается в файле docker-compose.yml.

Преимущества:

  • Одной командой запускается весь стек сервисов
  • Простое управление зависимостями между сервисами
  • Лёгкое масштабирование
  • Переносимость конфигурации

Архитектура решения

Архитектура WordPress + Docker Compose

Компоненты системы:

  1. Браузер клиента — отправляет HTTP-запросы к WordPress и Adminer
  2. WordPress — контейнер с CMS (официальный образ)
  3. MySQL/MariaDB — контейнер с базой данных
  4. Adminer — веб-интерфейс для администрирования БД
  5. Docker Network — виртуальная сеть для взаимодействия контейнеров
  6. Volumes — постоянное хранение данных (БД, файлы WordPress)

Сравнение MySQL и MariaDB

ХарактеристикаMySQLMariaDB
РазработчикOracleMariaDB Corporation
ЛицензияGPL (ограничения)GPL (полная)
ПроизводительностьХорошаяЧасто лучше
СовместимостьСтандартВысокая (форк MySQL)
ОсобенностиЗакрытые плагиныРасширенные возможности

В данной работе используется MariaDB как полностью совместимая, свободная и производительная альтернатива MySQL.

Что такое Adminer?

Adminer — веб-интерфейс для администрирования баз данных (MySQL, PostgreSQL, SQLite, MongoDB и др.).

Преимущества:

  • Простой и лёгкий интерфейс
  • Один PHP-файл
  • Поддержка множества СУБД
  • Удобное управление данными

Практическая часть

Шаг 1. Установка Docker

1.1. Обновите список пакетов:

1sudo apt update

1.2. Установите зависимости:

1sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release

1.3. Добавьте ключ GPG Docker:

1curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

1.4. Добавьте репозиторий Docker:

1echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

1.5. Установите Docker:

1sudo apt update
2sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

1.6. Проверьте установку:

1docker --version
2docker-compose --version

Примечание: Для запуска Docker без sudo добавьте пользователя в группу docker:

1sudo usermod -aG docker $USER

После этого перелогиньтесь или выполните newgrp docker


Шаг 2. Установка Docker Compose (отдельный пакет)

Примечание: Если после предыдущего шага docker-compose недоступен как отдельная команда, установите его вручную.

2.1. Проверьте наличие docker-compose:

1docker-compose --version

2.2. Если команда недоступна, установите docker-compose:

1sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2sudo chmod +x /usr/local/bin/docker-compose

2.3. Проверьте установку:

1docker-compose --version

Шаг 3. Создание директории проекта

3.1. Создайте директорию для проекта:

1mkdir wordpress-docker
2cd wordpress-docker

3.2. Создайте файл конфигурации:

1nano docker-compose.yml

Шаг 4. Настройка docker-compose.yml

4.1. Добавьте следующую конфигурацию:

 1version: '3.8'
 2
 3services:
 4  # База данных MariaDB
 5  db:
 6    image: mariadb:10.11
 7    container_name: wordpress_db
 8    restart: always
 9    environment:
10      MYSQL_ROOT_PASSWORD: root_password
11      MYSQL_DATABASE: wordpress
12      MYSQL_USER: wp_user
13      MYSQL_PASSWORD: wp_password
14    volumes:
15      - db_data:/var/lib/mysql
16    networks:
17      - wp_network
18    healthcheck:
19      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
20      interval: 10s
21      timeout: 5s
22      retries: 5
23
24  # WordPress
25  wordpress:
26    image: wordpress:6.4-php8.2-apache
27    container_name: wordpress
28    restart: always
29    depends_on:
30      db:
31        condition: service_healthy
32    environment:
33      WORDPRESS_DB_HOST: db:3306
34      WORDPRESS_DB_NAME: wordpress
35      WORDPRESS_DB_USER: wp_user
36      WORDPRESS_DB_PASSWORD: wp_password
37    volumes:
38      - wordpress_data:/var/www/html
39    ports:
40      - "8080:80"
41    networks:
42      - wp_network
43
44  # Adminer для администрирования БД
45  adminer:
46    image: adminer:4.8.1
47    container_name: adminer
48    restart: always
49    depends_on:
50      - db
51    ports:
52      - "8081:8080"
53    networks:
54      - wp_network
55
56networks:
57  wp_network:
58    driver: bridge
59
60volumes:
61  db_data:
62  wordpress_data:

Пояснения к конфигурации:

  • db — контейнер с MariaDB 10.11

    • MYSQL_ROOT_PASSWORD — пароль root (нужен для создания БД)
    • MYSQL_DATABASE — создаваемая БД
    • MYSQL_USER/MYSQL_PASSWORD — пользователь для WordPress
    • db_data — том для сохранения данных между перезапусками
  • wordpress — контейнер с WordPress

    • Зависит от db (ждёт готовности БД)
    • Порт 8080 — для доступа к сайту
    • wordpress_data — том для файлов WordPress
  • adminer — веб-интерфейс для БД

    • Порт 8081 — для доступа к Adminer

Шаг 5. Запуск контейнеров

5.1. Запустите все контейнеры:

1docker-compose up -d

Ключ -d (detached) — запуск в фоновом режиме

5.2. Проверьте статус контейнеров:

1docker-compose ps

5.3. Просмотрите логи:

1docker-compose logs -f

Ожидаемый вывод: Контейнеры должны перейти в состояние “running”

5.4. Проверьте запущенные контейнеры:

1docker ps

Должны быть три контейнера: wordpress_db, wordpress, adminer


Шаг 6. Установка WordPress

6.1. Определите IP-адрес вашего компьютера:

1hostname -I | awk '{print $1}'

6.2. Откройте браузер и перейдите по адресу:

1http://ВАШ-IP:8080

Пример: http://192.168.1.100:8080

6.3. Запустится мастер установки WordPress:

  1. Выберите язык → “Продолжить”
  2. Заполните форму:
ПолеЗначение
Название сайтаМой WordPress на Docker
Имя пользователяadmin
Пароль(придумайте надёжный пароль)
Ваш emailваш@email.com
Поисковая видимость☐ (снимите галочку)
  1. Нажмите “Установить WordPress”
  2. После установки нажмите “Войти”
  3. Введите логин и пароль

Шаг 7. Работа с Adminer

7.1. Откройте Adminer в браузере:

1http://ВАШ-IP:8081

Пример: http://192.168.1.100:8081

7.2. Войдите в Adminer:

ПолеЗначение
СистемаMySQL
Серверdb
Пользовательwp_user
Парольwp_password
База данныхwordpress

Примечание: В поле “Сервер” укажите db — это имя контейнера базы данных в Docker-сети

7.3. После входа вы увидите:

  • Список таблиц базы данных WordPress
  • Структура таблиц (wp_posts, wp_users, wp_options и др.)
  • Возможность выполнять SQL-запросы
  • Управление данными (добавление, редактирование, удаление)

7.4. Изучите структуру БД:

  • wp_posts — записи и страницы
  • wp_users — пользователи
  • wp_options — настройки сайта
  • wp_terms — таксономии (рубрики, метки)

Шаг 8. Проверка работоспособности

8.1. Проверьте доступность WordPress:

1http://ВАШ-IP:8080

Должна отобразиться главная страница WordPress

8.2. Проверьте доступность Adminer:

1http://ВАШ-IP:8081

Должен отобразиться интерфейс Adminer

8.3. Создайте тестовую запись в WordPress:

  1. Перейдите в админ-панель: http://ВАШ-IP:8080/wp-admin
  2. Записи → Добавить новую
  3. Заголовок: “Запись из Docker-контейнера”
  4. Текст: “Этот сайт работает на WordPress, развёрнутом с помощью Docker Compose!”
  5. Нажмите “Опубликовать”

8.4. Проверьте данные в Adminer:

  1. Войдите в Adminer
  2. Выберите базу данных wordpress
  3. Откройте таблицу wp_posts
  4. Найдите созданную запись

Шаг 9. Управление контейнерами

9.1. Остановка контейнеров:

1docker-compose stop

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

1docker-compose start

9.3. Перезапуск контейнеров:

1docker-compose restart

9.4. Остановка и удаление контейнеров:

1docker-compose down

Принимание: Данные в volumes сохранятся

9.5. Полное удаление (включая данные):

1docker-compose down -v

9.6. Просмотр логов конкретного сервиса:

1docker-compose logs wordpress
2docker-compose logs db
3docker-compose logs adminer

Шаг 10. Резервное копирование базы данных

10.1. Создайте резервную копию БД:

1docker-compose exec -T db mysqldump -u wp_user -pwp_password wordpress > backup-$(date +%Y%m%d).sql

10.2. Восстановление из резервной копии:

1docker-compose exec -T db mysql -u wp_user -pwp_password wordpress < backup-20240101.sql

10.3. Резервное копирование файлов WordPress:

1docker cp wordpress:/var/www/html ./wordpress-backup

Дополнительные задания

Задание 1. Использование MySQL вместо MariaDB

Измените docker-compose.yml, заменив образ MariaDB на MySQL:

1db:
2  image: mysql:8.0
3  # ... остальные настройки

Перезапустите контейнеры:

1docker-compose down
2docker-compose up -d

Задание 2. Настройка HTTPS (самоподписанный сертификат)

Добавьте обратный прокси с HTTPS:

  1. Создайте самоподписанный сертификат:
1mkdir certs
2openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout certs/key.pem -out certs/cert.pem
  1. Добавьте nginx-proxy в docker-compose.yml

Задание 3. Масштабирование WordPress

Запустите несколько экземпляров WordPress:

1docker-compose up -d --scale wordpress=3

Задание 4. Настройка постоянных ссылок (ЧПУ)

  1. В админ-панели: Настройки → Постоянные ссылки
  2. Выберите “Название записи”
  3. Сохраните изменения
  4. Добавьте .htaccess в volume

Требования к отчёту

Отчёт должен содержать:

  1. Титульный лист — название работы, ФИО, группа, дата
  2. Введение — цель и задачи работы (1 страница)
  3. Ход работы — пошаговое описание с скриншотами:
    • Установка Docker и Docker Compose
    • Содержимое docker-compose.yml
    • Запуск контейнеров
    • Установка WordPress (скриншоты)
    • Интерфейс Adminer
    • Структура базы данных
  4. Архитектура решения — схема компонентов
  5. Вывод — полученные навыки, преимущества и недостатки Docker Compose (1 страница)
  6. Список источников (минимум 3)

Объём: 6-10 страниц
Формат: PDF или DOCX


Критерии оценки

КритерийБаллыОписание
Установка Docker и Docker Compose15Корректная установка
Настройка docker-compose.yml20Правильная конфигурация сервисов
Запуск контейнеров15Все контейнеры запущены
Установка WordPress20WordPress работает
Работа с Adminer15Подключение и управление БД
Управление контейнерами10Остановка, запуск, перезапуск
Оформление отчёта5Структура и скриншоты

Максимальный балл: 100

Шкала:

  • 90-100: отлично
  • 75-89: хорошо
  • 60-74: удовлетворительно
  • менее 60: неудовлетворительно

Контрольные вопросы

  1. Что такое Docker и какие преимущества он даёт?
  2. Чем отличаются образ и контейнер?
  3. Для чего используется Docker Compose?
  4. Какие сервисы входят в стек и как они связаны?
  5. Что такое volumes и зачем они нужны?
  6. Чем MySQL отличается от MariaDB?
  7. Для чего используется Adminer?
  8. Как обеспечить персистентность данных в Docker?
  9. Что такое Docker Network и как работает связь между контейнерами?
  10. Как выполнить резервное копирование БД в Docker?

Возможные проблемы и решения

Проблема: Контейнеры не запускаются

Решение:

1docker-compose logs

Проверьте логи на наличие ошибок

Проблема: WordPress не подключается к БД

Решение:

  • Проверьте, что контейнер db запущен и healthy:

    1docker-compose ps
    
  • Проверьте переменные окружения в docker-compose.yml

  • Дождитесь полной инициализации БД (может занять 1-2 минуты)

Проблема: Порт занят

Решение:

1# Найдите процесс, занявший порт
2sudo lsof -i :8080
3# Измените порт в docker-compose.yml
4ports:
5  - "8082:80"

Проблема: Данные не сохраняются после перезапуска

Решение:

  • Проверьте, что используются volumes:

    1docker volume ls
    
  • Не используйте docker-compose down -v для удаления томов

Проблема: Нет доступа к Adminer

Решение:

  • Проверьте, что контейнер adminer запущен:

    1docker ps | grep adminer
    
  • Проверьте порт в docker-compose.yml

  • Используйте правильные учётные данные для входа


Рекомендуемые источники

Официальная документация

Дополнительные материалы


Приложение А. Полный список команд

 1# Установка Docker
 2sudo apt update
 3sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
 4curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
 5echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
 6sudo apt update
 7sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
 8
 9# Установка Docker Compose
10sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
11sudo chmod +x /usr/local/bin/docker-compose
12
13# Запуск проекта
14mkdir wordpress-docker
15cd wordpress-docker
16nano docker-compose.yml
17docker-compose up -d
18
19# Проверка статуса
20docker-compose ps
21docker ps
22
23# Просмотр логов
24docker-compose logs -f
25
26# Установка WordPress
27# Откройте http://ВАШ-IP:8080
28
29# Доступ к Adminer
30# Откройте http://ВАШ-IP:8081
31# Система: MySQL
32# Сервер: db
33# Пользователь: wp_user
34# Пароль: wp_password
35# База данных: wordpress
36
37# Резервное копирование
38docker-compose exec -T db mysqldump -u wp_user -pwp_password wordpress > backup.sql
39
40# Остановка
41docker-compose down
42
43# Полное удаление
44docker-compose down -v

Приложение Б. Структура директорий

1wordpress-docker/
2├── docker-compose.yml
3├── wordpress/          # (опционально) локальные файлы WordPress
4├── backup-YYYYMMDD.sql # резервные копии БД
5└── certs/              # (опционально) SSL-сертификаты

Приложение В. Переменные окружения WordPress

ПеременнаяОписаниеПример
WORDPRESS_DB_HOSTХост базы данныхdb:3306
WORDPRESS_DB_NAMEИмя базы данныхwordpress
WORDPRESS_DB_USERПользователь БДwp_user
WORDPRESS_DB_PASSWORDПароль БДwp_password
WORDPRESS_TABLE_PREFIXПрефикс таблицwp_
WORDPRESS_DEBUGРежим отладкиtrue/false
← Лаб. работа "Развертывание среды и установка … Лаб. работа "Развертывание среды и установка … →