Как установить Wordpress и PhpMyAdmin с помощью Docker Compose в Ubuntu 14.04

Вступление

Docker Compose позволяет работать с процессами оркестровки контейнеров Docker (например, как запуск, остановка и настройка внутриконтейнерных связей и томов) очень просто.

В этой статье приведен реальный пример использования Docker Compose для установки приложения, в данном случае WordPress с PHPMyAdmin в качестве дополнительного. WordPress обычно работает в стеке LAMP, что означает Linux, Apache, MySQL / MariaDB и PHP. Официальный образ WordPress Docker включает в себя Apache и PHP для нас, поэтому единственная часть, о которой нам нужно беспокоиться, это MariaDB.

Предпосылки

Чтобы следовать этой статье, вам понадобится следующее:

Шаг 1 - Установка WordPress

Мы будем использовать официальные изображения Docker https://hub.docker.com//wordpress/[WordPress] и https://hub.docker.com//mariadb/[MariaDB]. Если вам интересно, есть больше информации об этих изображениях и их настройках на соответствующих страницах GitHub и Docker Hub.

Давайте начнем с создания папки, в которой будут храниться наши данные, и создания минимального файла + docker-compose.yml + для запуска нашего контейнера WordPress:

mkdir ~/wordpress && cd $_

Затем создайте + ~ / wordpress / docker-compose.yml + в своем любимом текстовом редакторе (nano легко, если у вас нет предпочтений):

nano ~/wordpress/docker-compose.yml

и вставьте следующее:

~ / WordPress / Докер-compose.yml

wordpress:
 image: wordpress

Это просто говорит Docker Compose запустить новый контейнер с именем + wordpress + и загрузить образ + wordpress + из Docker Hub.

Мы можем поднять изображение так:

docker-compose up

Вы увидите, как Docker загружает и извлекает образ WordPress из Docker Hub, и через некоторое время вы получите некоторые сообщения об ошибках, подобные приведенным ниже:

Outputwordpress_1 | error: missing WORDPRESS_DB_HOST and MYSQL_PORT_3306_TCP environment variables
wordpress_1 |   Did you forget to --link some_mysql_container:mysql or set an external db
wordpress_1 |   with -e WORDPRESS_DB_HOST=hostname:port?
dockercompose_wordpress_1 exited with code 1

WordPress жалуется, что не может найти базу данных. Давайте добавим изображение MariaDB к миксу и свяжем его, чтобы это исправить.

Шаг 2 - Установка MariaDB

Чтобы добавить изображение MariaDB в группу, снова откройте + docker-compose.yml с помощью вашего текстового редактора:

nano ~/wordpress/docker-compose.yml

Измените + docker-compose.yml +, чтобы соответствовать приведенному ниже (будьте осторожны с отступом, файлы YAML чувствительны к пробелам)

докер-compose.yml

wordpress:
 image: wordpress

Здесь мы определили новый контейнер с именем + wordpress_db + и сказали ему использовать образ + mariadb + из Docker Hub. Мы также сказали нашему контейнеру + wordpress + связать наш контейнер + wordpress_db + с контейнером + wordpress + и назвать его + mysql + (внутри контейнера + wordpress + имя хоста + mysql + будет перенаправлено в наш + wordpress_db + контейнер).

Если вы снова запустите + docker-compose up +, вы увидите, что он загружает образ MariaDB, и вы также увидите, что мы еще не совсем там:

Outputwordpress_db_1 | error: database is uninitialized and MYSQL_ROOT_PASSWORD not set
wordpress_db_1 |   Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?
wordpress_1    | error: missing required WORDPRESS_DB_PASSWORD environment variable
wordpress_1    |   Did you forget to -e WORDPRESS_DB_PASSWORD=... ?
wordpress_1    |
wordpress_1    |   (Also of interest might be WORDPRESS_DB_USER and WORDPRESS_DB_NAME.)
wordpress_wordpress_db_1 exited with code 1
wordpress_wordpress_1 exited with code 1
Gracefully stopping... (press Ctrl+C again to force)

WordPress по-прежнему жалуется на невозможность найти базу данных, и теперь у нас есть новая жалоба от MariaDB о том, что пароль root не установлен.

Похоже, что просто связать два контейнера недостаточно. Давайте продолжим и установим переменную + MYSQL_ROOT_PASSWORD +, чтобы мы могли запустить эту вещь.

Отредактируйте файл Docker Compose еще раз:

nano ~/wordpress/docker-compose.yml

Добавьте эти две строки в end раздела + wordpress_db +, но не забудьте сменить пароль на более безопасный! *

докер-compose.yml

wordpress_db:
...


...

Это установит переменную окружения внутри контейнера + wordpress_db + с именем + MYSQL_ROOT_PASSWORD + с вашим желаемым паролем. Образ Docker MariaDB настроен на проверку этой переменной среды при запуске и позаботится о настройке БД с учетной записью root с паролем, заданным как + MYSQL_ROOT_PASSWORD +.

Пока мы это делаем, давайте также настроим порт вперед, чтобы мы могли подключиться к нашей установке WordPress, как только она действительно загрузится. В разделе + wordpress + добавьте эти две строки:

докер-compose.yml

wordpress:
...


...

Первый номер порта - это номер порта на хосте, а второй номер порта - это порт внутри контейнера. Таким образом, эта конфигурация перенаправляет запросы на порт 8080 хоста на порт 80 веб-сервера по умолчанию внутри контейнера.

Ваш полный файл + docker-compose.yml + теперь должен выглядеть так:

докер-compose.yml

wordpress:
 image: wordpress
 links:
   - wordpress_db:mysql
 ports:
   - 8080:80
wordpress_db:
 image: mariadb
 environment:
   MYSQL_ROOT_PASSWORD:

С этой конфигурацией мы можем запустить WordPress. На этот раз давайте запустим его с опцией + -d +, которая скажет + docker-compose + запускать контейнеры в фоновом режиме, чтобы вы могли продолжать использовать свой терминал:

docker-compose up -d

Вы увидите целую кучу текста, летящего на вашем экране. После того, как он успокоится, откройте веб-браузер и перейдите к IP + вашего устройства DigitalOcean на порту 8080 (например, если IP-адрес вашего сервера, вы должны ввести в браузере.)

Вы должны увидеть новую страницу установки WordPress и иметь возможность завершить установку и вести блог как обычно.

Поскольку оба они являются официальными образами Docker и следуют всем рекомендациям Docker, у каждого из этих образов есть предопределенные, постоянные тома для вас - это означает, что если вы перезапустите контейнер, ваши записи в блоге все равно будут там. Подробнее о работе с томами Docker можно узнать в томах данных Docker. руководство.

Шаг 3 - Добавление контейнера PhpMyAdmin

Отлично, это было относительно безболезненно. Давайте попробуем немного пофантазировать.

До сих пор мы использовали только официальные изображения, которые команда Docker прилагает большие усилия для обеспечения точности. Возможно, вы заметили, что нам не пришлось предоставлять контейнеру WordPress какие-либо переменные среды для его настройки. Как только мы связали его с правильно настроенным контейнером MariaDB, все просто заработало.

Это связано с тем, что внутри контейнера WordPress Docker есть скрипт, который фактически извлекает переменную + MYSQL_ROOT_PASSWORD + из нашего контейнера + wordpress_db + и использует ее для соединения с WordPress.

Давайте немного выйдем из официальной области изображений и воспользуемся community предоставленным изображением PhpMyAdmin. Давайте еще раз отредактируем + docker-compose.yml +:

nano docker-compose.yml

Вставьте следующее в конец файла:

докер-compose.yml

phpmyadmin:
 image: corbinu/docker-phpmyadmin
 links:
   - wordpress_db:mysql
 ports:
   - 8181:80
 environment:
   MYSQL_USERNAME: root
   MYSQL_ROOT_PASSWORD:

Обязательно замените его тем же корневым паролем из контейнера + wordpress_db +, который вы установили ранее.

Это захватывает + docker-phpmyadmin + членом сообщества + corbinu +, связывает его с нашим + wordpress_db + контейнером с именем + mysql + (что означает изнутри контейнера + phpmyadmin + ссылки на имя хоста + mysql + будет перенаправлен в наш контейнер + wordpress_db +), выставит свой порт 80 на порт 8181 хост-системы и, наконец, установит пару переменных среды с нашими именем пользователя и паролем MariaDB. Это изображение не получает автоматически переменную окружения + MYSQL_ROOT_PASSWORD + из среды контейнера + wordpress_db +, как это делает образ + wordpress +. На самом деле нам нужно скопировать строку + MYSQL_ROOT_PASSWORD: + из контейнера + wordpress_db + и установить имя пользователя в + root +.

