Docker — это программное обеспечение, которое может упаковать ваше приложение, его зависимости, системные инструменты, системные библиотеки и настройки в единый виртуальный контейнер. Этот комбинированный пакет, содержащий все необходимое для запуска вашего приложения, называется образом контейнера Docker . Этот образ представляет собой автономный исполняемый программный пакет, который надежно работает на любом сервере — Linux, Windows, macOS, публичное облако или частное облако. Также эти образы можно использовать для запуска приложения как изолированного процесса в пространстве пользователя.
Рассмотрим как развернуть WordPress с Nginx, PHP-FPM и MariaDB и PhpMyAdmin с помощью Docker Compose на компьютере с Ubuntu.
1. Подготовка хост-машины
sudo apt update && sudo apt-get upgrade
sudo apt-get install -y docker.io
Добавим докер в автоматический запуск при загрузке ОС:
systemctl start docker
systemctl enable docker
2. Установка Docker-Compose
Docker-Compose доступен в репозитории, но его версии немного отстают от последней. Поэтому скачаем актуальную версию с GitHub
sudo wget -O /usr/local/bin/docker-compose https://github.com/docker/compose/releases/download/1.26.0/docker-compose-Linux-x86_64
sudo chmod +x /usr/local/bin/docker-compose
После завершения процесса проверьте установленную версию docker-compose:
docker-compose version

