1. Два синтаксиса: legacy vs management commands
Начиная с Docker 1.13 (2017) был введён управленческий синтаксис (management commands), группирующий команды по объектам. Старый синтаксис всё ещё работает для обратной совместимости, но новый более явен и расширяем.
| Из лекции (старый / сокращённый) | Современный (management commands) | Статус |
|---|---|---|
docker ps |
docker container ls |
Оба работают |
docker ps -a |
docker container ls -a |
Оба работают |
docker images |
docker image ls |
Оба работают |
docker rmi IMAGE |
docker image rm IMAGE |
Оба работают |
docker rm $(docker ps -aq) |
docker container prune |
Новый безопаснее (с подтверждением) |
docker inspect |
docker container inspect / docker image inspect |
Оба работают; новый явнее |
2. docker commit — учебный vs production подход
В лекции для создания образа используется docker commit. Это удобно для демонстрации, но в реальных проектах не применяется.
Из лекции (docker commit)
# Старый способ (из лекции)
docker run -it ubuntu bash
# ... вносим изменения ...
# exit
docker commit <ID> myimage:v1
# Проблемы:
# - нельзя воспроизвести
# - нет истории изменений
# - не версионируется в git
# - большой размер образа
Современный (Dockerfile)
# Dockerfile
FROM ubuntu
RUN apt-get update && apt-get install -y curl
COPY config.txt /etc/app/
# Сборка
docker build -t myimage:v1 .
# Преимущества:
# - воспроизводимо
# - история в git
# - слои кэшируются
# - понятно, что внутри
Правило:
docker commit — только для отладки и экспериментов. В CI/CD, production и командной разработке — исключительно Dockerfile. Подробнее — в уроке 03.
3. docker attach vs docker exec
В лекции упоминается docker attach для подключения к контейнеру. Современная практика — использовать docker exec.
| Параметр | docker attach (старый) | docker exec -it (новый) |
|---|---|---|
| Что открывает | stdin/stdout PID 1 | Новый процесс в контейнере |
| Ctrl+C | Убивает PID 1 → контейнер останавливается | Убивает только дочерний процесс |
| Рекомендуется | Нет (риск случайной остановки) | Да — безопаснее |
# Терминал
# Из лекции (рискованно)
docker attach mynginx # Ctrl+C остановит nginx!
# Современный способ (безопасно)
docker exec -it mynginx bash # Ctrl+C или exit — контейнер продолжит работу
4. Bulk delete (массовое удаление)
# Терминал
# Старый способ (shell-подстановка, из лекции)
docker rm $(docker ps -aq)
# Современный — специализированные команды
docker container prune # удалить все остановленные контейнеры
docker image prune # удалить висячие образы
docker image prune -a # все неиспользуемые образы
docker system prune # всё неиспользуемое (контейнеры + образы + сети + кэш)
docker system prune --volumes # то же + тома
docker system prune — мощный инструмент для очистки. Запрашивает подтверждение и показывает, сколько места освободится. Полезно на dev-машинах, где накапливается много артефактов.