Для рассмотрения предлагаются два подхода. Подход 1 предназначен для образов, которые будут обновляться лишь время от времени, тогда как подход 2 — для образов, которые будут часто обновляться.
Этот подход подходит для образов, которые будут обновляться лишь время от времени.
Рисунок 1 Создание снимка

Процедура:
For example, start a CentOS container in the interactive mode.
docker run -it centos
yum install XXX
git clone https://github.com/lh3/bwa.git
cd bwa;make
Установите Git заранее и проверьте, установлен ли SSH‑ключ на локальном хосте.
docker commit -m "xx" -a "test" container-id test/image:tag
Этот подход подходит для образов, которые будут часто обновляться. В Approach 1 вы создаёте Снапшот всего контейнера. Это может быть трудоемко, если вам нужно часто обновлять образы. В этом случае предлагается Approach 2 для автоматизации процесса сборки образа.
Идея Approach 2 состоит в том, чтобы записать процесс Approach 1 в Dockerfile, а затем выполнить команду docker build -t test/image:tag., чтобы автоматически собрать образ из Dockerfile. В приведённой выше команде . указывает путь к Dockerfile.
Figure 2 Создание Dockerfile для сборки образа

Пример Dockerfile:
Если требуется внешняя сеть, убедитесь, что сетевое подключение доступно.
#Version 1.0.1FROM centos:latest# Setting the root user as the executor of subsequent commandsUSER root# Performing operationsRUN yum update -yRUN yum install -y java# Using && to concatenate commandsRUN touch test.txt && echo "abc" >>abc.txt# Setting an externally exposed portEXPOSE 80 8080 1038# Adding a network fileADD https://www.baidu.com/img/bd_logo1.png /opt/# Setting an environment variableENV WEBAPP_PORT=9090# Setting a work directoryWORKDIR /opt/# Setting a start commandENTRYPOINT ["ls"]# Setting start parametersCMD ["-a", "-l"]# Setting a volumeVOLUME ["/data", "/var/www"]# Setting the trigger operation for a sub-imageONBUILD ADD . /app/srcONBUILD RUN echo "on build executed" >> onbuild.txt
Он используется для указания родительского образа (базового образа), из которого вы создаёте новый образ. За исключением аннотаций, Dockerfile должен начинаться с инструкции FROM. Последующие инструкции выполняются в окружении этого родительского образа до появления следующей инструкции FROM. Вы можете создавать несколько образов в одном Dockerfile, добавляя несколько инструкций FROM.
Он используется для указания информации об авторе, создающем образ, включая имя пользователя и адрес электронной почты. Этот параметр является необязательным.
Он используется для изменения образа. Обычно команды RUN выполняются для установки библиотек, а также установки и настройки программ. После выполнения команды RUN будет создан слой образа поверх текущего образа. Следующая команда будет выполнена на новом образе. Инструкция RUN может быть в одном из следующих форматов:
It is used to specify one or more network ports that will be exposed on a container. If there are multiple ports, separate them by spaces.
-P (uppercase) для сопоставления портов, указанных в EXPOSE, со случайными портами на хосте. Другие контейнеры или хосты могут взаимодействовать с контейнером через порты хоста.
Вы также можете использовать -p (lowercase) для экспонирования портов, которые не указаны в EXPOSE.
Он используется для добавления файла в новый образ. Файл может быть файлом хоста, сетевым файлом или папкой.
Он используется для создания точки монтирования для указанного пути (файл или папка) в образе. Несколько контейнеров могут совместно использовать данные через одну и ту же точку монтирования. Даже если один из контейнеров остановлен, точка монтирования всё ещё доступна.
Он используется для указания нового рабочего каталога для следующей команды. Каталог может быть абсолютным или относительным. WORKDIR может указываться несколько раз по необходимости. При запуске контейнера каталог, указанный последней командой WORKDIR, используется в качестве текущего рабочего каталога контейнера.
Он используется для установки переменной окружения при запуске контейнера. При запуске контейнера вы можете задать -e для изменения переменной окружения или добавить другие переменные окружения.
Пример:
docker run -e WEBAPP_PORT=8000 -e WEBAPP_HOST=www.example.com ...
Он используется для указания команды по умолчанию для запуска контейнера.
Он используется для указания команды по умолчанию для запуска контейнера. Различие: Для ENTRYPOINT параметры, добавленные к образу во время запуска контейнера, будут объединяться. Для CMD эти параметры будут перезаписаны.
docker run gutianlangyu/test --entrypoint echo "hello world"
Он используется для указания пользователя или UID при запуске контейнера, а также при выполнении команд RUN, CMD или ENTRYPOINT.
Команда‑триггер. Во время сборки образа движок контейнера сохраняет все команды, указанные в команде ONBUILD, в метаданные образа. Эти команды не будут выполнены при построении текущего образа. Они будут выполнены только когда новый образ использует инструкцию FROM, указывая текущий образ в качестве родительского.
Использование инструкции FROM для создания дочернего образа на основе родительского образа, созданного Dockerfile:
ONBUILD ADD. /app/src: Команда ADD. /app/src автоматически выполняется.