Skip to main content

Контейнеры

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

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

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

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

-f

фильтр

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

docker logs <name>
список событий внутри контейнера name
docker history
Вывод информацию о каждом уровне в образе.
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

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

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

    docker export configured-container > base-with-deps.tar
    docker import base-with-deps.tar base-image:with-deps
  • Анализ файловой системы (без запуска полноценного контейнера)
    Можно импортировать архив и запустить «голый» образ, чтобы посмотреть структуру:

    docker import datalens-fs-snapshot.tar datalens-debug:fs
    docker run --rm datalens-debug:fs ls -R /var/lib/datalens


Команда Что экспортирует Сохраняет ли слои как слои Сохраняет ли CMD/ENV Сохраняет ли данные из volumes Для чего лучше
docker export Файловую систему контейнера (flat tar) Нет (только итоговые файлы) Нет Нет Слепки ФС, перенос конфигов, аудит
docker save Образ со всеми слоями + метаданные Да (структура слоёв сохраняется) Да Нет (volumes не входят в образ) Перенос образов между хостами/реестрами
docker commit Новый образ из контейнера Да (создаётся новый слой) Нет Нет Быстрые «снимок-образы» (не для CI)