Сервис MySQL в Docker
Сервис MySQL поднимает сервер
в том же проекте, что и сайт.
Контейнер с базой
соседствует с web
и app
в одной сети compose,
и PHP сможет обращаться
к нему по имени db,
когда появится драйвер
и настройки в сценарии.
Пока страница
по-прежнему печатает
только текст сценария.
Сервис db
берёт образ mysql:9.7
и пароль root demo
через MYSQL_ROOT_PASSWORD.
Строку ports
для MySQL не добавляем:
снаружи хоста порт 3306
не нужен учебному сайту.
Файл compose.yaml
собирает три сервиса:
services:
web:
image: nginx
ports:
- "8080:80"
volumes:
- ./site:/var/www/html
- ./default.conf:/etc/nginx/conf.d/default.conf
app:
image: php:8.5-fpm
volumes:
- ./site:/var/www/html
db:
image: mysql:9.7
environment:
MYSQL_ROOT_PASSWORD: demo
Конфиг nginx
и сценарий site/index.php
как в связке без базы:
server {
listen 80;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass app:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Сценарий пока не открывает PDO
и печатает слово hello:
<?php
echo 'hello';
После фонового подъёма
localhost:8080
по-прежнему показывает hello,
а процесс MySQL уже слушает
соседей по DNS-имени db
внутри сети проекта.
Запуск:
docker compose up -d
Опишите проект с сервисами front, php и store на mysql:9.7 без публикации порта базы и ответом ok на 8080.
Запишите внутреннее имя сервиса MySQL, по которому к нему обратится PHP из соседнего контейнера.