Appearance
Docker
Назначение
Docker используется на сервере staging для изолированного запуска всех разрабатываемых сервисов, для их отладки, тестирования и демонстрации:
keycloak— сервис аутентификации и авторизации (Keycloak)keycloak_db— сервис c базой данных для Keycloak (PostgreSQL)api_aceramica— сервис бэкенда (FastAPI)db_aceramica— сервис c базой данных для бэкенда (PostgreSQL)aceramica_adminer_db— интерфейс для администрирования БД (Adminer)frontend-admin— сервис админ-панели на (Nuxt 3)
Сервис Nginx запущен напрямую в системе, не в контейнерах. Такой подход упрощает настройку HTTPS, постоянную работу cron-задач и уменьшает время отклика сайта
Состав и описание контейнеров
1. keycloak
- Образ:
keycloak:26.2.4 - Порты:
8080:8080 - Данные сохраняются в volume
./docker/volumes/keycloak_data - Переменные окружения в файле
./services/keycloak/.env - Связь с базой данных Keycloak производится через сеть
keycloak_network
2. keycloak_db
- Образ:
postgres:latest - Порты:
5432:5432 - Данные сохраняются в volume
./docker/volumes/keycloak_db_data - Переменные окружения в файле
./services/database/.env.keycloak_db - Связь с Keycloak производится через сеть
keycloak_network
3. frontend-admin
- Контекст:
./- берёт файлы приложения из директории./services/frontend/admin/ - Порты:
3000:3000
Файлы и расположение
1. Файл docker-compose.yml для запуска всех сервисов
Находится в директории:
bash
/var/www/docker-compose.ymlПример структуры:
yaml
services:
keycloak_db:
extends:
file: ./docker-compose.db.yml
service: keycloak_db
keycloak:
extends:
file: ./docker-compose.keycloak.yml
service: keycloak
frontend-admin:
extends:
file: ./services/frontend/admin/docker-compose.yml
service: frontend-admin
api_aceramica:
extends:
file: ./services/backend/docker-compose.yml
service: api_aceramica
db_aceramica:
extends:
file: ./services/backend/docker-compose.yml
service: db_aceramica
aceramica_adminer_db:
extends:
file: ./services/backend/docker-compose.yml
service: aceramica_adminer_db
networks:
keycloak_network:
external: true2. Файл docker-compose.keycloak.yml для запуска сервиса Keycloak
Находится в директории:
bash
/var/www/docker-compose.keycloak.ymlПример структуры:
yaml
services:
keycloak:
image: quay.io/keycloak/keycloak:26.2.4
container_name: keycloak
command:
- start-dev
env_file: ./services/keycloak/.env
volumes:
- ./docker/volumes/keycloak_data:/var/lib/keycloak
ports:
- '8080:8080'
networks:
- keycloak_network
networks:
keycloak_network:
external: true3. Файл docker-compose.db.yml для запуска сервиса c базами данных
Находится в директории:
bash
/var/www/docker-compose.db.ymlПример структуры:
yaml
services:
keycloak_db:
image: postgres:latest
restart: always
env_file: ./services/database/.env.keycloak_db
volumes:
- ./docker/volumes/keycloak_db_data:/var/lib/postgresql/data
networks:
- keycloak_network
ports:
- '5432:5432'
networks:
keycloak_network:
external: true4. Файл docker-compose.yml для запуска сервиса frontend-admin
Находится в директории:
bash
/var/www/services/frontend/admin/docker-compose.ymlПример структуры:
yaml
services:
frontend-admin:
build:
context: ./
ports:
- '3000:3000'5. Файл docker-compose.yml для запуска сервисов бэкенда - api_aceramica, db_aceramica и aceramica_adminer_db
Находится в директории:
bash
/var/www/services/backend/docker-compose.ymlПример структуры:
yaml
services:
api_aceramica:
build: ''
command:
- /bin/sh
- -c
- |
echo "wait for 5 seconds"
sleep 5
uvicorn src.run:application --host 0.0.0.0 --port 2309 --reload --timeout-keep-alive 1000
volumes:
- .:/src/app
env_file:
- src/.env
logging:
options:
max-size: 10m
deploy:
resources:
reservations:
memory: 20M
depends_on:
- db_aceramica
networks:
- backend_network
ports:
- 2309:2309
db_aceramica:
restart: always
image: postgres:15.3
container_name: db_aceramica
env_file:
- src/.env
volumes:
- postgres_data:/var/lib/postgresql/data/
ports:
- 8585:8080
logging:
driver: none
networks:
- backend_network
aceramica_adminer_db:
container_name: aceramica_adminer_db
image: adminer
restart: always
depends_on:
- db_aceramica
networks:
- backend_network
ports:
- 8110:8080
volumes:
postgres_data:
networks:
backend_network:
external: trueКоманды управления
Посмотреть статус всех сервисов
bash
docker psЗапуск сервисов
Запуск всех сервисов
bash
cd /var/www/
docker compose up -dЗапуск конкретного сервиса
bash
docker compose -f docker-compose.keycloak.yml up -dПросмотр логов
Просмотр логов конкретного сервиса
bash
docker logs <container_id>Просмотр логов конкретного сервиса в режиме реального времени
bash
docker logs -f <container_id>Перезапуск контейнеров
Перезапуск всех сервисов
bash
docker compose restartПерезапуск конкретного сервиса
bash
docker compose -f docker-compose.keycloak.yml restartОстановка и удаление всех контейнеров (без удаления данных)
Остановка всех сервисов
bash
docker compose downОстановка конкретного сервиса
bash
docker compose -f docker-compose.keycloak.yml down💡 Данные хранятся в volumes ./docker/volumes/ и не будут потеряны при остановке или пересборке контейнеров
Примечание
Чаще используются именно команды для запуска и перезапуска конкретного сервиса, а не команды для взаимодействия со всеми сервисами, для гибкости в управлении контейнерами
Т.е например если нужно перезапустить сервис keycloak, то используется команда:
bash
docker compose -f docker-compose.keycloak.yml restartа не:
bash
docker compose restart