3. Установка WordPress с nginx, PHP, MariaDB, PhpMyAdmin
В целях безопасности, мы не будем работать через root, а добавим существующего пользователя в группу docker и перезагрузим службу:
usermod -a -G docker $USER
systemctl restart docker
Создадим каталоги в которых будут хранится данные.
mkdir -p wordpress-compose
cd wordpress-compose/
touch docker-compose.yml
mkdir -p nginx/
mkdir -p logs/
mkdir -p logs/nginx
mkdir -p data/
mkdir -p data/html
mkdir -p data/mysql
docker-compose.yml — это конфигурационный файл, в котором мы описываем какие контейнеры запускать, их настройки и связи между контейнерами.
— nginx/: каталог используемый для дополнительной конфигурации nginx, как виртуального хоста и т. д.
— logs/: каталог логов для nginx, mariadb и php.
— data/: каталог с файлами wordpress и файлы базы данных.
Далее в директории wordpress-compose/nginx создайте новый файл с конфигурацией nginx.
nano ~/wordpress-compose/nginx/nginx.conf
Вставьте следующее содержимое:
server {
listen 80;
server_name site1.ru;
root /var/www/html;
index index.php;
access_log /var/log/nginx/site-access.log;
error_log /var/log/nginx/site-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;
}
}
Сохраните файл и выйдите из редактора
4. Настройка Docker-Compose
Мы будем использовать Nginx последней версии. Настроим сопоставление портов для порта 8080 на хосте с портом 80 в контейнере. Настроим конфигурацию виртуального хоста Nginx, файлы журнала Nginx и корневой каталог веб-сервера /var/www/html. Также укажем что контейнер Nginx связан с контейнером WordPress.
Отредактируем файл docker-compose.yml:
nano docker-compose.yml
nginx:
image: nginx:latest
volumes:
- ./nginx:/etc/nginx/conf.d
- ./data/html:/var/www/html
ports:
- 8080:80
links:
- wordpress
Если вы копируете текст с сайта и вставляете в конфигурационный файл, убедитесь что форматирование не съехало и не появилось новых символов и пробелов, потому что из-за этого нарушается структура файла, что приводит к ошибкам.
Далее определим сервер MySQL, мы используем образ MariaDB последней версии. Назначим root пароль MySQL, имя базы данных, пользователя базы и его пароль. Для этого, вставьте в конфигурационный docker-compose.yml текст:
mysql:
image: mariadb
volumes:
- ./data/mysql:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: 4m3SxCpaQb*6LB#
MYSQL_DATABASE: db_wordpress
MYSQL_USER: user_wp
MYSQL_PASSWORD: 9UqfqeE9#hn2@t^
restart: always
Теперь мы будем настраивать WordPress с помощью образа WordPress с PHP-FPM 7.4. Подключаем том Docker для директории /var/www/html в каталоге хоста WordPress, настроим базу данных, определив переменную среду WordPress, и свяжем WordPress с MySQL. Данные по настройке базы данных должны соответствовать предыдущей секции. Вставьте в конфигурационный docker-compose.yml текст:
wordpress:
image: wordpress:php7.4-fpm-alpine
volumes:
- ./data/html:/var/www/html
depends_on:
- mysql
environment:
WORDPRESS_DB_HOST: mysql
MYSQL_ROOT_PASSWORD: 4m3SxCpaQb*6LB#
WORDPRESS_DB_NAME: db_wordpress
WORDPRESS_DB_USER: user_wp
WORDPRESS_DB_PASSWORD: 9UqfqeE9#hn2@t^
WORDPRESS_TABLE_PREFIX: wp_
links:
- mysql
restart: always
Для управления СУБД прикручиваем phpmyadmin и на порт 8081:
pma:
image: phpmyadmin/phpmyadmin
restart: always
links:
- mysql:mysql
ports:
- 8081:80
environment:
PMA_HOST=mysql
MYSQL_USERNAME=root
MYSQL_ROOT_PASSWORD: 4m3SxCpaQb*6LB#
После добавления составных частей в docker-compose.yml — файла, сохраните его и выйдите из редактора. Конфигурация docker-compose готова. У Вас должен получиться файл с таким содержимым:
version: '3'
services:
mysql:
image: mariadb
volumes:
- ./data/mysql:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: 4m3SxCpaQb*6LB#
MYSQL_DATABASE: db_wordpress
MYSQL_USER: user_wp
MYSQL_PASSWORD: 9UqfqeE9#hn2@t^
restart: always
wordpress:
image: wordpress:php7.4-fpm-alpine
volumes:
- ./data/html:/var/www/html
depends_on:
- mysql
environment:
WORDPRESS_DB_HOST: mysql
MYSQL_ROOT_PASSWORD: 4m3SxCpaQb*6LB#
WORDPRESS_DB_NAME: db_wordpress
WORDPRESS_DB_USER: user_wp
WORDPRESS_DB_PASSWORD: 9UqfqeE9#hn2@t^
WORDPRESS_TABLE_PREFIX: wp_
links:
- mysql
restart: always
nginx:
image: nginx:latest
volumes:
- ./nginx:/etc/nginx/conf.d
- ./data/html:/var/www/html
ports:
- 8080:80
links:
- wordpress
pma:
image: phpmyadmin/phpmyadmin
restart: always
links:
- mysql:mysql
ports:
- 8081:80
environment:
MYSQL_ROOT_PASSWORD: 4m3SxCpaQb*6LB#
5. Запуск docker-compose
Начнем создание новых контейнеров с docker-compose. Перейдите в каталог WordPress и запустите новые контейнеры на основании созданного нами файла.
cd ~/wordpress-compose/
docker-compose up -d

Вы можете увидеть результаты выполнения команды. Были созданы четыре контейнера. Давайте проверим состояние контейнеров.
docker-compose ps

Если вы хотите увидеть вывод журнала из контейнера, вы можете использовать команды ниже:
docker-compose logs nginx
docker-compose logs mysql
docker-compose logs wordpress
6. Установка CMS WordPress
Теперь откройте веб-браузер и введите URL-адрес сервера или IP-адрес.
http://server_IP:8080/
Вы должны увидеть страницу установки WordPress. Выберите свой язык и нажмите ‘продолжить’.

Если у Вас не открылась страница установки, посмотрите логи nginx, а также файл hosts на компьютере с которого вы пытаете открыть сайт.
Заполните детали, такие как: название сайта, имя пользователя, пароль, адрес электронной почты и нажмите кнопку ‘Установить WordPress’. Вы будете перенаправлены на панель администратора WordPress.

Также по адресу http://server_IP:8081/ доступен phpMyAdmin