Полный файл + docker-compose.yml + теперь должен выглядеть следующим образом:

докер-compose.yml

wordpress:
 image: wordpress
 links:
   - wordpress_db:mysql
 ports:
   - 8080:80
wordpress_db:
 image: mariadb
 environment:
   MYSQL_ROOT_PASSWORD: examplepass

Теперь снова запустите группу приложений:

docker-compose up -d

Вы увидите, что PhpMyAdmin устанавливается. После завершения зайдите на IP-адрес вашего сервера снова (на этот раз, используя порт 8181, например, ). Вас приветствует экран входа в PhpMyAdmin.

Войдите в систему, используя имя пользователя + root + и пароль, которые вы установили в файле YAML, и вы сможете просматривать свою базу данных. Вы заметите, что сервер включает в себя базу данных + wordpress +, которая содержит все данные из вашей установки WordPress.

Таким образом, вы можете добавить столько контейнеров, сколько захотите, и связать их по своему усмотрению. Как видите, подход достаточно мощный - вместо того, чтобы иметь дело с конфигурацией и предварительными условиями для каждого отдельного компонента и устанавливать их все на одном сервере, вы можете соединить части вместе, как блоки Lego, и добавить компоненты по частям. Используя такие инструменты, как Docker Swarm, вы даже можете прозрачно запускать эти контейнеры на нескольких серверах! Это немного выходит за рамки этого урока. Докер предоставляет некоторую [документацию] https://docs.docker.com/swarm/install-w-machine/, если вам интересно.

Шаг 4 - Создание сайта WordPress

Поскольку все файлы для вашего нового сайта WordPress хранятся в вашем контейнере Docker, что происходит с вашими файлами, когда вы останавливаете контейнер и запускаете его снова?

По умолчанию корень документа для контейнера WordPress является постоянным. Это потому, что образ WordPress из Docker Hub настроен таким образом. Если вы внесете изменения в свой сайт WordPress, остановите группу приложений и запустите ее снова, на вашем веб-сайте останутся внесенные вами изменения.

Давай попробуем.

Перейдите на свой WordPress из веб-браузера (например, ). Отредактируйте уже существующий пост * Hello World! * Затем остановите все контейнеры Docker с помощью следующей команды:

docker-compose stop

Попробуйте загрузить сайт WordPress снова. Вы увидите, что сайт не работает. Запустите контейнеры Docker снова:

docker-compose up -d

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

Шаг 5 - Хранение корня документа в файловой системе хоста (необязательно)

Можно сохранить корень документа для WordPress в файловой системе хоста, используя том данных Docker для обмена файлами между хостом и контейнером.

Давайте попробуем. Откройте файл + docker-compose.yml + еще раз:

nano ~/wordpress/docker-compose.yml

в разделе + wordpress: + добавьте следующие строки:

~ / WordPress / Докер-compose.yml

wordpress:
...


   ...

Остановите текущую сессию + docker-compose +:

docker-compose stop

Удалите существующий контейнер, чтобы мы могли сопоставить том с файловой системой хоста:

docker-compose rm wordpress

Запустите WordPress снова:

docker-compose -d

Как только приглашение вернется, WordPress должен быть снова запущен - на этот раз с использованием файловой системы хоста для хранения корня документа.

Если вы загляните в каталог + ~ / wordpress +, вы увидите, что в нем теперь есть каталог + wp_html +:

ls ~/wordpress

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

Это было немного более плавно, чем обычно - контейнер WordPress Docker настроен для проверки, является ли + / var / www / html + пустым или нет, при запуске и копирует туда файлы соответствующим образом. Обычно вам придется сделать этот шаг самостоятельно.

Заключение

У вас должна быть развернута и запущена полная версия WordPress. Вы должны быть в состоянии использовать тот же метод для развертывания самых разных систем, используя образы, доступные в Docker Hub. Обязательно выясните, какие тома являются постоянными, а какие нет для каждого контейнера, который вы + создаете.

Счастливого Докеринга!

Related