Лаб. работа “Развертывание среды и установка 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.
Преимущества:
- Одной командой запускается весь стек сервисов
- Простое управление зависимостями между сервисами
- Лёгкое масштабирование
- Переносимость конфигурации
Архитектура решения
Компоненты системы:
- Браузер клиента — отправляет HTTP-запросы к WordPress и Adminer
- WordPress — контейнер с CMS (официальный образ)
- MySQL/MariaDB — контейнер с базой данных
- Adminer — веб-интерфейс для администрирования БД
- Docker Network — виртуальная сеть для взаимодействия контейнеров
- 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. Обновите список пакетов:
1.2. Установите зависимости:
1.3. Добавьте ключ GPG Docker:
1.4. Добавьте репозиторий Docker:
1.5. Установите Docker:
1.6. Проверьте установку:
Примечание: Для запуска Docker без sudo добавьте пользователя в группу docker:
После этого перелогиньтесь или выполните
newgrp docker
Шаг 2. Установка Docker Compose (отдельный пакет)
Примечание: Если после предыдущего шага
docker-composeнедоступен как отдельная команда, установите его вручную.
2.1. Проверьте наличие docker-compose:
2.2. Если команда недоступна, установите docker-compose:
2.3. Проверьте установку:
Шаг 3. Создание директории проекта
3.1. Создайте директорию для проекта:
3.2. Создайте файл конфигурации:
Шаг 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— пользователь для WordPressdb_data— том для сохранения данных между перезапусками- wordpress — контейнер с WordPress
- Зависит от
db(ждёт готовности БД)- Порт 8080 — для доступа к сайту
wordpress_data— том для файлов WordPress- adminer — веб-интерфейс для БД
- Порт 8081 — для доступа к Adminer
Шаг 5. Запуск контейнеров
5.1. Запустите все контейнеры:
Ключ
-d(detached) — запуск в фоновом режиме
5.2. Проверьте статус контейнеров:
5.3. Просмотрите логи:
Ожидаемый вывод: Контейнеры должны перейти в состояние “running”
5.4. Проверьте запущенные контейнеры:
Должны быть три контейнера: wordpress_db, wordpress, adminer
Шаг 6. Установка WordPress
6.1. Определите IP-адрес вашего компьютера:
6.2. Откройте браузер и перейдите по адресу:
http://ВАШ-IP:8080
Пример: http://192.168.1.100:8080
6.3. Запустится мастер установки WordPress:
- Выберите язык → “Продолжить”
- Заполните форму:
| Поле | Значение |
|---|---|
| Название сайта | Мой WordPress на Docker |
| Имя пользователя | admin |
| Пароль | (придумайте надёжный пароль) |
| Ваш email | ваш@email.com |
| Поисковая видимость | ☐ (снимите галочку) |
- Нажмите “Установить WordPress”
- После установки нажмите “Войти”
- Введите логин и пароль
Шаг 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:
- Перейдите в админ-панель:
http://ВАШ-IP:8080/wp-admin - Записи → Добавить новую
- Заголовок: “Запись из Docker-контейнера”
- Текст: “Этот сайт работает на WordPress, развёрнутом с помощью Docker Compose!”
- Нажмите “Опубликовать”
8.4. Проверьте данные в Adminer:
- Войдите в Adminer
- Выберите базу данных wordpress
- Откройте таблицу wp_posts
- Найдите созданную запись
Шаг 9. Управление контейнерами
9.1. Остановка контейнеров:
9.2. Запуск контейнеров:
9.3. Перезапуск контейнеров:
9.4. Остановка и удаление контейнеров:
Принимание: Данные в volumes сохранятся
9.5. Полное удаление (включая данные):
9.6. Просмотр логов конкретного сервиса:
Шаг 10. Резервное копирование базы данных
10.1. Создайте резервную копию БД:
10.2. Восстановление из резервной копии:
10.3. Резервное копирование файлов WordPress:
Дополнительные задания
Задание 1. Использование MySQL вместо MariaDB
Измените docker-compose.yml, заменив образ MariaDB на MySQL:
Перезапустите контейнеры:
Задание 2. Настройка HTTPS (самоподписанный сертификат)
Добавьте обратный прокси с HTTPS:
- Создайте самоподписанный сертификат:
- Добавьте nginx-proxy в docker-compose.yml
Задание 3. Масштабирование WordPress
Запустите несколько экземпляров WordPress:
Задание 4. Настройка постоянных ссылок (ЧПУ)
- В админ-панели: Настройки → Постоянные ссылки
- Выберите “Название записи”
- Сохраните изменения
- Добавьте .htaccess в volume
Требования к отчёту
Отчёт должен содержать:
- Титульный лист — название работы, ФИО, группа, дата
- Введение — цель и задачи работы (1 страница)
- Ход работы — пошаговое описание с скриншотами:
- Установка Docker и Docker Compose
- Содержимое docker-compose.yml
- Запуск контейнеров
- Установка WordPress (скриншоты)
- Интерфейс Adminer
- Структура базы данных
- Архитектура решения — схема компонентов
- Вывод — полученные навыки, преимущества и недостатки Docker Compose (1 страница)
- Список источников (минимум 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: неудовлетворительно
Контрольные вопросы
- Что такое Docker и какие преимущества он даёт?
- Чем отличаются образ и контейнер?
- Для чего используется Docker Compose?
- Какие сервисы входят в стек и как они связаны?
- Что такое volumes и зачем они нужны?
- Чем MySQL отличается от MariaDB?
- Для чего используется Adminer?
- Как обеспечить персистентность данных в Docker?
- Что такое Docker Network и как работает связь между контейнерами?
- Как выполнить резервное копирование БД в Docker?
Возможные проблемы и решения
Проблема: Контейнеры не запускаются
Решение:
Проверьте логи на наличие ошибок
Проблема: WordPress не подключается к БД
Решение:
Проверьте, что контейнер db запущен и healthy:
Проверьте переменные окружения в docker-compose.yml
Дождитесь полной инициализации БД (может занять 1-2 минуты)
Проблема: Порт занят
Решение:
Проблема: Данные не сохраняются после перезапуска
Решение:
Проверьте, что используются volumes:
Не используйте
docker-compose down -vдля удаления томов
Проблема: Нет доступа к Adminer
Решение:
Проверьте, что контейнер 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 |