Показаны различия между двумя версиями страницы.
— |
методология_devops:ручное_развертывание_контейнеров:start [2025/05/31 20:35] (текущий) kirill создано |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | # Ручное развертывание контейнеров | ||
+ | ## Введение | ||
+ | |||
+ | * **Контекст: | ||
+ | * **Сценарии использования: | ||
+ | * Простые одноконтейнерные приложения. | ||
+ | * Тестирование и отладка. | ||
+ | * Обучение основам работы с Docker. | ||
+ | * Среды, где оркестрация избыточна или невозможна. | ||
+ | * **Основные инструменты: | ||
+ | |||
+ | ## Этапы ручного развертывания контейнера | ||
+ | |||
+ | 1. **Подготовка образа: | ||
+ | * **Проверка локальных образов: | ||
+ | * **Загрузка образа из реестра (например, | ||
+ | |||
+ | 2. **Запуск контейнера (`docker run`):** Создание и запуск экземпляра образа. Необходимо настроить различные параметры запуска. | ||
+ | |||
+ | ## Параметры команды `docker run` (ключевые для ручного развертывания) | ||
+ | |||
+ | * **`--name < | ||
+ | * **`-d` или `--detach`: | ||
+ | * **`-p` или `--publish [hostPort: | ||
+ | * `hostPort`: Порт на хостовой машине (опционально). Если не указан, | ||
+ | * `containerPort`: | ||
+ | * `/tcp` или `/udp`: Протокол (по умолчанию TCP). | ||
+ | * **Примеры: | ||
+ | * `docker run -p 80:80 nginx` (пробросить порт 80 контейнера на порт 80 хоста) | ||
+ | * `docker run -p 8080:80 nginx` (пробросить порт 80 контейнера на порт 8080 хоста) | ||
+ | * `docker run -p 127.0.0.1: | ||
+ | * **`-v` или `--volume [host_path: | ||
+ | * **Bind mounts (`host_path: | ||
+ | * `host_path`: | ||
+ | * `container_path`: | ||
+ | * `:ro`: Монтирование только для чтения (read-only). | ||
+ | * `:rw`: Монтирование для чтения и записи (read-write - по умолчанию). | ||
+ | * **Пример: | ||
+ | * **Named volumes (`< | ||
+ | * `< | ||
+ | * `container_path`: | ||
+ | * **Пример: | ||
+ | * **`-e` или `--env < | ||
+ | * **Пример: | ||
+ | * **`--network < | ||
+ | * **Создание сетей: | ||
+ | * **Пример: | ||
+ | * **`--restart < | ||
+ | * **Пример: | ||
+ | * **`--rm`:** Автоматически удаляет контейнер после его остановки. Полезно для временных контейнеров. | ||
+ | * **Пример: | ||
+ | * **`--entrypoint < | ||
+ | * **`--cmd < | ||
+ | * **`-u` или `--user < | ||
+ | |||
+ | ## Управление запущенными контейнерами | ||
+ | |||
+ | * **Просмотр запущенных контейнеров: | ||
+ | * `-a` или `--all`: Показать все контейнеры (включая остановленные). | ||
+ | * **Остановка контейнера: | ||
+ | * Отправляет сигнал `SIGTERM` контейнеру и дает время на корректное завершение. | ||
+ | * **Принудительная остановка контейнера: | ||
+ | * Отправляет сигнал `SIGKILL`, немедленно завершая процесс. | ||
+ | * **Перезапуск контейнера: | ||
+ | * **Просмотр логов контейнера: | ||
+ | * `-f` или `--follow`: Следить за логами в реальном времени. | ||
+ | * `--tail < | ||
+ | * **Выполнение команд внутри запущенного контейнера: | ||
+ | * `-it`: Интерактивный терминал (pseudo-TTY). | ||
+ | * **Пример: | ||
+ | * **Копирование файлов между хостом и контейнером: | ||
+ | * **Удаление остановленного контейнера: | ||
+ | * `-f` или `--force`: Принудительное удаление запущенного контейнера (не рекомендуется). | ||
+ | |||
+ | ## Примеры ручного развертывания | ||
+ | |||
+ | * **Запуск веб-сервера Nginx с пробросом порта 80:** | ||
+ | ```bash | ||
+ | docker run --name my-nginx -d -p 80:80 nginx | ||
+ | ``` | ||
+ | * **Запуск базы данных PostgreSQL с установкой пароля через переменную окружения и монтированием тома для данных: | ||
+ | ```bash | ||
+ | docker run --name my-postgres -d -e POSTGRES_PASSWORD=mysecret -v pg_data:/ | ||
+ | ``` | ||
+ | (Предполагается, | ||
+ | * **Запуск простого Python-приложения из локального образа `my-python-app` в фоновом режиме: | ||
+ | ```bash | ||
+ | docker run --name my-app -d my-python-app | ||
+ | ``` | ||
+ | (Если приложение слушает порт, необходимо добавить `-p`) | ||
+ | * **Запуск контейнера с автоматическим удалением после остановки: | ||
+ | ```bash | ||
+ | docker run --rm alpine echo "This container will be removed" | ||
+ | ``` | ||
+ | |||
+ | ## Ограничения ручного развертывания | ||
+ | |||
+ | * **Сложность управления множеством контейнеров: | ||
+ | * **Отсутствие автоматизации: | ||
+ | * **Сложность настройки связей между контейнерами: | ||
+ | * **Нет автоматического восстановления после сбоев: | ||
+ | * **Неудобно для сложных приложений: | ||
+ | |||
+ | ## Когда ручное развертывание может быть полезным | ||
+ | |||
+ | * **Простые одноконтейнерные приложения без сложных зависимостей.** | ||
+ | * **Локальная разработка и тестирование отдельных контейнеров.** | ||
+ | * **Изучение основ работы с Docker и отладка контейнеров.** | ||
+ | * **Среды с ограниченными ресурсами или специфическими требованиями, | ||
+ | |||
+ | ## Заключение | ||
+ | |||
+ | Ручное развертывание контейнеров предоставляет прямой контроль над запуском и управлением отдельными контейнерами с помощью командной строки Docker. Хотя оно полезно для простых сценариев и понимания основ, для более сложных многоконтейнерных приложений рекомендуется использовать инструменты оркестрации или композиции, | ||
+ | |||
+ | ## Следующие шаги | ||
+ | |||
+ | * Практическое выполнение команд `docker run` с различными параметрами. | ||
+ | * Развертывание простых приложений (например, | ||
+ | * Изучение команд управления запущенными контейнерами (`docker ps`, `docker stop`, `docker start`, `docker logs`, `docker exec`). | ||
+ | * Понимание ограничений ручного развертывания и необходимости использования инструментов оркестрации для сложных приложений. |