🔖 Справочник: операции с Docker-контейнерами

⚡ Ключевые команды (шпаргалка)

# Терминал
docker run -d --name myapp nginx          # запуск в фоне с именем
docker ps / docker ps -a                   # список контейнеров
docker exec -it myapp bash                 # войти в контейнер
docker logs -f myapp                       # логи в реальном времени
docker cp file.txt myapp:/dst/             # копировать файл в контейнер
docker stop myapp && docker rm myapp       # остановить и удалить

1. Управление контейнерами

docker run — создать и запустить

# Терминал
docker run [OPTIONS] IMAGE [COMMAND]

# Основные флаги:
#   -d            фоновый режим (detached)
#   --name NAME   задать имя контейнера
#   -it           интерактивный режим + псевдотерминал
#   --rm          удалить контейнер автоматически после завершения
#   -e KEY=VALUE  переменная окружения
#   -p HOST:CONT  пробросить порт (хост:контейнер)
#   -v SRC:DST    смонтировать том или директорию

# Примеры:
docker run ubuntu                                # запустить и сразу завершится
docker run -it ubuntu bash                       # интерактивный bash
docker run -d --name mynginx nginx               # nginx в фоне
docker run -d --name mynginx -p 8080:80 nginx    # с проброшенным портом
docker run -d --name myapp -e DEBUG=true myimage # с переменной окружения
docker run -d --name myapp --rm ubuntu tail -f /dev/null  # удалится при остановке

docker create, start, stop, restart, kill

# Терминал
docker create ubuntu                  # только создать (не запускать)
docker start myapp                    # запустить созданный/остановленный
docker stop myapp                     # graceful stop (SIGTERM → SIGKILL через 10 с)
docker stop -t 30 myapp               # ждать 30 секунд перед SIGKILL
docker kill myapp                     # немедленный SIGKILL
docker restart myapp                  # перезапустить
docker pause myapp                    # заморозить процессы
docker unpause myapp                  # разморозить

docker rm — удаление контейнеров

# Терминал
docker rm myapp                       # удалить остановленный контейнер
docker rm -f myapp                    # принудительно (даже работающий)
docker rm $(docker ps -aq)            # удалить все остановленные контейнеры
docker container prune                # удалить все остановленные (с подтверждением)

2. Инспектирование

# Терминал
docker ps                             # работающие контейнеры
docker ps -a                          # все контейнеры
docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"  # своя колонка

docker logs myapp                     # весь журнал
docker logs -f myapp                  # следить в реальном времени
docker logs --tail 50 myapp           # последние 50 строк
docker logs --since 5m myapp          # логи за последние 5 минут

docker top myapp                      # процессы внутри контейнера
docker diff myapp                     # изменения файловой системы (A/C/D)
docker inspect myapp                  # полный JSON с метаданными
docker inspect -f '{{.NetworkSettings.IPAddress}}' myapp  # только IP-адрес
docker stats myapp                    # использование CPU/RAM/сеть в реальном времени

3. Взаимодействие с контейнером

# Терминал
# exec — выполнить команду в работающем контейнере
docker exec myapp ls /                           # одна команда
docker exec -it myapp bash                       # открыть bash-сессию
docker exec -it myapp sh                         # sh (если bash не установлен)
docker exec myapp cat /etc/os-release            # без интерактива

# attach — подключиться к PID 1 (осторожно: Ctrl+C остановит контейнер)
docker attach myapp

# cp — копирование файлов
docker cp ./local-file.txt myapp:/app/           # хост → контейнер
docker cp myapp:/app/config.yaml ./              # контейнер → хост

# export — файловая система в архив
docker export myapp -o myapp-fs.tar              # экспорт

# wait — ждать завершения
docker wait myapp                                # вернёт код выхода

# commit — создать образ из контейнера
docker commit myapp my-custom-image:v1           # сохранить изменения в образ
docker commit -m "added config" myapp my-img:v2  # с описанием

4. Управление образами

# Терминал
docker images                          # список образов на хосте
docker image ls                        # то же, современный синтаксис
docker images -a                       # включая промежуточные слои

docker history nginx                   # история слоёв образа
docker inspect nginx                   # полная информация об образе

docker tag nginx myrepo/nginx:1.25     # поставить тег
docker rmi nginx                       # удалить образ
docker rmi -f nginx                    # принудительно
docker image prune                     # удалить "висячие" (dangling) образы
docker image prune -a                  # удалить все неиспользуемые образы

docker commit myapp mynewimage:latest  # образ из контейнера
docker import myfs.tar mynewimage      # образ из .tar (нет истории слоёв)

5. Важные флаги docker run

Флаг Назначение Пример
-d Detached — фоновый режим docker run -d nginx
-it Interactive + tty — интерактивный терминал docker run -it ubuntu bash
--name Задать имя контейнера docker run --name myapp nginx
-p HOST:CONT Пробросить порт хост:контейнер -p 8080:80
-e KEY=VAL Переменная окружения -e POSTGRES_PASSWORD=secret
-v SRC:DST Монтировать том или папку хоста -v mydata:/var/lib/data
--rm Автоудаление после остановки docker run --rm ubuntu echo hi
--network Подключить к сети Docker --network mynet
--entrypoint Переопределить ENTRYPOINT образа --entrypoint /bin/sh
← К оглавлению урока