Основы Docker
1Что такое Docker и зачем он нужен2Образы Docker: теги, слои, реестры3Контейнеры: запуск, управление, отладка← вы здесь
Урок 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?