Переменные подключения в Docker
Переменные подключения передают
сценарию имя сервера,
базу и пароль.
Значения задают
в блоке environment
у сервиса app,
а PHP читает их
функцией getenv
без прошивки секретов
в файл на диске.
Соединение PDO
в этом шаге ещё не открываем.
Сервис db
на mysql:9.7
с базой app
и пользователем app.
У app
четыре переменные
для будущего PDO.
Файл compose.yaml:
services:
web:
image: nginx
ports:
- "8080:80"
volumes:
- ./site:/var/www/html
- ./default.conf:/etc/nginx/conf.d/default.conf
app:
build: .
environment:
DB_HOST: db
DB_NAME: app
DB_USER: app
DB_PASSWORD: demo
volumes:
- ./site:/var/www/html
depends_on:
- db
db:
image: mysql:9.7
environment:
MYSQL_ROOT_PASSWORD: demo
MYSQL_DATABASE: app
MYSQL_USER: app
MYSQL_PASSWORD: demo
Образ PHP собирают
с pdo_mysql
в Dockerfile:
FROM php:8.5-fpm
RUN docker-php-ext-install pdo_mysql
Конфиг nginx
передаёт .php
в FPM по имени app:
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;
}
}
Сценарий пока только печатает хост из окружения:
<?php
echo getenv('DB_HOST');
После подъёма
страница по localhost:8080
показывает строку db -
имя сервиса MySQL
в сети compose.
Запуск:
docker compose up -d --build
Задайте сервису worker переменные DB_HOST со значением data и выведите это значение на отдельной странице сценария.
Убедитесь в браузере, что на экране видно имя хоста из окружения, а не пароль базы.