docker wordpress

Docker контейнеры для WordPress проекта

Недавно передо мной стояла задача перенести существующий сайт на wordpress в docker для переносимости и лёгкого деплоя на любой сервер, причём нужно было использовать alpine linux.

Во время работы сильно поднатаскался с docker, получил бесценный опыт. Спасибо заказчику за интересный таск =)

До этого я с docker не работал, и это был мой первый опыт. С alpine linux тоже не встречался. Вообще я не часто работаю с unix, а если и работаю, то обычно использую ubuntu. В отличие от «убунты» для alpine не так много примеров в сети, да и вообще он мало распространён (могу ошибаться), но у него есть одна классная отличительная особенность — он весит всего около 5 мб, поэтому контейнеры на его основе получаются легковесными, и это круто.

alpine-docker

Немного уточню задачу: «Поместить существующий проект на базе wordpress в два docker контейнера (1 для сайта, 1 для бд), и сделать так, чтобы его деплой требовал минимального количества команд». В идеале проект должен подниматься 1-2 консольными командами. Перенеся проект в докер, получим :

  • Супер переносимость
  • Лёгкий деплой
  • Простоту настройки
  • Возможность разработчику ничего не смыслящему в разворачивании проекта развернуть его
  • Зависимость от докера =)

Весь проект со всеми файлами лежит на гитхаб, там можно посмотреть структуру директорий и содержимое файлов.

Сначала сделаем контейнер для apache, в нём будет работать wordpress. Командами ставятся необходимые библиотеки, копируются конфиги и тд. Файлы сайта нужно положить в files/site.

Вот Dockerfile:

Также необходим контейнер с mysql. Dockerfile:

Docker-compose файл:

Файлы сайта и БД вынесены в Volume’s.

Для старта используется скрипт:

В корне лежит файл setUpWordpress.sh ( структура директорий в проекте на github ) в котором находятся команды для автоматического запуска проекта. Переходим в корневую директорию и даём права на файл:

После этого запускаем его :

Выполнение займёт некоторое время, после чего появится работающий проект по адресу http://dockerIp . Скрипт выполняем только 1 раз при сетапе сервера.

Важно не забыть дать права на папки с сайтом, иначе не будут загружаться файлы и тд.

Если нужно обновить сайт и бд

Положить новые файлы сайта в apache/files/site/

Положить новый бекап БД в корень и выполнить docker exec -i mysql mysql -u root dbName < backUp.sql

PS: Это мой первый опыт с докером, если есть какие то косяки, пишите в коментах, буду признателен.

Также можно почитать: