Skip to main content

Контейнеры

Основные команды

Команда Доп. пар. Описание
docker ps
список работающих контейнеров

-a список остановленных но еще существующих контейнеров

-q отображать только id контейнеров

-f

фильтр

-aq -f status=exited - список id остановленных контейнеров

docker logs <name>
список событий внутри контейнера name
docker start <name>
запуск остановленного контейнера
docker restart <name>
Перезапускает контейнер. Приблизительный аналог docker stop, docker start.

-t определяет интервал времени ожидания перед его остановом по сигналу SIGTERM.
docker stop <name>
Останавливает (но не удаляет) контейнер. Контейнер переходит в состояние «остановлен».

-t Аналогично restart
docker kill <name>
Сигнал основному процессу (PID=1) в контейнере. По умолчанию SIGKILL (немедленное завершение работы). Возвращает идентификатор контейнера.

-s другой сигнал
docker rm <name или id>
удаление остановленного контейнера

-f позволяет удалять работающие контейнеры.

-v

удалить тома, созданные удаляемым контейнером (если эти тома не смонтированы на каталоги и не используются другими контейнерами)

docker rm -v $(docker ps -aq -f status=exited)

удаляет все остановленные контейнеры

docker inspect <name или id>
расширенная информация о контейнере
docker top <name или id>
информация о процессах внутри контейнера
docker port <name или id>
номера портов, назначенные механизмом Docker
docker create <name или id>
Создает контейнер из образа, но не запускает его. Аргументы как у docker run.
docker run
создание и запуск контейнера из образа. Удобнее compose файл.

-it или -d сеанс интерактивной работы или  запуск в фоновом режиме

--link <namecur:nameinnew>

соединение между новым контейнером и существующим контейнером myredis, в новом контейнере ссылка на существующий обозначена именем redis

--link myredis:redis 

--name имя для дальнейшего взаимодействия

--hostname имя для обращения

--mount монтирование

--volumes-from CONTAINER использование томов контейнера

-p HostPort:ContPort перенаправление с портов хоста на порт контейнера

--rm удаление остановленного контейнера и файловой системы после запуска и выполнения команды. Несовместим с ключом -d.

--restart
Позволяет настроить образ действий при попытке Docker перезапустить остановленный  контейнер.  
  • no  запрещает  любые  попытки  перезапуска контейнера.
  • unless-stopped Будет перезагружаться до остановки. После перезагрузки демона Docker контейнер останется выключенным.
  • always попытки перезапуска выполняются в любом случае вне зависимости от состояния контейнера после выхода. После перезагрузки демона Docker контейнер опять запустится.
  • on-failure: перезапуск выполняются для контейнера, завершившего работу с ненулевым статусом. После перезагрузки демона Docker контейнер опять запустится. Может быть задан аргумент, определяющий максимальное количество попыток перезапуска (иначе попытки будут выполняться бесконечно). 
docker run --restart on-failure:10 postgres

-t, --tty Создает псевдоустройство TTY (терминал). Как правило, используется вместе с ключом -i для запуска контейнера в интерактивном режиме.

-e, --env Определяет переменные среды внутри контейнера. 

--entrypoint Определяет точку входа для запускаемого контейнера в соответствии с заданным аргументом, заменяя содержимое любой инструкции ENTRYPOINT из Dockerfile.

-u, --user Определяет пользователя, от имени которого выполняются команды. Может быть задано как символьное имя пользователя или как числовой идентификатор UID. Заменяет содержимое инструкции USER из Dockerfile.

-w, --workdir Устанавливает рабочий каталог в контейнере в соответствии с заданным путевым именем. Заменяет любые значения, определенные в файле Dockerfile.

--add-host=docker:10.180.0.1 ХЗ, узнать
docker pause/unpause
Временно приостанавливает/запускает все процессы внутри контейнера. Процессы не получают никаких сигналов приостановки(не могут быть остановлены и завершены или удалены).
docker commit <container name> <repo name>
 образ контейнера. По умолчанию приостанавливаются, без приостановки --pause=false. 
docker network ls
список сетей
docker diff <name>
изменения в контейнере относительно базового образа

Взаимодействие реального времени

Ctrl-PQ (или Ctrl+P, Ctrl+Q) отключение от контейнера без остановки

Команда Доп. пар. Описание
docker attach <name или id>
наблюдать  или  взаимодействовать с основным процессом внутри контейнера.
docker cp

Позволяет  копировать  файлы  между  файловыми  системами  контейнера и хоста.

docker cp /tmp/config.ini grafana:/usr/share/grafana/conf/
docker exec
Запускает заданную команду внутри контейнера (может быть работающий сейчас). Может использоваться для выполнения задач сопровождения или в качестве замены ssh при входе (регистрации) в контейнер. 
docker exec -it ubuntu:latest bash
docker events
Выводит в реальном времени события от демона демону. Выход Ctrl-C. 
Примеры
  • Запуск контейнера образа ubuntu:latest в интерактивном режиме с bash 
    docker run -it ubuntu:latest /bin/bash 
  • Подключение к работающему контейнеру и запуск в нем bash 
    docker exec -it e37f24dc7e0a bash
 Архивация и восстановление
КомандаДоп. пар.Описание
docker export <name>
Экспорт файловую систему в tar-архив, через STDOUT. 
Экспорт только ФС, метаданные (порты, команды CMD, параметры настройки ENTRYPOINT) будут потеряны. 
Не включаются тома.
docker export my-container > container-fs.tar

--output tarname.tar
Имя архива
docker export --output container-fs.tar my-container
docker import <tar name> <image name>
Т.к. нет метаданных (в частности, CMD) - обязательно указать команду. 
docker import base-with-deps.tar base-image:with-deps
Примеры использования import / export:
  • Перенос «слепка» контейнера между хостами
    Допустим, на тестовом сервере контейнер собрал нужные конфиги/пакеты, ты сделал docker export, скопировал tar на прод и хочешь быстро получить образ:

    scp user@test-host:/tmp/app-fs.tar /tmp/
    docker import /tmp/app-fs.tar app-base:snapshot

    Дальше можно использовать этот образ как основу для других контейнеров или как временный шаблон.

  • Создание базового образа из «живого» контейнера
    Сценарий: запустил контейнер, поставил зависимости, настроил конфиги, экспортировал, импортировал — получил свой базовый образ.

    bash
    docker export configured-container > base-with-deps.tar
    docker import base-with-deps.tar base-image:with-deps
    Но помни: чтобы такой образ реально работал как приложение, в Dockerfile или в команде запуска нужно явно указать CMD.

  • Анализ файловой системы (без запуска полноценного контейнера)
    Можно импортировать архив и запустить «голый» образ, чтобы посмотреть структуру:

    bash
    docker import datalens-fs-snapshot.tar datalens-debug:fs
    docker run --rm datalens-debug:fs ls -R /var/lib/datalens
    Это удобно, когда нужно понять, куда приложение пишет данные, не поднимая весь стек. Учитывая, что ты работаешь с DataLens в Docker, такой подход помогает быстро локализовать, где лежат конфиги или логи, если они не в volume.