Основы Docker
Урок 3~12 минут
Контейнеры: запуск, управление, отладка
Контейнер — запущенный экземпляр образа. Научимся управлять жизненным циклом контейнера.
Жизненный цикл
Попробуй в симуляции
created → running → paused → running
↓
stopped → removed
bash
docker create nginx # создать (не запускать)
docker start <id> # запустить созданный
docker run nginx # create + start в одном
docker pause <id> # заморозить процессы
docker unpause <id> # разморозить
docker stop <id> # SIGTERM → SIGKILL (graceful)
docker kill <id> # SIGKILL немедленно
docker rm <id> # удалить остановленный
docker rm -f <id> # принудительно (даже запущенный)docker run — ключевые флаги
bash
# Имя контейнера
docker run --name my-nginx nginx
# Фоновый режим
docker run -d nginx
# Проброс порта: host:container
docker run -d -p 8080:80 nginx
# Переменные окружения
docker run -e NODE_ENV=production -e PORT=3000 node-app
# Автоматическое удаление при остановке
docker run --rm ubuntu echo "hello"
# Ограничения ресурсов
docker run --memory 512m --cpus 0.5 nginxВойти в контейнер
bash
# Новый интерактивный контейнер
docker run -it ubuntu bash
# В работающий контейнер
docker exec -it my-nginx bash
docker exec -it my-nginx sh # если bash недоступен
# Выполнить команду без входа
docker exec my-nginx nginx -t # проверить конфиг nginx
docker exec my-postgres psql -U postgres -c "\l"Логи
bash
docker logs <id> # все логи
docker logs -f <id> # live, как tail -f
docker logs --tail 50 <id> # последние 50 строк
docker logs --since 1h <id> # за последний часУправление несколькими контейнерами
bash
# Список
docker ps # работающие
docker ps -a # все
# Остановить/удалить все
docker stop $(docker ps -q)
docker rm $(docker ps -aq)
# Информация
docker inspect <id> # все детали в JSON
docker stats # реальное использование CPU/RAM
docker top <id> # процессы внутриПеременные окружения
bash
# Через флаг
docker run -e DATABASE_URL=postgres://... app
# Из файла
docker run --env-file .env appВнутри контейнера доступны как обычные env переменные.
Volumes — данные между запусками
Контейнер по умолчанию не сохраняет данные — всё теряется при удалении. Для хранения данных нужны volumes:
bash
# Bind mount — папка хоста ↔ папка контейнера
docker run -v $(pwd):/app node-app
# Named volume — управляемый Docker'ом
docker run -v pgdata:/var/lib/postgresql/data postgresПодробнее о volumes — в модуле 3 (Docker Compose).
Networking — порты
bash
# Один порт
docker run -p 8080:80 nginx
# Несколько портов
docker run -p 8080:80 -p 8443:443 nginx
# Все порты на случайные хостовые
docker run -P nginx # docker ps покажет назначенныеФормат: -p host_port:container_port. Если хост:контейнер, запросы на localhost:8080 попадают в порт 80 контейнера.
В следующем уроке — Dockerfile: как создавать свои образы.
docker run создаёт и сразу запускает. docker start — только запускает существующий. exec — войти в работающий.
🔄
Жизненный цикл контейнера○
нет контейнера
ДОСТУПНЫЕ КОМАНДЫ
Граф состояний:
none → running (run)none → created (create)
created → running (start)
running → paused (pause)
running → stopped (stop)
stopped → removed (rm)
🎯
Миссия 1 из 4
Как запустить контейнер и войти в его bash?