← Назад к вопросам

Как называется конфигурация для Docker?

1.0 Junior🔥 131 комментариев
#Soft Skills

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Конфигурация для Docker: полный обзор

В экосистеме Docker существует несколько типов конфигурационных файлов и подходов к управлению настройками контейнеров. Расскажу о каждом подробно.

Dockerfile

Это основной файл, описывающий образ Docker:

FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

EXPOSE 8000

CMD ["python", "main.py"]

Dockerfile содержит инструкции для сборки образа (слои, зависимости, точка входа).

docker-compose.yml

Это файл для оркестрации нескольких контейнеров:

version: "3.9"

services:
  web:
    build: .
    ports:
      - "8000:8000"
    environment:
      - DEBUG=True
      - DATABASE_URL=postgresql://user:pass@db:5432/mydb
    depends_on:
      - db
    volumes:
      - .:/app
  
  db:
    image: postgres:15
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=pass
      - POSTGRES_DB=mydb
    volumes:
      - postgres_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"

volumes:
  postgres_data:

docker-compose.yml (или docker-compose.yaml) — определяет сервисы, сети, тома и их взаимодействие.

.dockerignore

Аналогично .gitignore, исключает файлы из контекста сборки:

__pycache__
*.pyc
.git
.env
.gitignore
node_modules
.pytest_cache
.coverage

Environment файлы (.env)

Для переменных окружения:

# .env
DEBUG=False
DATABASE_URL=postgresql://user:pass@db:5432/mydb
REDIS_URL=redis://redis:6379
SECRET_KEY=your-secret-key-here
# Загрузка в Python
import os
from dotenv import load_dotenv

load_dotenv()
DATABASE_URL = os.getenv("DATABASE_URL")
DEBUG = os.getenv("DEBUG", "False") == "True"

.env.example

Темплат для переменных окружения (без секретов):

DEBUG=False
DATABASE_URL=postgresql://user:password@localhost:5432/dbname
REDIS_URL=redis://localhost:6379
SECRET_KEY=your-secret-key-here
API_KEY=your-api-key

docker.env

Переменные окружения, специфичные для Docker:

# docker.env
PYTHON_UNBUFFERED=1
PYTHONDONTWRITEBYTECODE=1
DEBUG=False

Загрузка в compose:

services:
  web:
    build: .
    env_file:
      - docker.env
      - .env

Конфиг-файлы приложения

# config.py
import os
from dataclasses import dataclass

@dataclass
class Config:
    DEBUG: bool = os.getenv("DEBUG", "False") == "True"
    DATABASE_URL: str = os.getenv("DATABASE_URL", "sqlite:///db.sqlite3")
    REDIS_URL: str = os.getenv("REDIS_URL", "redis://localhost:6379")
    SECRET_KEY: str = os.getenv("SECRET_KEY", "change-me-in-production")
    
    # Для разных сценариев
    class Development:
        DEBUG = True
        DATABASE_URL = "sqlite:///dev.db"
    
    class Production:
        DEBUG = False
        DATABASE_URL = os.getenv("DATABASE_URL")
    
    class Testing:
        DEBUG = True
        DATABASE_URL = "sqlite:///:memory:"
        TESTING = True

# Выбор конфига по переменной окружения
config_name = os.getenv("APP_ENV", "development")
if config_name == "production":
    config = Config.Production()
elif config_name == "testing":
    config = Config.Testing()
else:
    config = Config.Development()

.dockerignore

Исключает ненужные файлы из контекста сборки (уменьшает размер):

# Версионирование
.git
.gitignore
.gitlab-ci.yml
.github

# IDE
.vscode
.idea
*.swp
*.swo
*~

# Python
__pycache__
*.pyc
*.pyo
*.egg-info
.pytest_cache
.coverage
venv/
*.egg

# OS
.DS_Store
.env
.env.local

# Документация
README.md
docs/

# Node
node_modules/
npm-debug.log

# Тесты
tests/
.pytest_cache/

Пример полной структуры проекта

project/
├── Dockerfile
├── docker-compose.yml
├── .dockerignore
├── .env.example
├── docker.env
├── requirements.txt
├── config.py
├── main.py
├── app/
│   ├── __init__.py
│   ├── api/
│   ├── models/
│   └── services/
└── tests/

Команды Docker

# Сборка образа
docker build -t myapp:1.0 .

# Запуск контейнера с переменными окружения
docker run --env-file .env -p 8000:8000 myapp:1.0

# Запуск с docker-compose
docker compose up -d

# Остановка
docker compose down

# Просмотр переменных в контейнере
docker exec <container_id> env

Лучшие практики

  1. Используй .env файлы для локальной разработки, но не коммитай их
  2. Храни секреты в переменных окружения, не в коде
  3. Минимизируй контекст сборки с .dockerignore
  4. Многоэтапные сборки для меньшего размера образа
  5. Версионирование образов (tags: latest, v1.0, v1.1)

В реальных проектах обычно используют комбинацию: Dockerfile для образа, docker-compose.yml для локальной разработки, .env для переменных и конфиг-классы в приложении для управления настройками.