← Назад к вопросам
Какие параметры можно использовать при запуске Docker контейнера?
2.2 Middle🔥 251 комментариев
#DevOps и инфраструктура
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Параметры при запуске Docker контейнера
Я регулярно работаю с Docker при разработке и развертывании приложений. Знаю основные параметры и флаги, которые используются при запуске контейнеров.
Базовая команда
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Основные параметры
1. Управление контейнером
# -d, --detach
# Запустить контейнер в фоновом режиме
docker run -d nginx
# -i, --interactive
# Держать STDIN открытым даже без подключенного терминала
docker run -i ubuntu bash
# -t, --tty
# Выделить pseudo-TTY (терминал)
docker run -it ubuntu bash # -it = интерактивный режим
# --name
# Присвоить имя контейнеру
docker run --name my_app -d nginx
# --rm
# Автоматически удалить контейнер при выходе
docker run --rm ubuntu echo "Hello"
2. Переменные окружения
# -e, --env
# Установить переменные окружения
docker run -e DB_HOST=localhost -e DB_PORT=5432 myapp
# --env-file
# Загрузить переменные из файла
docker run --env-file .env myapp
# Пример .env файла
DB_HOST=localhost
DB_PORT=5432
DB_USER=admin
3. Проксирование портов
# -p, --publish
# Проксировать порты: -p [host_port]:[container_port]
docker run -p 8080:80 nginx
# Локальный порт 8080 -> контейнер порт 80
# Разные protocoles
docker run -p 8000:8000/tcp -p 8001:8001/udp myapp
# Случайный порт хоста
docker run -p :8000 myapp # Автоматически выберет портель
# Привязка к конкретному IP
docker run -p 127.0.0.1:8080:80 nginx
# -P, --publish-all
# Проксировать все exposed порты
docker run -P myapp
4. Подключение томов (volumes)
# -v, --volume
# Подключить директорию хоста в контейнер
docker run -v /host/path:/container/path myapp
# С разрешениями (ro = read-only)
docker run -v /host/path:/container/path:ro myapp
# Именованный том
docker run -v my_volume:/container/path myapp
# --mount (более гибкий способ)
docker run --mount type=bind,source=/host/path,target=/container/path myapp
docker run --mount type=volume,source=my_volume,target=/container/path myapp
# Несколько томов
docker run -v /host/path1:/container/path1 -v /host/path2:/container/path2 myapp
5. Ресурсы процессора и памяти
# -m, --memory
# Лимит памяти
docker run -m 512m myapp
# --memory-swap
# Лимит swap памяти (по умолчанию -m и --memory-swap одинаковы)
docker run -m 512m --memory-swap 1g myapp
# --cpus
# Лимит CPU (1.0 = 1 ядро)
docker run --cpus 2 myapp
# --cpuset-cpus
# Зафиксировать контейнер на определенных ядрах
docker run --cpuset-cpus 0,1 myapp
# --memory-reservation
# Мягкий лимит (не гарантированный)
docker run --memory-reservation 256m myapp
6. Сетевые параметры
# --network
# Выбрать сетевой драйвер
docker run --network bridge myapp # По умолчанию
docker run --network host myapp # Использовать сеть хоста
docker run --network none myapp # Без сети
docker run --network my_network myapp # Пользовательская сеть
# --hostname
# Установить hostname контейнера
docker run --hostname myapp myapp
# --link (deprecated, используй networks)
# Связать с другим контейнером
docker run --link db:db myapp
# --dns
# Установить DNS серверы
docker run --dns 8.8.8.8 --dns 8.8.4.4 myapp
# --expose
# Expose порты (не проксирует, только документирует)
docker run --expose 5000 myapp
7. Монтирование файловых систем
# --tmpfs
# Создать tmp файловую систему в памяти
docker run --tmpfs /tmp:size=100m myapp
# --read-only
# Сделать корневую файловую систему read-only
docker run --read-only myapp
8. Работающий процесс
# --user
# Запустить от конкретного пользователя
docker run --user nobody myapp
docker run --user 1000 myapp # По UID
# --workdir
# Установить рабочую директорию
docker run --workdir /app myapp
# --entrypoint
# Переопределить ENTRYPOINT
docker run --entrypoint /bin/bash myapp -c "echo hello"
# COMMAND
# Переопределить CMD
docker run myapp python script.py
9. Переменные и метаданные
# --label
# Добавить метаданные
docker run --label version=1.0 --label env=prod myapp
# --restart
# Политика перезагрузки
docker run --restart no myapp # Не перезагружать
docker run --restart always myapp # Всегда перезагружать
docker run --restart unless-stopped myapp # Пока не остановлен
docker run --restart on-failure myapp # При неудачном выходе
docker run --restart on-failure:5 myapp # Максимум 5 попыток
10. Логирование
# --log-driver
# Выбрать драйвер логирования
docker run --log-driver json-file myapp
docker run --log-driver syslog myapp
# --log-opt
# Опции логирования
docker run --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 myapp
11. Привилегии и безопасность
# --privileged
# Дать расширенные привилегии
docker run --privileged myapp
# --cap-add, --cap-drop
# Добавить/удалить capabilities
docker run --cap-add SYS_ADMIN myapp
docker run --cap-drop ALL myapp
# --security-opt
# Опции безопасности
docker run --security-opt no-new-privileges myapp
12. Здоровье контейнера
# --health-cmd
# Команда для проверки здоровья
docker run --health-cmd="curl localhost" myapp
# --health-interval
# Интервал между проверками
docker run --health-interval=10s myapp
# --health-timeout
# Timeout проверки
docker run --health-timeout=5s myapp
# --health-retries
# Количество неудачных проверок перед unhealthy
docker run --health-retries=3 myapp
Практический пример
# Запуск Python приложения с полным набором параметров
docker run \
--name myapp \
-d \
-p 8000:8000 \
-e DEBUG=false \
-e DB_HOST=db \
--env-file .env \
-v $(pwd)/src:/app/src \
-v logs:/app/logs \
--network myapp_network \
--link db:db \
-m 512m \
--cpus 1 \
--restart unless-stopped \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
--health-cmd="curl -f http://localhost:8000/health || exit 1" \
--health-interval=10s \
--health-timeout=5s \
--health-retries=3 \
myapp:latest
Docker Compose альтернатива
Для сложных конфигураций лучше использовать docker-compose:
version: '3.8'
services:
app:
image: myapp:latest
container_name: myapp
ports:
- "8000:8000"
environment:
- DEBUG=false
- DB_HOST=db
env_file:
- .env
volumes:
- ./src:/app/src
- logs:/app/logs
networks:
- myapp_network
depends_on:
- db
restart: unless-stopped
deploy:
resources:
limits:
memory: 512M
cpus: '1'
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 10s
timeout: 5s
retries: 3
db:
image: postgres:14
networks:
- myapp_network
networks:
myapp_network:
volumes:
logs:
Команды для управления запущенными контейнерами
# Просмотр логов
docker logs myapp
docker logs -f myapp # Follow (live)
# Выполнить команду в контейнере
docker exec -it myapp bash
docker exec myapp python script.py
# Просмотр процессов
docker ps
docker ps -a # Все контейнеры
# Остановка и удаление
docker stop myapp
docker rm myapp
Резюме основных параметров
| Параметр | Описание | Пример |
|---|---|---|
| -d | Фоновый режим | -d |
| -it | Интерактивный | -it |
| -p | Порты | -p 8080:80 |
| -v | Томы | -v /host:/container |
| -e | Переменные | -e KEY=value |
| -m | Память | -m 512m |
| --cpus | CPU | --cpus 2 |
| --name | Имя | --name app |
| --network | Сеть | --network mynet |
| --restart | Перезагрузка | --restart always |
В своей работе я часто использую docker-compose для локальной разработки и docker run для быстрого тестирования отдельных контейнеров.