Это заметка для тех, кто начинает свою работу с Docker или кто имеет мало опыта в этом. Вы узнаете как быстро сделать сборку для запуска веб приложения. Настройки делались в Ubuntu 19.01.
Я считаю, что у вас уже установлен и настроен docker. Если нет, то смотрите тут.
Для начала нам нужно создать в корне проекта файл docker-compose.yml и указать там такие параметры:
version: '3'
services:
php:
build:
context: ./docker/php
ports:
- 9000:9000
volumes:
- ./:/srv/www/api
- ./docker/php/www.conf:/usr/local/etc/php-fpm.d/www.conf
environment:
MYSQL_HOST: ${MYSQL_HOST}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
nginx:
image: nginx:1.13.8
ports:
- 80:80
volumes:
- ./:/srv/www/api
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
mysql:
image: mysql:8.0.20
ports:
- 3306:3306
depends_on:
- php
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_HOST: ${MYSQL_HOST}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
Создаём файл .env и указывает там параметры для работы с базой данных:
MYSQL_HOST=mysql
MYSQL_DATABASE=apidb
MYSQL_USER=root
MYSQL_PASSWORD=root
MYSQL_ROOT_PASSWORD=root
Создаём конфигурационный файл default.conf для nginx в папке docker/nginx:
server {
listen 80 default_server;
server_name api.dev;
root /srv/www/api;
location / {
try_files $uri /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
error_log /var/log/nginx/api_error.log;
access_log /var/log/nginx/api_access.log;
}
Создаём конфигурационный файл www.conf для php в папке docker/php:
[www]
user = www-data
group = www-data
listen = nginx:9000
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
Создаём конфигурационный файл Dockerfile в папке docker/php:
FROM php:7.4-fpm
RUN docker-php-ext-install mysqli
Переходим в консоль. Будем считать, что наш проект лежит в папке api. Выполним команду docker-compose up:
$ docker-compose up
Creating network "api_default" with the default driver
Creating api_php_1 ... done
Creating api_nginx_1 ... done
Creating api_mysql_1 ... done
Attaching to api_php_1, api_nginx_1, api_mysql_1
...
Для тестирования приложения я использую curl. Для этого нам нужен IP адрес. Получим его:
$ echo $(docker network inspect api_default | grep Gateway | grep -o -E '[0-9\.]+')
172.18.0.1
Выполним запрос:
$ curl 172.18.0.1/index.php
Welcome!