WordPress установлен с помощью docker-compose.
7. Доступ в контейнеры docker
Чтобы убедиться, что все контейнеры доступны и проверить их состояние введите команду:
docker-compose ps
У нас уже 4 контейнера, теперь мы можем попытаться войти в каждый. Войдите в первый контейнер nginx с помощью команды docker-compose.
docker-compose exec nginx bash
nginx — имя файла в Docker-Compose yml
bash — выполнение команды в оболочке bash.
Теперь проверим наши настройки виртуального хоста на WordPress.
cat /etc/nginx/conf.d/nginx.conf
Файл доступен в контейнере.

Далее попробуйте войти в контейнер MySQL, а затем в оболочку MySQL с помощью нашего пароля на файле.
docker-compose exec mysql bash mysql -u root -p
Посмотреть список баз данных:
show databases;
Вы увидите нашу базу данных WordPress.

В контейнере WordPress вы увидите все файлы CMS WordPress.
docker-compose exec wordpress bash
ls -lah

При входе в панель PHPadmin пишет
Невозможно подключиться к серверу MySQL
mysqli::real_connect(): php_network_getaddresses: getaddrinfo failed: No address associated with hostname
mysqli::real_connect(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: No address associated with hostname
В последнее время очень сложно найти независимый источник новостей.
Большинство новостей заангажированные государством и найти что то действительно не завищащее от кого или чего то.
В Ютубе так же нужно очень долго искать полезную информацию.
Для себя открыл недавно 2 источника независимых новостей:russinfo.net и russtoday.com.
Вот одна из статей, которая мне очень понравилась: https://russinfo.net/finance/socialnye-vyplaty/dekretnye-vyplaty-v-rossii.html
А что читаете ВЫ?
а как войти в phpmyadmin..
через root и user_wp не пускает
Намек
pma:
image: phpmyadmin/phpmyadmin
restart: always
links:
— mysql:mysql
ports:
— 8081:80
environment:
PMA_HOST: mysql
MYSQL_USERNAME: root
MYSQL_ROOT_PASSWORD: 4m3SxCpaQb*6LB#
Спасибо большое за статью. Поправьте конфигурацию pma.
бомба
Всё круто, только не раскрыта тема, увеличения лимитов upload PHP и nginx
Our theatre group is preparing a small production, and I am helping organise the hair references for one character. We are considering a blonde curtain fringe, but the actor needs an unobstructed view throughout the performance. My reference folder uses photographs, since written haircut descriptions alone leave too much room for misunderstanding. While organising these notes, I am using blonde hair with curtain bangs as a reference. Before anything is cut, we want to compare styling the current fringe with using a temporary costume hairpiece. There are two quick costume changes, so a style that needs careful resetting after every scene would be awkward. At rehearsal, I would like to compare front and side views under the actual lights before settling on a shape. Which practical details should we put on the styling sheet so different backstage helpers can follow the same reference?
I have reached the fitting stage of a trouser project and need a clearer way to record proportions. Standing looks acceptable, while sitting makes the fabric strain around my hips. I keep getting conflicting shape categories from guides that ask for much the same information. I can record waist and hip measurements alongside the pattern size, then note where each adjustment changes the fabric tension. A useful explanation of proportions would help me more than another category to remember. How do other home sewers record measurements separately from the wearing ease of their chosen pattern? This is one reference I bookmarked while sorting out the vocabulary: body shape and colour analysis Colour can wait until the fit is settled; the silhouette is what I need to understand first. I would appreciate a practical sequence for checking proportions before changing the pattern again.
My wardrobe notebook now contains several weeks of outfit notes. This time I want to review the words before looking at photos. Some entries describe comfort, while others borrow style labels. I bookmarked body shape and colour analysis as one starting point for thinking about those categories. What interests me is whether a style system can help organize observations without replacing them with assumptions about what I ought to wear. Several outfits I liked had a clearly defined waist. But the notes also mention fabric, weather and the day itself. I would struggle to isolate a single reason from these notes. I want the next entries to describe the actual garment more clearly. I also want to leave room for changing my mind, since an outfit that suits one kind of day may feel wrong on another. What would you record before comparing the notes with a style system?