# Инструкция по Docker и Docker Compose ## Что такое Docker Docker — это платформа для разработки, доставки и запуска приложений в контейнерах. Контейнер — это легковесный, изолированный исполняемый пакет, который включает всё необходимое для работы программы: код, runtime, системные инструменты, библиотеки и настройки. ### Основные преимущества - Изолированность приложений - Портативность (работает везде, где есть Docker) - Быстрый деплой и масштабирование - Эффективное использование ресурсов ## Основные команды Docker ```bash # Сборка образа из Dockerfile docker build -t my-image . # Запуск контейнера docker run -d -p 8080:80 --name my-container my-image # Список запущенных контейнеров docker ps # Список всех контейнеров (включая остановленные) docker ps -a # Остановка контейнера docker stop my-container # Удаление контейнера docker rm my-container # Удаление образа docker rmi my-image # Просмотр логов контейнера docker logs -f my-container ``` ## Docker Compose Docker Compose — это инструмент для определения и запуска многоконтейнерных приложений. С помощью YAML-файла вы настраиваете сервисы, сети и тома, а затем запускаете всё одной командой. ### Пример docker-compose.yml ```yaml version: '3.8' services: web: image: nginx:latest ports: - "8080:80" volumes: - ./html:/usr/share/nginx/html restart: unless-stopped db: image: postgres:15 environment: POSTGRES_USER: user POSTGRES_PASSWORD: password POSTGRES_DB: mydb volumes: - db_data:/var/lib/postgresql/data restart: unless-stopped volumes: db_data: ``` ### Основные команды Docker Compose ```bash # Запуск приложения в фоне docker-compose up -d # Остановка и удаление контейнеров, сетей, томов docker-compose down # Просмотр логов сервисов docker-compose logs -f # Масштабирование сервиса (например, 3 инстанса веб) docker-compose up --scale web=3 -d # Пересборка образов после изменения Dockerfile docker-compose up -d --build # Просмотр запущенных сервисов docker-compose ps ``` ## Лучшие практики 1. **Используйте официальные образы** с Docker Hub как базу. 2. **Не храните секреты в образе** — используйте переменные окружения или Docker secrets. 3. **Минимизируйте количество слоёв** в Dockerfile. 4. **Добавляйте .dockerignore** чтобы исключить ненужные файлы из контекста сборки. 5. **Указывайте конкретные версии** образов (например, `nginx:1.25-alpine` вместо `nginx:latest`). 6. **Для продакшена используйте многоступенчатые сборки** (multi-stage builds) чтобы уменьшить размер итогового образа. 7. **Регулярно обновляйте образы** и проверяйте уязвимости (например, с помощью `docker scan` или Trivy). ## Полезные ссылки - Официальная документация Docker: https://docs.docker.com/ - Docker Compose reference: https://docs.docker.com/compose/ - Лучшие практики написания Dockerfile: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/ - Примеры приложений: https://github.com/docker/awesome-compose --- *Инструкция подготовлена для быстрого старта с Docker и Docker Compose.*