DevOps, Linux, 2 git`a
  • Обо мне
  • Категории
  • Теги
  • Архив

Часть 1.3. Линковка. Общие тома. Запуск. PhpBB.

Содержание

  • Images
  • Запуск
    • Datastores
    • Mysql
    • Php-fpm
    • Nginx
  • phpBB

Docker

Часть 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
Завершив установку, форум готов к работе. Well done!

Цикл статей был написан в качестве вводной в технологию docker. Форум был запущен и обслуживает клан WOT. В качестве платформы выступил виртуальный сервер на ssd от DigitalOcean. (Инструкция по старту на DO). Для вашего удобства все файлы проекта "PhpBB через docker" доступны в репозитории.

В следующей части будет описан процесс запуска logstash посредством docker. А так же внедрение приватного хранилища образов с веб-интерфейсом. Полноценный продакшн проект с организацией инфраструктуры.

Комментарии
comments powered by Disqus

Опубликовано

мар 2, 2015

Категория

devops

Теги

  • data container 4
  • datastore 4
  • docker 4
  • mysql 3
  • nginx 5
  • php 3
  • phpbb 3

Контакты

Получать обновления

  • Creative Commons License DevOps, linux, 2 git`a. Дмитрий Леонов
  • Создано с помощью Pelican. Тема Elegant от Talha Mansoor. Перевод темы Дмитрий Леонов