Docker контейнеры для WordPress проекта. Wordpress docker
Docker контейнеры для Wordpress проекта
Недавно передо мной стояла задача перенести существующий сайт на wordpress в docker для переносимости и лёгкого деплоя на любой сервер, причём нужно было использовать alpine linux.
Во время работы сильно поднатаскался с docker, получил бесценный опыт. Спасибо заказчику за интересный таск =)
До этого я с docker не работал, и это был мой первый опыт. С alpine linux тоже не встречался. Вообще я не часто работаю с unix, а если и работаю, то обычно использую ubuntu. В отличие от «убунты» для alpine не так много примеров в сети, да и вообще он мало распространён (могу ошибаться), но у него есть одна классная отличительная особенность — он весит всего около 5 мб, поэтому контейнеры на его основе получаются легковесными, и это круто.
Немного уточню задачу: «Поместить существующий проект на базе wordpress в два docker контейнера (1 для сайта, 1 для бд), и сделать так, чтобы его деплой требовал минимального количества команд». В идеале проект должен подниматься 1-2 консольными командами. Перенеся проект в докер, получим :
- Супер переносимость
- Лёгкий деплой
- Простоту настройки
- Возможность разработчику ничего не смыслящему в разворачивании проекта развернуть его
- …
- Зависимость от докера =)
Весь проект со всеми файлами лежит на гитхаб, там можно посмотреть структуру директорий и содержимое файлов.
Сначала сделаем контейнер для apache, в нём будет работать wordpress. Командами ставятся необходимые библиотеки, копируются конфиги и тд. Файлы сайта нужно положить в files/site.
Вот Dockerfile:
FROM smebberson/alpine-base:1.2.0 MAINTAINER Ilya Sizov <[email protected]> # Install apache RUN apk add --update apache2=2.4.16-r0 apache2-utils=2.4.16-r0 && \ rm -rf /var/cache/apk/* # Install php and mysql RUN apk --update add curl php-apache2 php php-curl php-openssl php-json php-phar php-dom mysql mysql-client php-mysql php-mysqli && rm /var/cache/apk/* COPY /sites-available/ /etc/apache2/sites-available COPY httpd.conf /etc/apache2/ RUN mkdir -p /etc/apache2/sites-enabled/ RUN ln -s /etc/apache2/sites-available/default.conf /etc/apache2/sites-enabled/ # Expose the ports for apache EXPOSE 80 # httpd (pid 1) already running fix COPY run-apache.sh /run-apache.sh RUN chmod -v +x /run-apache.sh CMD ["/run-apache.sh"] #ENTRYPOINT ["httpd", "-D", "FOREGROUND"] #FROM httpd:2.4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
FROM smebberson/alpine-base:1.2.0 MAINTAINER Ilya Sizov <[email protected]>
# Install apache RUN apk add --update apache2=2.4.16-r0 apache2-utils=2.4.16-r0 && \ rm -rf /var/cache/apk/*
# Install php and mysql RUN apk --update add curl php-apache2 php php-curl php-openssl php-json php-phar php-dom mysql mysql-client php-mysql php-mysqli && rm /var/cache/apk/* COPY /sites-available/ /etc/apache2/sites-available
COPY httpd.conf /etc/apache2/
RUN mkdir -p /etc/apache2/sites-enabled/ RUN ln -s /etc/apache2/sites-available/default.conf /etc/apache2/sites-enabled/
# Expose the ports for apache EXPOSE 80
# httpd (pid 1) already running fix COPY run-apache.sh /run-apache.sh RUN chmod -v +x /run-apache.sh
CMD ["/run-apache.sh"]
#ENTRYPOINT ["httpd", "-D", "FOREGROUND"]
#FROM httpd:2.4 |
Также необходим контейнер с mysql. Dockerfile:
FROM alpine:latest MAINTAINER Ilya Sizov <[email protected]> WORKDIR /app COPY startup.sh /startup.sh RUN apk add --update mysql mysql-client && rm -f /var/cache/apk/* COPY my.cnf /etc/mysql/my.cnf EXPOSE 3306 CMD ["/startup.sh"]
FROM alpine:latest MAINTAINER Ilya Sizov <[email protected]>
WORKDIR /app
COPY startup.sh /startup.sh
RUN apk add --update mysql mysql-client && rm -f /var/cache/apk/* COPY my.cnf /etc/mysql/my.cnf
EXPOSE 3306
CMD ["/startup.sh"] |
Docker-compose файл:
version: '2' services: web: image: apache build: context: ./apache dockerfile: Dockerfile links: - mysql ports: - "80:80" container_name: apache volumes: - ./apache/files/site/:/var/www/localhost/htdocs/ mysql: image: mysql build: context: ./mysql dockerfile: Dockerfile ports: - "3306:3306" container_name: mysql volumes: - ./mysql/app/:/app/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
version: '2' services: web: image: apache build: context: ./apache dockerfile: Dockerfile links: - mysql ports: - "80:80" container_name: apache volumes: - ./apache/files/site/:/var/www/localhost/htdocs/ mysql: image: mysql build: context: ./mysql dockerfile: Dockerfile ports: - "3306:3306" container_name: mysql volumes: - ./mysql/app/:/app/ |
Файлы сайта и БД вынесены в Volume’s.
Для старта используется скрипт:
#!/bin/sh docker-compose up -d sleep 10 echo "restoring db..." docker exec -i mysql mysql -u root wordpressDB < wordpressDB.sql
#!/bin/sh
docker-compose up -d
sleep 10
echo "restoring db..."
docker exec -i mysql mysql -u root wordpressDB < wordpressDB.sql |
В корне лежит файл setUpWordpress.sh ( структура директорий в проекте на github ) в котором находятся команды для автоматического запуска проекта. Переходим в корневую директорию и даём права на файл:
chmod +x setUpWordpress.sh
chmod +x setUpWordpress.sh |
После этого запускаем его :
Выполнение займёт некоторое время, после чего появится работающий проект по адресу http://dockerIp . Скрипт выполняем только 1 раз при сетапе сервера.
Важно не забыть дать права на папки с сайтом, иначе не будут загружаться файлы и тд.
Если нужно обновить сайт и бд
Положить новые файлы сайта в apache/files/site/
Положить новый бекап БД в корень и выполнить docker exec -i mysql mysql -u root dbName < backUp.sql
PS: Это мой первый опыт с докером, если есть какие то косяки, пишите в коментах, буду признателен.
Также можно почитать:
isizov.ru
docker-compose и WordPress
Вы можете использовать Docker Compose для простого запуска WordPress в изолированной среде построенной на контейнерах Docker. Это руководство расскажет вам как использовать Compose для установки и запуска WordPress. Перед началом вам следует убедится что Compose установлен.
Определяем компоненты проекта
Создайте пустой каталог проекта.
Выберете легко запоминающееся название для каталога. Данный каталог будет является контекстом для образа вашего приложения. Каталог будет содержать только ресурсы необходимые для сборки образа.
Каталог проекта будет содержать файл docker-compose.yml которого будет достаточно для полноценного wordpress проекта.
Войдите в каталог вашего проекта.
Например, если вы назвали ваш каталог my_wordpress:
$ cd my-wordpress/Создайте файл docker-compose.yml который будет запускать ваш Wordpress блог и MySQL с монтированным хранилищем данных:
version: '2' services: db: image: mysql:5.7 volumes: - "./.data/db:/var/lib/mysql" restart: always environment: MYSQL_ROOT_PASSWORD: wordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest links: - db ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_PASSWORD: wordpress Примечание: Каталог ./.data/db будет автоматически создан в папке проекта рядом с docker-compose.yml который будет хранить все изменения сделанные в базе wordpress.
Сборка проекта
Теперь, выполните команду docker-compose up -d из каталога вашего проекта.
Команда скачает необходимые образы и запустит контейнеры с wordpress базой данных, как показано в приведенном ниже примере.
$ docker-compose up -d Creating network "my_wordpress_default" with the default driver Pulling db (mysql:5.7)... 5.7: Pulling from library/mysql efd26ecc9548: Pull complete a3ed95caeb02: Pull complete ... Digest: sha256:34a0aca88e85f2efa5edff1cea77cf5d3147ad93545dbec99cfe705b03c520de Status: Downloaded newer image for mysql:5.7 Pulling wordpress (wordpress:latest)... latest: Pulling from library/wordpress efd26ecc9548: Already exists a3ed95caeb02: Pull complete 589a9d9a7c64: Pull complete ... Digest: sha256:ed28506ae44d5def89075fd5c01456610cd6c64006addfe5210b8c675881aff6 Status: Downloaded newer image for wordpress:latest Creating my_wordpress_db_1 Creating my_wordpress_wordpress_1Настройка WordPress в браузере
Если вы используете Docker Machine, то с помощью команды docker-machine ip MACHINE_VM вы можете узнать адрес который нужно открыть в браузере http://MACHINE_VM_IP:8000.
В данный момент, WordPress будет запущен на 8000 порту вашего Docker хоста и вы можете завершить в течении пяти минут установку WordPress как администратор.
Примечание: Сайт Wordpress не будет доступен сразу же на порту 8000 по тому что на инициализацию контейнеров может потребоваться время, особенно при первом запуске.Дополнительная документация по Compose
Комментарии:
Комментариев нет, желаете стать первым?
docker.crank.ru
Докеризация Wordpress на Nginx и PHP-FPM под Ubuntu 16.04
В этой статье вы узнаете как использовать Docker-Compose. Мы развернем ' Wordpress ' в nginx, MySQL и PHP- FPM. Каждая служба имеет свой собственный контейнер, и мы будем использовать изображения из докер-концентратрирующего реестра. Я покажу вам, как создать контейнер из docker образов и управлять всеми контейнеров с Docker-Compose.
Особенности: В Ubuntu 16.04 Права Root
Шаг 1 – Установка Докера
Мы начнем с нуля, устанавливаем Docker-Compose вручную с помощью команды apt.
Прежде чем мы начнем, обновление репозитория Ubuntu,следует установить последние обновления:
sudo apt-get update sudo apt-get upgradeНастройка репозитория Ubuntu доступна по умолчанию, поэтому мы можем продолжить его установку прямо сейчас:
sudo apt-get install -y docker.ioКогда установка завершится, запустите настройки и добавьте его в автоматический запуск при загрузке:
systemctl start docker systemctl enable docker<Теперь проверьте установленные настройки с помощью команды ниже: /p>
docker run hello-worldВы увидите привет-мир от докера.
Шаг 2 - Установка Docker-Compose
Docker-Compose – это текст, написанный на языке Python, он доступен на PyPI репозиторие Python и может быть установлен с помощью Python Пип. Поэтому нам нужно установить Python и Python PIP на наши системы.
Установите Python и Python-PIP-изображения:
sudo apt-get install -y python python-pipДождитесь завершения процесса установки. Затем проверьте установку docker-compose с помощью команды ниже:
docker-compose -vВы получили версию docker-compose.
Шаг 3 – Установка WordPress
Теперь, docker и docker-compose установлены в системе. На этом этапе, вы узнаете, как создать и настроить условия docker-compose для нашего проекта WordPress.
Мы развернем ' WordPress ' приложением PHP с nginx в качестве веб-сервера, и mariadb в качестве базы данных ,MySQL, как докер контейнер, управляемый docker-compose. Каждое приложение (WordPress, nginx и MySQL) будет работать в своем собственном контейнере,вы можете посмотреть список ниже:
- Сервера nginx: мы используем официальный docker-образ, последнюю версию 'nginx: latest':
-Wordpress: предоставляет некоторые образы docker в докер-концентраторе, мы будем использовать WordPress 4.7 с PHP-МПФ 7.0 .
- MySQL: мы будем использовать mariadb в официальном контейнере, версия.
Поэтому нам нужны 3 docker изображения из докер реестра.
Мы не будем работать через докер-корень и обычного пользователя Linux. Создайте нового пользователя с помощью команды ниже (не стесняйтесь использовать здесь другой логин, главное, что пользователь не существует. Если вы выберете другое имя, убедитесь, что вы изменили его во всех командах, которые следуют в этой статье):
useradd -m -s /bin/bash hakase passwd hakaseТеперь добавьте пользователя в 'докер' группы, так, чтобы он мог использовать команды настройки, и перезагрузите докер услуги:
usermod -a -G docker hakase systemctl restart dockerВойдите в пользователя hakase и создайте новый каталог для проекта WordPress:
su - hakase mkdir -p wordpress-compose cd wordpress-compose/Далее создайте новый файл под названием Docker-Compose.в формате yml', и новый каталог для проекта. Просто введите команды ниже:
touch docker-compose.yml mkdir -p nginx/ mkdir -p db-data/ mkdir -p logs/nginx/ mkdir -p wordpress/Список файлов и каталогов проекта:
'docker-compose.yml-это конфигурационный файл,который вы должны создать ,начиная новый проект.'
- nginx/: этот каталог ,используемый для дополнительной конфигурации nginx'как виртуального хоста и т. д.
db-data/:объем/каталог данных MySQL. SQL из данных '/var/lib/mysql' не установлен в данные db-каталога.
- журналы: каталог приложения для nginx, mariadb и пхп-фпм.
- wordpress/:все wordpress файлы будут доступны в этом каталоге.
В директории nginx создайте новый файл для нашего WordPress виртуального хоста.Создайте новый файл в WordPress.conf:
vim nginx/wordpress.confВставьте конфигурацию ниже:
server { listen 80; server_name wp-hakase.co; root /var/www/html; index index.php; access_log /var/log/nginx/hakase-access.log; error_log /var/log/nginx/hakase-error.log; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass wordpress:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } }Сохраните файл и выйдите из редактора vim.
Шаг 4 – Настройка Docker-Compose
На этом этапе мы начнем редактирование файла docker-compose.yml. Если вы хотите начать проект docker-compose, убедитесь, что вы создаете файл docker-compose.yml в первую очередь, как мы делаем это ниже.
Отредактируйте docker-compose.yml с помощью vim :
vim docker-compose.ymlОпределите ваши услуги на первой линии, мы определим Nginx. Мы используем Nginx последней версия. Настройте сопоставление портов для порта 80 на контейнере в порт 80 на хосте. Затем настройте объемы Docker: объем конфигурации виртуального хоста Nginx, объем файлов журнала Nginx и объем корневого веб-каталога "/ Var / WWW / HTML. Контейнер Nginx связан с WordPress контейнером.
Вставьте конфигурацию ниже:
nginx: image: nginx:latest ports: - '80:80' volumes: - ./nginx:/etc/nginx/conf.d - ./logs/nginx:/var/log/nginx - ./wordpress:/var/www/html links: - wordpress restart: alwaysДалее определите сервер MySQL. Мы используем изображение MariaDB, последней версии. Настройте сопоставление портов для контейнера на порт 3306 и пароль корня MySQL с переменной средой «MYSQL_ROOT_PASSWORD». Наконец. настройте объем контейнера для каталога данных MySQL.
Вставьте конфигурацию ниже:
mysql: image: mariadb ports: - '3306:3306' volumes: - ./db-data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=aqwe123 restart: alwaysДалее мы будем настраивать службу WordPress с помощью докер изображения WordPress 4.7 с PHP-FPM 7.0. Вешаем PHP-FPM на порт 9000, подключаем том Docker для директории «/var/www/html» в каталоге хоста «Wordpress», настроим базу данных, определив переменную среду WordPress, и свяжем WordPress с MySQL.
Вставьте конфигурацию ниже:
wordpress: image: wordpress:4.7.1-php7.0-fpm ports: - '9000:9000' volumes: - ./wordpress:/var/www/html environment: - WORDPRESS_DB_NAME=wpdb - WORDPRESS_TABLE_PREFIX=wp_ - WORDPRESS_DB_HOST=mysql - WORDPRESS_DB_PASSWORD=aqwe123 links: - mysql restart: alwaysПосле добавления трех частей в docker-compose.yml -файл, сохраните файл и выйдите из редактора vim.
Конфигурация docker-compose готова.
Шаг 5 - запуск docker-compose
Начните создание новых контейнеров с docker-compose. Перейдите на WordPress ,составьте каталог и запустите новые контейнеры, на основе созданного нами файла.
cd ~/wordpress-compose/ docker-compose up -dВы можете увидеть результаты выполнения команды. Были созданы три контейнеры. Давайте проверим состояние контейнера с параметром ps:
docker-compose psрезультат показан ниже
Если вы хотите увидеть выход журнала из контейнера, вы можете использовать команды ниже:
docker-compose logs nginx docker-compose logs mysql docker-compose logs wordpressКонтейнер журналов:
Примечание: Если вы видите в контейнере журнала WordPress ошибку в соединении с MySQL, игнорируйте его.
Шаг 6 - Установить WordPress
Прежде чем приступить к этому этапу, давайте проверим доступные/открытые порты в системе. Убедитесь, что есть 3 открытых порта: порт 80, 3306 и порт 9000
netstat -plntuРезультаты приведены ниже:
Теперь откройте веб-браузер и введите URL-адрес сервера или IP-адрес.
http://serverIP/
Вы можете увидеть страницу установки WordPress. Выберите свой язык и нажмите 'продолжить'.
Заполните детали, такие как: название сайта, админа, пользователя, пароль, адрес электронной почты и нажмите кнопку 'установить WordPress'. Вы будете перенаправлены на панель администратора WordPress.
WordPress установлен с помощью docker-compose.
Шаг 7 - доступ в контейнер docker
Это является дополнительным шагом, к тому,чтобы открыть контейнер с docker-compose. Убедитесь, что все контейнеры доступны и проверьте их состояние:
docker-compose psУ нас уже есть 3 контейнера, теперь мы можем попытаться войти в каждый контейнер. Войдите в первый контейнер nginx с помощью команды docker-compose.
docker-compose exec nginx bashnginx: имя файла в Docker-Compose yml
bash: выполнение команды в оболочке bash.
Теперь проверяем наши настройки виртуального хоста на WordPress.
cat /etc/nginx/conf.d/wordpress.confФайлы доступны в контейнере.
Далее попробуйте войти в контейнер MySQL, а затем в оболочку MySQL с помощью нашего пароля на файле.
docker-compose exec mysql bash mysql -u root -p TYPE MYSQL ROOT PASSWORDПосмотреть список баз данных:
show databases;Вы увидите нашу базу данных WordPress.
В ' WordPress ' контейнере, вы увидите все файлы WordPress.
docker-compose exec wordpress bash ls -lahВсе контейнеры доступны.
drach.pro