Кафедра ИСиТ УО ВГТУ
  • Специальности
    • Экономика электронного бизнеса
    • Информационные системы
    • Information Control Systems
  • Каталог
  • Сайт кафедры
  • Сервисы
    • GitLab
    • JupyterHub
    • Soft
  1. ЭЭБ
  2. СУВК
  3. Практика
  4. Лаб. работа “Развертывание среды и установка CMS с помощью Docker”
  • ЭЭБ
    • СУВК
      • Слайды
      • Теория
      • Практика
        • Лаб. работа “Анализ и выбор CMS”
        • Лаб. работа “Развертывание среды и установка CMS с помощью сервиса Segfault”
        • Лаб. работа “Развертывание среды и установка CMS с помощью Docker”
        • Лаб. работа “Развертывание среды и установка CMS на хостинге InfinityFree”
        • Лаб. работа “Базовая настройка сайта на WordPress”
        • Лаб. работа “Создание статических страниц и структуры сайта”
        • Лаб. работа “Работа с динамическим контентом”
        • Лаб. работа “Управление навигацией и виджетами”
        • Лаб. работа “Установка и настройка плагинов”
        • Лаб. работа “Работа с темами оформления”
    • ВТиП
      • Теория
        • Введение в веб технологии
        • Протокол HTTP
        • HTML
        • CSS
        • CSS фреймворки
        • JavaScript
        • jQuery
        • JSON
        • Архитектура и технологии создания веб-приложений
        • React
        • Маршрутизация в React
        • Создание серверных приложений с использованием Express.js
        • REST интерфейс и аутентификация Веб-приложений
        • Современные практики DevOps: от разработки до развертывания
        • Веб-безопасность: защита современных веб-приложений
      • Практика
        • Лаб. работа “Основы HTML и CSS”
        • Лаб. работа “Основы JavaScript”
        • Лаб. работа “Создание веб-приложений с использованием фреймворка Express.js”
        • Лаб. работа “Работа с базами данных в Express.js”
    • СТ
      • Теория
        • Введение в компьютерные сети
        • Топологии сетей
        • Кодирование и мультиплексирование
        • Стеки протоколов
        • Адресация в компьютерных сетях
        • Система доменных имен (DNS)
        • Программирование с использованием сокетов
        • Протокол HTTP
        • Введение в PHP
        • Работа с базами данных в PHP
        • Объектно-ориентированные возможности PHP
      • Практика
        • Программное обеспечение
        • Регистрация в JupyterHub
        • Лаб. работа “Почтовые протоколы”
        • Лаб. работа “Протокол FTP”
        • Лаб. работа “Протокол HTTP”
        • Лаб. работа “Программирование сетевых приложений с использованием сокетов”
        • Лаб. работа “Основы PHP”
        • Лаб работа “Массивы в PHP”

Содержание

  • Цель работы
  • Задачи
  • Ключевые навыки
  • Теоретическая часть
    • Что такое Docker?
    • Что такое Docker Compose?
    • Архитектура решения
    • Сравнение MySQL и MariaDB
    • Что такое Adminer?
  • Практическая часть
    • Шаг 1. Установка Docker
    • Шаг 2. Установка Docker Compose (отдельный пакет)
    • Шаг 3. Создание директории проекта
    • Шаг 4. Настройка docker-compose.yml
    • Шаг 5. Запуск контейнеров
    • Шаг 6. Установка WordPress
    • Шаг 7. Работа с Adminer
    • Шаг 8. Проверка работоспособности
    • Шаг 9. Управление контейнерами
    • Шаг 10. Резервное копирование базы данных
  • Дополнительные задания
    • Задание 1. Использование MySQL вместо MariaDB
    • Задание 2. Настройка HTTPS (самоподписанный сертификат)
    • Задание 3. Масштабирование WordPress
    • Задание 4. Настройка постоянных ссылок (ЧПУ)
  • Требования к отчёту
  • Критерии оценки
  • Контрольные вопросы
  • Возможные проблемы и решения
    • Проблема: Контейнеры не запускаются
    • Проблема: WordPress не подключается к БД
    • Проблема: Порт занят
    • Проблема: Данные не сохраняются после перезапуска
    • Проблема: Нет доступа к Adminer
  • Рекомендуемые источники
    • Официальная документация
    • Дополнительные материалы
  • Приложение А. Полный список команд
  • Приложение Б. Структура директорий
  • Приложение В. Переменные окружения WordPress
  1. ЭЭБ
  2. СУВК
  3. Практика
  4. Лаб. работа “Развертывание среды и установка CMS с помощью Docker”

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

