Докеризация стека LEMP с помощью Docker-Compose в Ubuntu
На этой странице
- Шаг 1. Установите Docker
- Шаг 2. Установите Docker-Compose
- Шаг 3. Создание и настройка среды Docker
- Шаг 4. Настройка файла docker-compose.yml
- Шаг 5. Запустите Docker-Compose
- Шаг 6. Тестирование
- Справочник
Docker-Compose — это инструмент командной строки для определения и управления многоконтейнерными приложениями Docker. Compose — это скрипт Python, его можно легко установить с помощью команды pip (pip — это команда для установки программного обеспечения Python из репозитория пакетов Python). С помощью compose мы можем запускать несколько контейнеров докеров с помощью одной команды. Это позволяет вам создать контейнер как услугу, отлично подходящую для вашей среды разработки, тестирования и подготовки.
В этом руководстве я пошагово расскажу вам, как использовать docker-compose для создания среды стека LEMP (LEMP=Linux — Nginx — MySQL — PHP). Мы будем запускать все компоненты в разных контейнерах Docker, мы настроим контейнер Nginx, контейнер PHP, контейнер PHPMyAdmin и контейнер MySQL/MariaDB.
Предпосылки
- Сервер Ubuntu 16.04 (64-разрядная версия)
- Привилегии root
Шаг 1 — Установите Докер
На этом этапе мы установим Docker. Docker доступен в репозитории Ubuntu, просто обновите репозиторий, а затем установите его.
Обновите репозиторий Ubuntu и выполните обновление:
sudo apt-get update
sudo apt-get upgradeУстановите последнюю версию Docker из репозитория Ubuntu.
sudo apt-get install -y docker.io
Запустите докер и включите его запуск во время загрузки:
systemctl start docker
systemctl enable dockerСлужбы Docker работают.
Затем вы можете попробовать использовать докер с командой ниже, чтобы проверить его:
docker run hello-world
Привет, мир из докера.
Шаг 2 — Установите Docker-Compose
На первом этапе мы уже установили Docker. Теперь установим docker-compose.
Нам нужен python-pip для установки compose, установите python и python-pip с помощью apt:
sudo apt-get install -y python python-pip
Когда установка будет завершена, установите docker-compose с помощью команды pip.
pip install docker-compose
Теперь проверьте версию docker-compose:
docker-compose --version
Докер-композитор был установлен.
Шаг 3. Создайте и настройте среду Docker.
На этом этапе мы создадим нашу среду создания докеров. Мы будем использовать пользователя без полномочий root, поэтому нам нужно создать этого пользователя сейчас.
Добавьте нового пользователя с именем hakase (выберите свое собственное имя пользователя здесь, если хотите):
useradd -m -s /bin/bash hakase
passwd hakaseЗатем добавьте нового пользователя в группу докеров и перезапустите докер.
usermod -a -G docker hakase
sudo systemctl restart dockerТеперь пользователь hakase может использовать docker без sudo.
Затем от пользователя root войдите под пользователем hakase с помощью su.
su - hakase
Создайте новый каталог для среды создания.
mkdir lemp-compose/
cd lemp-compose/Это наша среда создания докеров, все файлы, которые должны находиться в контейнере Docker, должны находиться в этом каталоге. Когда мы используем docker-compose, нам нужен файл .yml с именем docker-compose.yml.
В каталоге lemp-compose создайте несколько новых каталогов и файл docker-compose.yml:
touch docker-compose.yml
mkdir -p {logs,nginx,public,db-data}- logs: каталог для файлов журналов Nginx.
- nginx: содержит конфигурацию Nginx, такую как виртуальный хост и т. д.
- public: каталог для веб-файлов, index.html и файла информации PHP.
- db-data: том каталога данных MariaDB.
Создайте файлы журнала error.log и access.log в каталоге журналов.
touch logs/{error,access}.log
Создайте новый файл конфигурации виртуального хоста nginx в каталоге nginx:
vim nginx/app.conf
Вставьте конфигурацию ниже:
upstream php {
server phpfpm:9000;
}
server {
server_name 193.70.36.50;
error_log "/opt/bitnami/nginx/logs/myapp-error.log";
access_log "/opt/bitnami/nginx/logs/myapp-access.log";
root /myapps;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass php;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
}Сохраните файл и выйдите из vim.
Создайте новый файл index.html и файл информации PHP в общем каталоге.
echo '<h1>LEMP Docker-Compose</h1><p><b>hakase-labs</b>' > public/index.html
echo '<?php phpinfo(); ?>' > public/info.phpТеперь вы можете увидеть каталог среды, как показано ниже:
tree
Шаг 4. Конфигурация файла docker-compose.yml
На предыдущем шаге мы создали каталоги и файлы, необходимые для наших контейнеров. На этом этапе мы хотим отредактировать файл docker-compose.yml. В файле docker-compose.yml мы определим наши службы для стека LEMP, базовые образы для каждого контейнера и тома докеров.
Войдите в систему под пользователем hakase и отредактируйте файл docker-compose.yml с помощью vim:
su - hakase
cd lemp-compose/
vim docker-compose.yml- Определить сервисы Nginx
Вставьте конфигурацию nginx ниже:
nginx:
image: 'bitnami/nginx'
ports:
- '80:80'
links:
- phpfpm
volumes:
- ./logs/access.log:/opt/bitnami/nginx/logs/myapp-access.log
- ./logs/error.log:/opt/bitnami/nginx/logs/myapp-error.log
- ./nginx/app.conf:/bitnami/nginx/conf/vhosts/app.conf
- ./public:/myappsВ этой конфигурации мы уже определили:
- nginx: имя службы
- изображение: использовались образы докеров bitnami/nginx.
- ports: открыть порт 80 контейнера для порта 80 хоста.
- ссылки: связывает сервисный контейнер nginx с контейнером phpfpm.
- тома: подключение локальных каталогов к контейнеру. Смонтируйте каталог файлов журналов, смонтируйте конфигурацию виртуального хоста Nginx и смонтируйте корневой веб-каталог.
- Определить службы PHP-fpm
Вставьте конфигурацию под блоком Nginx:
phpfpm:
image: 'bitnami/php-fpm'
ports:
- '9000:9000'
volumes:
- ./public:/myappsМы определили здесь:
- phpfpm: определите имя службы.
- image: определите базовое изображение для службы phpfpm с изображением bitnami/php-fpm.
- ports: мы запускаем PHP-fpm с TCP-портом 9000 и открываем порт 9000 для хоста.
- volumes: подключите общедоступный корневой веб-каталог к myapps в контейнере.
- Определить службу MySQL
В третьем блоке вставьте приведенную ниже конфигурацию для сервисного контейнера MariaDB:
mysql:
image: 'mariadb'
ports:
- '3306:3306'
volumes:
- ./db-data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=hakase-labs123Здесь вы можете видеть, что мы используем:
- mysql: в качестве имени службы.
- image: контейнер основан на образах докеров mariadb.
- ports: служебный контейнер, использующий порт 3306 для подключения к MySQL, и предоставление его хосту через порт 3306 .
- тома: каталог db-data mysql
- environment: установите переменную среды MYSQL_ROOT_PASSWORD для корневого пароля mysql на образы докеров, выполняемые при сборке контейнера.
- Конфигурация сервисов PHPMyAdmin
Последний блок, вставьте конфигурацию ниже:
phpmyadmin:
image: 'phpmyadmin/phpmyadmin'
restart: always
ports:
- '8080:80'
links:
- mysql:mysql
environment:
MYSQL_USERNAME: root
MYSQL_ROOT_PASSWORD: hakase-labs123
PMA_HOST: mysqlМы используем образ докера phpmyadmin, сопоставляем порт контейнера с 80 по 8080 на хосте, связываем контейнер с контейнером mariadb, устанавливаем перезапуск всегда и устанавливаем некоторые переменные среды образа докера, включая набор PMA_HOST.
Сохраните файл и выйдите из vim.
Вы можете увидеть полный пример на github.
Шаг 5 — Запустите Docker-Compose
Теперь все готово для запуска docker-compose. Примечание: когда вы хотите запустить docker-compose, вы должны находиться в каталоге проекта docker-compose и убедиться, что есть файл yml с конфигурацией компоновки.
Запустите команду ниже, чтобы раскрутить стек LEMP:
docker-compose up -d
-d: работает как демон или в фоновом режиме
Вы увидите результат, что новые контейнеры были созданы, проверьте это с помощью команды ниже:
docker-compose ps
Теперь у нас есть четыре контейнера с Nginx, PHP-fpm, MariaDB и PHPMyAdmin.
Шаг 6 — Тестирование
Проверка портов, которые использует докер-прокси на хосте.
netstat -plntu
Мы видим порт 80 для контейнера Nginx, порт 3306 для контейнера MariaDB, порт 9000 для контейнера php-fpm и порт 8080 для контейнера PHPMyAdmin.
Получите доступ к порту 80 из веб-браузера, и вы увидите наш файл index.html.
Убедитесь, что PHP-fpm запущен, откройте его из веб-браузера.
Получите доступ к контейнеру MySQL в оболочке MySQL.
docker-compose exec mysql bash
mysql -u root -p
TYPE MYSQL PASSWORD: hakase-labs123Теперь создайте новую базу данных:
create database hakase_db;
exitКонтейнер оболочки mysql MariaDB доступен, и мы создали новую базу данных hakase_db.
Затем войдите в PHPMyAdmin через порт 8080: http://serverip-address:8080/.
Вы увидите страницу входа в PHPMyAdmin, просто введите имя пользователя root и пароль hakase-labs123.
Вы будете автоматически подключены к контейнеру mysql, определенному в переменной среды PMA_HOST.
Нажмите «Перейти», и вы увидите панель управления phpmyadmin, которая подключена к контейнеру mysql.
Успех! Стек LEMP работает в конфигурации docker-compose, состоящей из четырех контейнеров.
Ссылка
- https://hub.docker.com/r/bitnami/nginx/
- https://hub.docker.com/r/bitnami/php-fpm/
- https://hub.docker.com/_/mariadb/
- https://hub.docker.com/r/phpmyadmin/phpmyadmin/
- https://docs.docker.com/compose/
- https://github.com/yuzukiseo/hakase-labs/tree/master/lemp-compose
- https://linux-console.net/tutorial/how-to-create-docker-images-with-dockerfile/