⚖️ Старый vs Новый подход

Устаревшие паттерны из лекции → актуальный Docker CLI

⚡ Главное: что изменилось в Docker CLI

  • docker imagesdocker image ls (менеджмент-синтаксис)
  • docker psdocker container ls
  • docker commit из лекции → в продакшне только Dockerfile
  • docker rm $(docker ps -aq)docker container prune

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-машинах, где накапливается много артефактов.
← К оглавлению урока