Системы управления веб-контентом
Практика
Автор

Бизюк Андрей

Дата публикации

13 апреля 2026 г.

Цель работы

Получить практический навык развёртывания 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

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

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

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

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

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

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

Что такое Adminer?

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

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

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

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

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

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

sudo apt update

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

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

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

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

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

echo "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:

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

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

docker --version
docker-compose --version

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

sudo usermod -aG docker $USER

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


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

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

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

docker-compose --version

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

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

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

docker-compose --version

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

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

mkdir wordpress-docker
cd wordpress-docker

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

nano docker-compose.yml

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

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

version: '3.8'

services:
  # База данных MariaDB
  db:
    image: mariadb:10.11
    container_name: wordpress_db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wp_user
      MYSQL_PASSWORD: wp_password
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - wp_network
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 10s
      timeout: 5s
      retries: 5

  # WordPress
  wordpress:
    image: wordpress:6.4-php8.2-apache
    container_name: wordpress
    restart: always
    depends_on:
      db:
        condition: service_healthy
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wp_user
      WORDPRESS_DB_PASSWORD: wp_password
    volumes:
      - wordpress_data:/var/www/html
    ports:
      - "8080:80"
    networks:
      - wp_network

  # Adminer для администрирования БД
  adminer:
    image: adminer:4.8.1
    container_name: adminer
    restart: always
    depends_on:
      - db
    ports:
      - "8081:8080"
    networks:
      - wp_network

networks:
  wp_network:
    driver: bridge

volumes:
  db_data:
  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. Запустите все контейнеры:

docker-compose up -d

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

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

docker-compose ps

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

docker-compose logs -f

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

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

docker ps

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


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

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

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

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

http://ВАШ-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 в браузере:

http://ВАШ-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:

http://ВАШ-IP:8080

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

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

http://ВАШ-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. Остановка контейнеров:

docker-compose stop

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

docker-compose start

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

docker-compose restart

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

docker-compose down

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

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

docker-compose down -v

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

docker-compose logs wordpress
docker-compose logs db
docker-compose logs adminer

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

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

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

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

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

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

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

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

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

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

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

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

docker-compose down
docker-compose up -d

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

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

  1. Создайте самоподписанный сертификат:
mkdir certs
openssl 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:

docker-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 Compose 15 Корректная установка
Настройка docker-compose.yml 20 Правильная конфигурация сервисов
Запуск контейнеров 15 Все контейнеры запущены
Установка WordPress 20 WordPress работает
Работа с Adminer 15 Подключение и управление БД
Управление контейнерами 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?

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

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

Решение:

docker-compose logs

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

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

Решение:

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

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

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

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

Решение:

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

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

Решение:

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

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

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

Решение:

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

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

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


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

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

  • Docker: https://docs.docker.com/
  • Docker Compose: https://docs.docker.com/compose/
  • WordPress Docker Image: https://hub.docker.com/_/wordpress/
  • MariaDB Docker: https://hub.docker.com/_/mariadb/
  • Adminer: https://www.adminer.org/

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

  • Лучшие практики Docker: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
  • Docker Compose руководство: https://docs.docker.com/compose/gettingstarted/

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

# Установка Docker
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "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
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# Установка Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# Запуск проекта
mkdir wordpress-docker
cd wordpress-docker
nano docker-compose.yml
docker-compose up -d

# Проверка статуса
docker-compose ps
docker ps

# Просмотр логов
docker-compose logs -f

# Установка WordPress
# Откройте http://ВАШ-IP:8080

# Доступ к Adminer
# Откройте http://ВАШ-IP:8081
# Система: MySQL
# Сервер: db
# Пользователь: wp_user
# Пароль: wp_password
# База данных: wordpress

# Резервное копирование
docker-compose exec -T db mysqldump -u wp_user -pwp_password wordpress > backup.sql

# Остановка
docker-compose down

# Полное удаление
docker-compose down -v

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

wordpress-docker/
├── docker-compose.yml
├── wordpress/          # (опционально) локальные файлы WordPress
├── backup-YYYYMMDD.sql # резервные копии БД
└── 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
Наверх
Лаб. работа “Развертывание среды и установка CMS с помощью сервиса Segfault”
Лаб. работа “Развертывание среды и установка CMS на хостинге InfinityFree”