Введение
Этот учебник предоставляет исчерпывающее руководство по работе с Docker Compose, уделяя особое внимание ошибке "docker: 'compose' is not a docker command". Вы узнаете, как установить и настроить Docker Compose, создавать и управлять вашими многоконтейнерными приложениями, а также изучите лучшие практики для эффективного использования Docker Compose.
Основы Docker
Введение в контейнеризацию Docker
Docker — это мощная технология контейнеризации, которая революционизирует развертывание и разработку приложений. Технология контейнеризации позволяет разработчикам упаковывать приложения со всеми их зависимостями, обеспечивая согласованную производительность в различных вычислительных средах.
Основные понятия Docker
Что такое Docker?
Docker — это открытая платформа для контейнеризации, которая позволяет разработчикам автоматизировать развертывание, масштабирование и управление приложениями. Она предоставляет лёгкую альтернативу традиционным виртуальным машинам, создавая изолированные среды, называемые контейнерами.
Ключевые компоненты Docker
| Компонент | Описание |
|---|---|
| Docker Engine | Основная среда выполнения для создания и запуска контейнеров |
| Docker Image | Читаемый шаблон, содержащий код приложения и зависимости |
| Docker Container | Запускаемый экземпляр Docker образа |
| Dockerfile | Текстовый файл, определяющий инструкции сборки контейнера |
Архитектура Docker
graph TD
A[Клиент Docker] --> B[Дэмон Docker]
B --> C[Среда выполнения контейнеров]
B --> D[Регистр образов]
D --> E[Docker Hub]
Основные команды и примеры Docker
Установка Docker на Ubuntu 22.04
## Обновить пакеты системы
sudo apt update
## Установить зависимости Docker
sudo apt install apt-transport-https ca-certificates curl software-properties-common
## Добавить официальный ключ GPG Docker
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
## Настроить репозиторий Docker
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
## Установить Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
Основные операции с Docker
## Скачать образ из Docker Hub
## Список доступных образов
## Запустить контейнер
## Список запущенных контейнеров
## Остановить контейнер
Преимущества технологии контейнеров
Контейнеризация Docker предоставляет несколько преимуществ:
- Согласованные среды приложений
- Более быстрое развертывание и масштабирование
- Снижение потребления ресурсов
- Улучшенный рабочий процесс разработки
- Независимость от платформы
Сценарии использования Docker контейнеров
Docker широко используется в:
- Архитектуре микросервисов
- Непрерывной интеграции/непрерывном развертывании (CI/CD)
- Разработке облачных приложений
- Средах разработки и тестирования
Поток работы Docker Compose
Понимание Docker Compose
Docker Compose — это инструмент для определения и запуска многоконтейнерных приложений Docker. Он позволяет разработчикам использовать файл YAML для настройки сервисов приложения, сетей и томов, упрощая процесс управления сложными контейнерными средами.
Архитектура Docker Compose
graph TD
A[Docker Compose] --> B[docker-compose.yml]
B --> C[Сервис 1]
B --> D[Сервис 2]
B --> E[Сервис 3]
C --> F[Сеть]
D --> F
E --> F
Настройка Docker Compose
Структура файла YAML
| Ключ | Описание |
|---|---|
| version | Версия формата файла Compose |
| services | Определение отдельных контейнеров |
| networks | Настройка сетевого взаимодействия контейнеров |
| volumes | Управление хранением данных |
Практический пример: Развертывание веб-приложения
Пример docker-compose.yml
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./website:/usr/share/nginx/html
database:
image: postgres:13
environment:
POSTGRES_PASSWORD: secretpassword
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
Команды Docker Compose
## Установка Docker Compose на Ubuntu 22.04
sudo apt update
sudo apt install docker-compose
## Проверка файла compose
docker-compose config
## Запуск многоконтейнерного приложения
docker-compose up -d
## Просмотр запущенных контейнеров
docker-compose ps
## Остановка и удаление контейнеров
docker-compose down
Техники оркестрации сервисов
Docker Compose позволяет выполнять расширенную оркестрацию сервисов:
- Определение зависимостей между контейнерами
- Управление переменными окружения
- Настройка сетевых подключений
- Управление порядком запуска контейнеров
Масштабируемость и гибкость
Многоконтейнерные приложения получают преимущества:
- Модульной архитектуры
- Простого горизонтального масштабирования
- Упрощенного управления конфигурацией
- Согласованных сред разработки
Расширенные методы работы с Docker
Настройка сетей Docker
Типы сетей
| Режим сети | Описание |
|---|---|
| Bridge | По умолчанию режим сети |
| Host | Прямое использование сети хоста |
| Overlay | Межхостовое взаимодействие |
| Macvlan | Назначение MAC-адреса |
graph TD
A[Сеть Docker] --> B[Сеть Bridge]
A --> C[Сеть Host]
A --> D[Сеть Overlay]
A --> E[Сеть Macvlan]
Создание пользовательской сети
## Создание пользовательской сети bridge
docker network create --driver bridge custom_network
## Список сетей
docker network ls
## Просмотр подробностей сети
docker network inspect custom_network
Управление ресурсами контейнеров
Ограничения ресурсов
services:
webapp:
image: nginx
deploy:
resources:
limits:
cpus: "0.50"
memory: 512M
reservations:
cpus: "0.25"
memory: 256M
Управление томами Docker
## Создание именованного тома
docker volume create app_data
## Подключение тома к контейнеру
docker run -v app_data:/app/data nginx
## Список томов
docker volume ls
## Удаление неиспользуемых томов
docker volume prune
Оптимизация Dockerfile
## Пример многоступенчатой сборки
FROM golang:1.17 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp
FROM alpine:latest
COPY --from=builder /app/myapp /usr/local/bin
ENTRYPOINT ["myapp"]
Расширенная отладка
## Просмотр логов контейнера
## Мониторинг ресурсов в реальном времени
## Подробности процесса контейнера
Улучшения безопасности
Параметры безопасности среды выполнения
## Запуск контейнера с файловой системой только для чтения
docker run --read-only nginx
## Ограничение возможностей контейнера
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE nginx
Мониторинг производительности
## Информация о Docker в системе
docker system info
## Анализ использования дискового пространства
docker system df
## Удаление неиспользуемых ресурсов
docker system prune -a
Резюме
К концу этого руководства вы глубоко поймете Docker Compose и научитесь устранять ошибку "docker: 'compose' is not a docker command". Вы сможете уверенно настраивать, управлять и масштабировать ваши приложения Docker Compose, следуя отраслевым лучшим практикам для оптимальной производительности и поддерживаемости.



