Часть 1.1. Docker. Введение.
Часть 1.2. Mysql, php, nginx via docker.
Часть 1.3. Линковка. Общие тома. Запуск. PhpBB.
Краткая версия доступна тут, github репозиторий.
Images
В прошлой статье были созданы основные компоненты необходимые для запуска форума.
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
php-fpm latest 49cfee7ea7bb 5 days ago 368.5 MB
nginx_datastore latest 16f48b621bee 5 days ago 20.02 MB
mysql_datastore latest 48270e80e3c5 5 days ago 2.436 MB
nginx latest 1ebf34a9d0e5 3 weeks ago 299 MB
mysql latest 0beee7f478c8 3 weeks ago 282.8 MB
phusion/baseimage 0.9.16 5a14c1498ff4 5 weeks ago 279.7 MB
phusion/baseimage latest 5a14c1498ff4 5 weeks ago 279.7 MB
busybox latest 4986bf8c1536 8 weeks ago 2.433 MB
Запуск
В нашем случае порядок запуска контейнеров имеет значение. Из-за использование общих томов и линовки.
Datastores
В первую очередь должны быть проиницилизированы контейнеры с данными.
Для хранения БД mysql – mysql_datastore:
docker run --name mysql_datastore mysql_datastore true
Для доступа к файлам сайта и конфигам nginx:
docker run --name nginx_datastore nginx_datastore true
Произойдет запуск контейнеров с соответствующими именами, далее выполняется команда true
и каждый контейнер будет остановлен. Напоминаю что контейнер с данными достаточно проинициализировать для того чтоб его уже можно было использовать.
Mysql
Следом будет запущен контейнер с mysql.
docker run --name mysql --volumes-from mysql_datastore -e MYSQL_ROOT_PASSWORD=YourRootPass -e MYSQL_DATABASE=phpBB -e MYSQL_USER=phpBBuser -e MYSQL_PASSWORD=PhpbbDbPass -d mysql
--volumes-from mysql_datastore
— это указание контейнеру при запуске использовать тома из другого контейнера, в нашем случае том /var/lib/mysql
, необходимый для хранения базы, будет общим между контейнерами mysql и mysql_datastore
-d
— запускает контейнер в режиме демона
Официальный образ mysql поддерживает переменные, которые можно передать при запуске контейнера по средством ключа -e
:
MYSQL_ROOT_PASSWORD — задает пароль для пользователя root
MYSQL_DATABASE — создает новую базу с соответствующим именем, если она не создана
MYSQL_USER — для базы из переменной MYSQL_DATABASE создает пользователя с полными правами на эту базу
MYSQL_PASSWORD — для пользователя MYSQL_USER задает
Чтоб не оставлять в истории консоли и в параметрах запуска пароли обычным текстом. Можно после первого запуска завершить и удалить контейнер docker stop mysql; docker rm mysql
. А затем во второй раз запустить контейнер уже без переменных docker run --name mysql --volumes-from mysql_datastore -d mysql
. Все данные для нас сохранит контейнер mysql_datastore. Историю же консоли можно отчистить командой history -d <номер строки, которую надо удалить>
Php-fpm
Далее запускаем php обработчик:
docker run --name php-fpm --link mysql:mysql --volumes-from nginx_datastore -d php-fpm
--link
— позволяет связать один контейнер с другим. В формате --link [ИМЯ ЗАПУЩЕННОГО КОНТЕЙНЕРА]:[АЛИАС, ПО КОТОРОМУ БУДЕМ ОБРАЩАТЬСЯ К КОНТЕЙНЕРУ]
. В нашем случае это позволит получить доступ к контейнеру mysql из php-fpm по имени mysql, что избавит от выяснения ip адреса контейнера с базой данных.
Для чего же используется подключение --volumes-from nginx_datastore
? В ходе экспериментов выяснилось, что для php-fpm необходимо наличие php файлов на том же хосте где запущен сам демон php-fpm. Спасибо интернету за направление на путь истинный.
Nginx
Финальный аккорд. Запуск фронтенда nginx:
docker run --name nginx --privileged --link php-fpm:php-fpm --volumes-from nginx_datastore -p 80:80 -d nginx
--privileged
— позволяет выполнить отключение ipv6 при запуске контейнера
-p 80:80
— сделает проброс 80 порта из контейнера на хост машину
phpBB
После успешного запуска всех контейнеров можно проверить. Необходимо зайти браузером по адресу вашей хост машины http://адрес-сервера. Вы попадаете в первичный мастер настройки форума phpBB. На этапе "Установка: Настройка базы данных" необходимо заполнить поля в соответствии с данными, которые задали при старте контейнера mysql. Контейнер php-fpm знает контейнер с базой данных как mysql (--link mysql:mysql
) что и будет являться адресом в "Имя сервера БД".
Цикл статей был написан в качестве вводной в технологию docker. Форум был запущен и обслуживает клан WOT. В качестве платформы выступил виртуальный сервер на ssd от DigitalOcean. (Инструкция по старту на DO). Для вашего удобства все файлы проекта "PhpBB через docker" доступны в репозитории.
В следующей части будет описан процесс запуска logstash посредством docker. А так же внедрение приватного хранилища образов с веб-интерфейсом. Полноценный продакшн проект с организацией инфраструктуры.