Основную справку можно получить командой docker --help, справку по конкретной команде можно получить командой docker команда --help, справку по опциям можно получить командой man docker.
[Основные команды]
run Создаст и запустит новый контейнер из образа. exec Выполнит команду в работающем контейнере [8]. ps Выведет список контейнеров. build Соберет образ из Dockerfile. pull Загрузит образ из реестра. push Выгрузит образ в реестр. images Выведет список образов. login Аутентификация в реестре. logout Выход из реестра. search Поиск образов на Docker Hub. version Покажет информацию версии Docker. info Отобразит системную информацию.
[Команды управления]
builder Управление сборками. buildx* Docker Buildx - расширенные возможности сборки с помощью BuildKit. compose* Docker Compose - определение и запуск мульти-контейнерных приложений. container Управление контейнерами. context Управление контекстами. image Управление образами. manifest Управление манифестами образов и списками манифестов. network Управление сетями. plugin Управление плагинами. system Управление Docker. trust Управление системой доверия на образах Docker. volume Управление томами. swarm Управление Swarm - фича управления кластером демонов Docker [1].
[Другие команды]
attach Подключение локальных стандартных потоков ввода, вывода и ошибок (stdin, stdout, stderr) к работающему контейнеру. Т. е. откроет еще один терминал для работающего контейнера. commit Создание нового образа из изменений контейнера. cp Копирование файлов/папок между контейнером и локальной файловой системой. create Создание нового контейнера. diff Инспекция изменений файлов или директорий на файловой системе контейнера. events Получение событий реального времени (real time events) из сервера. export Экспорт файловой системы контейнера в tar-архив. history Показать историю образа. import Импорт содержимого из tar-архива для создания файловой системы образа. inspect Возвратить низкоуровневую информацию на объектах Docker. kill Прибьет один или большее количество запущенных контейнеров. load Загрузит образ из tar-архива или STDIN. logs Выборка лога команд контейнера. pause Паузе всех процессов одного или нескольких контейнеров. port Список отображений портов или определенного отображения для контейнера. rename Переименование контейнера. restart Перезапуск одного или нескольких контейнеров. rm Удаление одного или нескольких контейнеров. rmi Удаление одного или нескольких образов. save Сохранение одного или нескольких образов в tar-архив (по умолчанию работает перенаправление в STDOUT). start Запуск одного или нескольких остановленных контейнеров. stats Отображение статистики использования действующего потока (live stream) контейнера или нескольких контейнеров. stop Остановка одного или нескольких работающих контейнеров. tag Создание тега TARGET_IMAGE, который ссылается на SOURCE_IMAGE. top Отображение работающих процессов контейнера. unpause Снятие с паузы всех процессов одного или нескольких контейнеров. update Обновление конфигурации одного или нескольких контейнеров. wait Блокировка, пока не остановится один или несколько контейнеров, затем печать их кодов завершения (exit codes).
[Глобальные опции]
--config string Место расположения файлов конфигурации клиента (умолчание "/home/имядомена/имяпользователя/.docker").
-c, --context string Имя контекста, используемого для подключения к демону (переназначает переменную окружения DOCKER_HOST и контекст по умолчанию, установленный через "docker context use").
-D, --debug Разрешает режим отладки.
-H, --host list Сокет демона для подключения.
-l, --log-level string Установит уровень лога "debug", "info", "warn", "error", "fatal" (по умолчанию "info").
--tls Использовать TLS; подразумевает --tlsverify.
--tlscacert string Доверять только сертификатам, подписанным этим CA (по умолчанию используется "/home/имядомена/имяпользователя/.docker/ca.pem").
--tlscert string Путь до файла TLS-сертификата (по умолчанию используется "/home/имядомена/имяпользователя/.docker/cert.pem")
--tlskey string Путь до файла ключа TLS (по умолчанию используется "/home/имядомена/имяпользователя/.docker/key.pem")
--tlsverify Использовать TLS и проверять remote.
-v, --version Напечатать информацию версии и выйти.
Дополнительную документацию по использованию Docker см. на официальном сайте [2].
[Dockerfile]
Это специальный список инструкций для построения нового образа docker. Список инструкций большой, подробно ознакомиться с ними можно в документации [3]. Вот краткое описание основных инструкций:
ARG. Определяет переменную, которую пользователи могут передать во время сборки сборщику образа, когда выполняется команда docker build с флагом --build-arg < varname>=< value>.
ARG < name>[=< default value>]
Dockerfile может содержать одну или несколько инструкций ARG. Вот пример правильного Dockerfile:
FROM busyboxARG user1ARG buildno# ...
Инструкция ARG может опционально включать значение по умолчанию:
FROM busyboxARG user1=someuserARG buildno=1# ...
COPY. Копирует файлы и папки с системы хоста (ваш локальный компьютер) в систему образа/контейнера. Вторая форма используется для путей, в которых присутствуют пробелы.
COPY [OPTIONS] < src> ... < dest>COPY [OPTIONS] ["< src>", ... "< dest>"]
Пример, копирующий файл myapp_java_ver02.jar, находящийся на локальном компьютере, где работает Docker, в файловую систему образа как файл /app/myapp.jar:
COPY /build/myproject/myapp_java_ver02.jar /app/myapp.jar
ENTRYPOINT. Позволяет сконфигурировать контейнер, который будет запускать исполняемый файл. Форма exec, предпочтительная [6]:
ENTRYPOINT ["исполняемый_файл", "param1", "param2"]
Форма shell [6]:
ENTRYPOINT команда param1 param2
Ниже показан пример запуска приложения Java в исполняемом файле myapp.jar. Подразумевается, что предварительно инструкцией WORKDIR был установлен текущий каталог, где находится файл myapp.jar.
ENTRYPOINT ["java", "-jar", "myapp.jar"]
ENV. Установит переменную окружения образа.
ENV < key>=< value> ...
Инструкция ENV установит переменную окружения с именем < key> в значение < value>. Это значение будет в окружении для всех последующих инструкций build stage. Значение будет интерпретироваться для других переменных окружения, поэтому символы кавычек будут удалены, если они не были экранированы. Как и при парсинге командной строки, кавычки и обратные слеши могут использоваться, чтобы в значении могли быть пробелы.
FROM. Инициализирует новый build stage и устанавливает базовый образ (образ источника) для последующих инструкций. Таким образом, правильно составленный Dockerfile должен начинаться с инструкции FROM. Здесь image может быть любым корректным образом.
FROM [--platform=< platform>] < image> [AS < name>]
Пример для базового образа Ubuntu версии 18.04:
FROM ubuntu:18.04
Пример для базового образа Linux, где содержится OpenJDK версии 17-jdk-slim-buster:
FROM openjdk:17-jdk-slim-buster
Базовые образы можно найти на Docker Hub [4].
RUN. Выполнит любую команду для создания нового слоя поверх текущего образа. Добавленный слой используется в следующем шаге Dockerfile. Могут быть две формы команды RUN, shell-форма и exec-форма [6]:
# Shell-форма: RUN [OPTIONS] < command> ...
# Exec-форма: RUN [OPTIONS] [ "< command>", ... ]
Подробнее про команду RUN см. [7].
WORKDIR. Установит рабочую директорию для любой последующей инструкции RUN, CMD, ENTRYPOINT, COPY и ADD. Если WORKDIR не существует, то она будет создана, даже если она не используется любой последующей инструкцией Dockerfile.
WORKDIR /path/to/workdir
Пример для папки /app, находящейся внутри запускаемого образа/контейнера:
WORKDIR /app
Запуск Dockerfile для сборки образа. Например, чтобы собрать образ myimage1 с помощью файла Dockerfile, находящемся в текущем каталоге, можно использовать команду:
$ docker build -t myimage1 .
Ниже показан пример сборки образа myimage2 из Dockerfile-файла с именем Dockerfile2. В сборку передается также аргумент окружения LOCATION [5].
$ docker build -t "myimage2" --build-arg LOCATION=$PWD - < Dockerfile2
[FAQ]
Q001. Как открыть еще один терминал к работающему контейнеру?
Это можно сделать командой docker attach идентификатор_контейнера. Идентификатор работающего контейнера можно узнать командой docker ps. Например:
docker_host:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a20af5bdf230 myimage "/bin/bash" 4 days ago Up 4 days myContainer
docker_host:~$ docker atatch a20af5bdf230
myimage2@a20af5bdf230:~/Build/sdk-mips$ ls ~/Shared
temp
Выйти их терминала контейнера можно командой exit:
myimage2@a20af5bdf230:~/Build/sdk-mips$ exit
docker_host:~$
Q002. Как перенести контейнер со всем содержимым на другой компьютер?
Сценарий: есть контейнер с Ubuntu 18.04, в котором установлена среда кросс-компиляции для ARM MIPS Realtek, работающий на хосте Ubuntu 22.04. Нужно перенести его на docker, работающий на Windows 10.
Процесс по шагам:
1. Сначала надо убедиться, что контейнер остановлен, командой docker ps.
2. Командой docker export с клавишей Tab узнайте имя (или ID) нужного контейнера.
3. Следующая команда зкспортирует контейнер в TAR GZIP архив, который можно перенести на флешке на другой компьютер. Архив будет сохранен в файл ~/archive.tar.gz:
$ docker export имя_контейнера | gzip > ~/archive.tar.gz
Запишите файл archive.tar.gz на флешку.
4. Установите флешку в компьютер, куда нужно импортировать контейнер. Командой docker import импортируйте файловую систему контейнера, что создаст образ в докере:
>docker import e:\archive.tar.gz
5. Командой docker images узнайте ID созданного образа.
6. Командой docker run создайте контейнер и запустите его:
>docker run -it --name имя_контейнера ID_образа /bin/bash
[Ссылки]
1. Docker Swarm mode site:docs.docker.com. 2. Docker: руководства и документация. 3. Dockerfile reference site:docs.docker.com. 4. Docker Hub. 5. Set build-time variables (--build-arg). 6. Shell and exec form. 7. Dockerfile RUN. 8. Docker: команда exec. 9. docker: часто используемые команды. |