Эта статья участвовала в третьем этапе курса «High Yield Update» тренировочного лагеря для создателей Nuggets. Подробнее см.:Dig Li Project | Идет третий этап тренировочного лагеря создателя, «написание» личного влияния.
1 Получить изображение
Как упоминалось ранее,Docker HubВ Интернете доступно большое количество изображений высокого качества, здесь мы поговорим о том, как получить эти изображения.
Команда для получения образа из реестра Docker:docker pull
. Его формат команды:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
Конкретные варианты могут бытьdocker pull --help
Команда видеть, здесь речь идет о формате имени изображения.
- Адрес хранилища образов Docker: формат адреса обычно
<域名/IP>[:端口号]
. Адрес по умолчанию — Docker Hub. - Имя склада: как упоминалось ранее, имя склада здесь состоит из двух сегментов, а именно
<用户名>/<软件名>
. Для Docker Hub, если имя пользователя не указано, по умолчанию используетсяlibrary
, которое является официальным зеркалом.
Например:
$ docker pull ubuntu:18.04
18.04: Pulling from library/ubuntu
bf5d46315322: Pull complete
9f13e0ac480c: Pull complete
e8988b5b3097: Pull complete
40af181810e7: Pull complete
e6f7c7e5c03e: Pull complete
Digest: sha256:147913621d9cdea08853f6ba9116c2e27a3ceffecf3b492983ae97c3d643fbbe
Status: Downloaded newer image for ubuntu:18.04
Адрес репозитория образов Docker не указан в приведенной выше команде, поэтому образ будет получен из Docker Hub. И имя зеркалаubuntu:18.04
, так официальное зеркало будет полученоlibrary/ubuntu
На складе с пометкой18.04
зеркальное отражение.
В процессе загрузки вы можете увидеть концепцию многоуровневого хранилища, о которой мы упоминали ранее, и образ состоит из нескольких уровней хранилища. Скачивание тоже послойное скачивание, а не один файл. Первые 12 цифр идентификатора каждого слоя задаются во время загрузки. И после окончания загрузки дайте полный образ образаsha256
резюме для обеспечения согласованности загрузки.
При использовании приведенной выше команды вы можете обнаружить, что идентификатор слоя, который вы видите, иsha256
Аннотация не такая, как здесь. Это связано с тем, что официальный образ всегда поддерживается, а любые новые ошибки или обновления версии будут исправлены и выпущены под исходным ярлыком, что гарантирует, что любой пользователь, использующий этот ярлык, сможет получить более безопасный и стабильный образ.
Если загрузка образов из Docker Hub идет очень медленно, вы можете настроить ускоритель, обратившись к разделу «Ускоритель изображений».
2 Запустите контейнер
Получив образ, мы можем запустить и запустить контейнер на основе этого образа. с вышеуказаннымubuntu:18.04
Например, если бы мы началиbash
А для интерактивной работы вы можете выполнить следующую команду.
$ docker run -it --rm \
ubuntu:18.04 \
bash
root@e7009c6ce357:/# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.1 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.1 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
docker run
Это команда для запуска контейнера Конкретный формат будет подробно объяснен в разделе контейнера Мы кратко объясним параметры, используемые выше.
-
-it
: Это два параметра, один-i
: интерактивная операция, один-t
Терминал. Мы собираемся войти сюдаbash
Выполняем какие-то команды и видим результат, поэтому нам нужен интерактивный терминал. -
--rm
: этот параметр означает, что контейнер будет удален после выхода. По умолчанию для устранения неполадок закрытые контейнеры не удаляются немедленно, если только вручнуюdocker rm
. Мы просто выполняем случайную команду здесь и видим результат, нам не нужно устранять неполадки и сохранять результат, поэтому используйте--rm
Вы можете избежать пустой траты места. -
ubuntu:18.04
: это относится к использованиюubuntu:18.04
На основе образа для запуска контейнера. -
bash
: После имени изображенияЗаказ, здесь мы хотим иметь интерактивную оболочку, поэтому используемbash
.
Оказавшись внутри контейнера, мы можем работать под оболочкой и выполнять любую желаемую команду. Здесь мы выполняемcat /etc/os-release
, это команда, обычно используемая Linux для просмотра текущей версии системы.Из возвращаемого результата видно, что контейнерUbuntu 18.04.1 LTS
система.
Наконец мы проходимexit
Вышел из этого контейнера.
3 Список зеркал
Чтобы просмотреть загруженные зеркала, используйтеdocker images
Заказ.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
node latest 7354979df4ec 2 months ago 939MB
redis 4.0 8280a2c45ce5 4 months ago 89.2MB
centos 7 5e35e350aded 4 months ago 203MB
alpine latest 965ea09ff2eb 5 months ago 5.55MB
centos latest 0f3e07c0138f 5 months ago 220MB
redis 3.2.12 87856cc39862 17 months ago 76MB
<none> <none> 00285df0df87 5 days ago 342 MB
список содержит仓库名
,标签
,镜像 ID
,创建时间
а также所占用的空间
.
3.1 Зеркальный объем
Если вы присмотритесь, то заметите, что указанный здесь посадочное место отличается от размера изображения, которое вы видите в Docker Hub. Например,ubuntu:18.04
размер изображения, вот127 MB
,Но когдаDocker Hubэто показывает50 MB
. Это связано с тем, что том, показанный в Docker Hub, является сжатым томом. Образ остается сжатым во время процесса загрузки и выгрузки образа, поэтому размер, отображаемый Docker Hub, — это размер трафика, который больше связан с передачей по сети. иdocker image ls
На дисплее отображается размер расширенного изображения после загрузки изображения в локальную область, если быть точным, это сумма пространства, занимаемого расширенными слоями, так как после загрузки изображения в локальную область при просмотре пространство, вас больше беспокоит размер локального дискового пространства.
Еще одна проблема, о которой следует знать, заключается в том, чтоdocker images
Общий объем изображений в списке не является фактическим использованием жесткого диска всеми изображениями. Поскольку образы Docker представляют собой многоуровневые структуры хранения, которые можно наследовать и повторно использовать, разные образы могут иметь общий слой, поскольку они используют один и тот же базовый образ. Поскольку Docker использует Union FS, необходимо сохранить только одну копию одного и того же слоя, поэтому фактическое дисковое пространство образа, вероятно, будет намного меньше, чем сумма размеров образов списка.
Вы можете легко просмотреть пространство, занимаемое изображениями, контейнерами и томами данных, выполнив следующие команды.
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 6 2 1.532GB 1.236GB (80%)
Containers 4 2 1.116GB 673.6MB (60%)
Local Volumes 2 1 10.27MB 93B (0%)
Build Cache 0 0 0B 0B
3.2 Подвесное зеркало
В списке зеркал выше вы также можете увидеть специальное зеркало, у которого нет ни имени склада, ни метки, оба<none>
. :
<none> <none> 00285df0df87 5 days ago 342 MB
Это изображение изначально имело имя и метку изображения, которые изначальноmongo:3.2
, с сохранением официального образа, после выхода новой версии,docker pull mongo:3.2
час,mongo:3.2
Имя образа было перенесено во вновь загруженное изображение, а имя в старом изображении было отменено, таким образом, оно стало<none>
. Кромеdocker pull
может вызвать это,docker build
Это также может вызвать это явление. Поскольку старое и новое изображения имеют одно и то же имя, старое имя изображения отменяется, поэтому имя склада и метка<none>
зеркальное отражение. Такие немаркированные изображения также известны какболтающееся изображение, вы можете использовать следующую команду для отображения таких изображений:
$ docker image ls -f dangling=true
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 00285df0df87 5 days ago 342 MB
Вообще говоря, висячее изображение потеряло свою ценность и может быть удалено по желанию, вы можете удалить его с помощью следующей команды.
$ docker image prune
3.3 Промежуточное зеркало
Для ускорения создания образа и повторного использования ресурсов Docker используетзеркало среднего слоя. Таким образом, после его использования в течение определенного периода времени вы можете увидеть некоторые зависимые изображения среднего уровня. дефолтdocker image ls
В списке будет отображаться только верхнее изображение. Если вы хотите отобразить все изображения, включая среднее, вам нужно добавить-a
параметр.
$ docker image ls -a
Таким образом, вы увидите много непомеченных изображений.В отличие от предыдущих висячих изображений, многие из этих непомеченных изображений являются изображениями среднего уровня, т. е. изображениями, от которых зависят другие изображения. Эти непомеченные образы не следует удалять, иначе образ верхнего уровня выйдет из строя из-за отсутствующих зависимостей. На самом деле нет необходимости удалять эти изображения, потому что, как упоминалось ранее, один и тот же слой будет сохранен только один раз, и эти изображения являются зависимостями от других изображений, поэтому они не будут сохранены, потому что они перечислены, несмотря ни на что. как они вам тоже понадобятся. Пока те образы, которые зависят от них, будут удалены, эти зависимые образы среднего уровня также будут удалены.
3.4 Список частичных зеркал
Без добавления каких-либо параметров,docker images
Перечислены все изображения верхнего уровня, но иногда нам нужно перечислить только некоторые изображения.docker images
Есть несколько параметров, которые могут помочь в этом.
Список зеркал по имени репозитория
$ docker images centos
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 5e35e350aded 4 months ago 203MB
centos latest 0f3e07c0138f 5 months ago 220MB
Перечислите конкретное изображение, то есть укажите имя репозитория и метку
docker images centos:7
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 5e35e350aded 4 months ago 203MB
3.5 Отображение в определенном формате
по умолчанию,docker images
Выводится полная таблица, но она нам не нужна постоянно. Например, при удалении висящего изображения прямо сейчас нам нужно использоватьdocker images
Перечислите идентификаторы всех висящих изображений, прежде чем их можно будет передатьdocker image rm
Команда используется как параметр для удаления указанного изображения, которое используется в данный момент.-q
параметр.
$ docker images -q
7354979df4ec
8280a2c45ce5
5e35e350aded
965ea09ff2eb
0f3e07c0138f
87856cc39862
--filter
Сотрудничать-q
Создайте список идентификаторов в указанном диапазоне и отправьте его другомуdocker
Команды используются в качестве параметров для выполнения определенных операций в пакетах для этой группы сущностей.Это очень распространено в использовании командной строки Docker, а не только изображений.В будущем мы увидим такие комбинации в различных командах для выполнения очень мощные функции. Поэтому каждый раз, когда вы видите фильтры в документации, вы можете уделить больше внимания их использованию.
В других случаях мы можем быть просто недовольны структурой таблицы и надеемся сами упорядочить столбцы, или не хотим иметь заголовок, что удобно другим программам для разбора результатов и т.д.Синтаксис шаблона Go.
Например, следующая команда выводит список результатов непосредственно и включает только идентификатор образа и имя репозитория:
$ docker image ls --format "{{.ID}}: {{.Repository}}"
7354979df4ec: node
8280a2c45ce5: redis
5e35e350aded: centos
965ea09ff2eb: alpine
0f3e07c0138f: centos
87856cc39862: redis
Или запланируйте отображение в равноудаленной таблице и строку заголовка, такую же, как по умолчанию, но определите свои собственные столбцы:
$ docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
IMAGE ID REPOSITORY TAG
7354979df4ec node latest
8280a2c45ce5 redis 4.0
5e35e350aded centos 7
965ea09ff2eb alpine latest
0f3e07c0138f centos latest
87856cc39862 redis 3.2.12
4 Удалить локальное зеркало
Если вы хотите удалить локальное зеркало, вы можете использоватьdocker image rm
команда, ее формат:
$ docker image rm [选项] <镜像1> [<镜像2> ...]
4.1 Удалить изображение с идентификатором, именем изображения, дайджестом
в,<镜像>
возможно镜像短 ID
,镜像长 ID
,镜像名
или镜像摘要
.
Например, у нас есть такие зеркала:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
node latest 7354979df4ec 2 months ago 939MB
redis 4.0 8280a2c45ce5 4 months ago 89.2MB
centos 7 5e35e350aded 4 months ago 203MB
alpine latest 965ea09ff2eb 5 months ago 5.55MB
centos latest 0f3e07c0138f 5 months ago 220MB
redis 3.2.12 87856cc39862 17 months ago 76MB
Мы можем использовать полный идентификатор изображения, также известный как长 ID
, чтобы удалить зеркало. При использовании скриптов могут использоваться длинные идентификаторы, но ручной ввод слишком утомителен, поэтому используется чаще短 ID
удалить зеркало.docker image ls
По умолчанию указан короткий идентификатор, обычно первые 3 символа или более, если этого достаточно, чтобы отличить его от других зеркал.
Например здесь, если мы хотим удалитьredis:alpine
Зеркало, вы можете выполнить:
$ docker image rm alpine
Untagged: alpine:latest
Untagged: alpine@sha256:c19173c5ada610a5989151111163d28a67368362762534d8a8121ce95cf2bd5a
Deleted: sha256:965ea09ff2ebd2b9eeec88cd822ce156f6674c7e99be082c7efac3c62f3ff652
Deleted: sha256:77cae8ab23bf486355d1b3191259705374f4a11d483b24964d2f729dd8c076a0
Мы также можем использовать镜像名
, это,<仓库名>:<标签>
, чтобы удалить зеркало.
$ docker image rm centos
Untagged: centos:latest
Untagged: centos@sha256:b2f9d1c0ff5f87a4743104d099a3d561002ac500db1b9bfa02a783a46e0d366c
Deleted: sha256:0584b3d2cf6d235ee310cf14b54667d889887b838d3f3d3033acd70fc3c48b8a
Deleted: sha256:97ca462ad9eeae25941546209454496e1d66749d53dfa2ee32bf1faabd239d38
Конечно, правильнее использовать镜像摘要
Удалить зеркало.
$ docker image ls --digests
REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE
node slim sha256:b4f0e0bdeb578043c1ea6862f0d40cc4afe32a4a582f3be235a3b164422be228 6e0c4c8e3913 3 weeks ago 214 MB
$ docker image rm node@sha256:b4f0e0bdeb578043c1ea6862f0d40cc4afe32a4a582f3be235a3b164422be228
Untagged: node@sha256:b4f0e0bdeb578043c1ea6862f0d40cc4afe32a4a582f3be235a3b164422be228
4.2 Неотмеченные и удаленные
Если вы понаблюдаете за выходной информацией вышеуказанных команд, вы заметите, что поведение удаления разделено на две категории, одна из которыхUntagged
, другойDeleted
. Ранее мы говорили, что изображение уникально идентифицируется по его идентификатору и дайджесту, а изображение может иметь несколько тегов.
Поэтому, когда мы используем приведенную выше команду для удаления изображения, мы фактически просим удалить изображение определенной метки. Итак, первое, что нужно сделать, это отменить все зеркальные теги, соответствующие нашим требованиям, и вот что мы видим.Untagged
Информация. Поскольку изображение может соответствовать нескольким тегам, после удаления указанного тега могут быть другие теги, указывающие на это изображение.Delete
поведения не будет. так что не всеdocker image rm
Произойдет поведение удаления зеркала, и оно может просто отменить определенную метку.
Когда все теги изображения отменены, изображение, скорее всего, потеряет свое значение, что вызовет поведение удаления. Образ представляет собой многоуровневую структуру хранения, поэтому при удалении он также оценивается и удаляется с верхнего слоя на базовый. Многослойная структура изображений позволяет очень легко повторно использовать изображения, поэтому очень вероятно, что какое-то другое изображение зависит от слоя текущего изображения. В этом случае поведение удаления слоя все равно не сработает. Текущий слой фактически не удаляется до тех пор, пока ни один из слоев не будет зависеть от текущего слоя. Вот почему, иногда это странно, почему нет другой метки, указывающей на это изображение, но оно все еще существует, и почему иногда вы найдете количество удаленных слоев и себяdocker pull
Причина разницы в количестве видимых слоев.
Помимо зависимостей изображений, также необходимо обратить внимание на зависимости контейнеров от изображений. Если контейнер, запущенный с помощью этого образа, существует (даже если контейнер не запущен), то этот образ нельзя удалить. Как упоминалось ранее, контейнер основан на образе, а также на слое хранения контейнера, чтобы сформировать такую многоуровневую структуру хранения для запуска. Поэтому, если образ зависит от этого контейнера, его удаление неизбежно приведет к сбою. Если эти контейнеры не нужны, их следует удалить перед удалением образа.
4.3 Используйте команду docker image ls для сотрудничества
Как и другие команды, которые могут принимать несколько объектов, вы можете использоватьdocker image ls -q
использовать сdocker image rm
, так что вы можете удалять изображения, которые хотите удалить, в пакетном режиме. Мы представили множество способов фильтрации списка зеркал в главе «Список зеркал», которые можно использовать.
Например, нам нужно удалить все репозитории с именемredis
Зеркало:
$ docker image rm $(docker image ls -q redis)
или удалить всеmongo:3.2
Предыдущее изображение:
$ docker image rm $(docker image ls -q -f before=mongo:3.2)
Используя свое воображение и мощь командной строки Linux, вы можете делать много крутых вещей.
5 Измените зеркало
Образ — основа контейнера, при каждом его выполненииdocker run
Каждый раз, когда вы указываете, какой образ используется в качестве основы для запуска контейнера. В предыдущих примерах мы использовали образы из Docker Hub. Использование этих изображений напрямую может соответствовать определенным требованиям, и когда эти изображения не могут напрямую соответствовать требованиям, нам необходимо настроить эти изображения. В следующих нескольких разделах объясняется, как настроить изображение.
Оглядываясь назад на то, что мы узнали ранее, образ является многоуровневым хранилищем, и каждый слой модифицируется на основе предыдущего слоя, и контейнер также является многоуровневым хранилищем, в основе которого лежит образ. слой, на основе которого Добавить слой в качестве слоя хранилища для среды выполнения контейнера.
Теперь давайте возьмем пользовательский веб-сервер в качестве примера, чтобы объяснить, как создается изображение.
$ docker run --name webserver -d -p 80:80 nginx
Эта команда будет использоватьnginx
Образ запускает контейнер с именемwebserver
, и сопоставил порт 80, чтобы мы могли использовать браузер для доступа к этомуnginx
сервер.
Если вы изначально используете Docker в Linux или используете Docker Desktop для Mac/Windows, вы можете получить прямой доступ:http://localhost; Если вы используете Docker Toolbox или Docker, установленный на виртуальной машине или облачном сервере, вам необходимоlocalhost
Замените его адресом виртуальной машины или фактическим адресом облачного сервера.
Если мы зайдем напрямую через браузер, мы увидим страницу приветствия Nginx по умолчанию.
Теперь предположим, что нам настолько не нравится страница приветствия, что мы хотим изменить ее, чтобы приветствовать Docker, мы можем использоватьdocker exec
Команды входят в контейнер, изменяя его содержимое.
$ docker exec -it webserver bash
root@3729b97e8226:/# echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
root@3729b97e8226:/# exit
exit
Входим как интерактивный терминалwebserver
контейнер и выполняетсяbash
команду, то есть получить работоспособную оболочку.
Затем мы используем<h1>Hello, Docker!</h1>
покрытый/usr/share/nginx/html/index.html
Содержание.
Теперь, если мы обновим браузер, мы обнаружим, что содержимое изменилось.
Мы модифицировали файл контейнера, то есть изменили слой хранения контейнера. мы можем пройтиdocker diff
команда, чтобы увидеть конкретные изменения.
$ docker diff webserver
C /root
A /root/.bash_history
C /run
C /usr
C /usr/share
C /usr/share/nginx
C /usr/share/nginx/html
C /usr/share/nginx/html/index.html
C /var
C /var/cache
C /var/cache/nginx
A /var/cache/nginx/client_temp
A /var/cache/nginx/fastcgi_temp
A /var/cache/nginx/proxy_temp
A /var/cache/nginx/scgi_temp
A /var/cache/nginx/uwsgi_temp
Теперь, когда мы настроили изменение, мы хотим сохранить его как зеркало.
Имейте в виду, что при запуске контейнера (если не используются тома) любые сделанные изменения файлов будут записаны на уровне хранилища контейнера. И Docker предоставляетdocker commit
командой, вы можете сохранить уровень хранения контейнера как изображение. Другими словами, на основе исходного изображения слой хранения контейнера накладывается для формирования нового изображения. При запуске этого нового образа в будущем он будет иметь последние изменения файлов исходного контейнера.
docker commit
Формат синтаксиса:
docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]
Контейнер можно сохранить как образ с помощью следующей команды:
$ docker commit \
--author "Tao Wang <twang2218@gmail.com>" \
--message "修改了默认网页" \
webserver \
nginx:v2
sha256:07e33465974800ce65751acc279adc6ed2dc5ed4e0838f8b86f0c87aa1795214
в--author
является автором указанной модификации, и--message
Именно для записи содержимого этой модификации. это иgit
Управление версиями аналогично, но здесь эту информацию можно опустить и оставить пустой.
допустимыйdocker image ls
См. это новое настроенное изображение в:
$ docker image ls nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v2 07e334659748 9 seconds ago 181.5 MB
nginx 1.11 05a60462f8ba 12 days ago 181.5 MB
nginx latest e43d811ce2f4 4 weeks ago 181.5 MB
также можно использоватьdocker history
Историю в зеркале проверяйте конкретно, если сравниватьnginx:latest
history мы найдем добавление слоя, который мы только что зафиксировали.
$ docker history nginx:v2
IMAGE CREATED CREATED BY SIZE COMMENT
07e334659748 54 seconds ago nginx -g daemon off; 95 B 修改了默认网页
e43d811ce2f4 4 weeks ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon 0 B
<missing> 4 weeks ago /bin/sh -c #(nop) EXPOSE 443/tcp 80/tcp 0 B
<missing> 4 weeks ago /bin/sh -c ln -sf /dev/stdout /var/log/nginx/ 22 B
<missing> 4 weeks ago /bin/sh -c apt-key adv --keyserver hkp://pgp. 58.46 MB
<missing> 4 weeks ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.11.5-1 0 B
<missing> 4 weeks ago /bin/sh -c #(nop) MAINTAINER NGINX Docker Ma 0 B
<missing> 4 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
<missing> 4 weeks ago /bin/sh -c #(nop) ADD file:23aa4f893e3288698c 123 MB
После настройки нового образа мы можем запустить его.
docker run --name web2 -d -p 81:80 nginx:v2
Здесь мы назовем новый сервис какweb2
, и сопоставляется с81
порт. Если это рабочий стол Docker для Mac/Windows или Linux, мы можем получить прямой доступhttp://localhost:81Увидев результат, его содержимое должно быть таким же, как ранее измененноеwebserver
Такой же.
До сих пор мы впервые завершили пользовательское изображение, используяdocker commit
Команды и ручные операции добавляют новый слой к старому изображению для формирования нового изображения, которое должно иметь более интуитивное ощущение многоуровневого хранения изображения.
Используйте docker commit с осторожностью
использоватьdocker commit
Хотя эта команда может помочь вам интуитивно понять концепцию многоуровневого хранилища образов, в реальной среде она не используется.
Во-первых, если вы внимательно посмотрите на предыдущийdocker diff webserver
, вы обнаружите, что в дополнение к тем, которые вы действительно хотите изменить/usr/share/nginx/html/index.html
Помимо файла, многие файлы были изменены или добавлены из-за выполнения команды. Это просто самая простая операция.Если вы устанавливаете пакеты и компилируете и собираете, будет добавлено много неактуального контента.Если вы не будете тщательно очищать, образ будет сильно раздут.
Кроме того, используйтеdocker commit
означает, что все операции над изображением являются операциями черного ящика, а результирующее изображение также называетсязеркальное отображение черного ящика, иными словами, кроме того, что человек, сделавший образ, знает, какая команда была выполнена и как был сгенерирован образ, этого не знает вообще никто другой. Более того, даже тот, кто делал зеркальное отображение, через некоторое время не мог вспомнить конкретную операцию. Поддержание такого образа черного ящика очень болезненно.
Более того, оглядываясь назад на концепцию многоуровневого хранилища, используемую упомянутым ранее зеркалированием, каждый предыдущий уровень, кроме текущего уровня, не изменится. Другими словами, результатом любой модификации является просто пометка текущего уровня. изменить без изменения предыдущего слоя. При использованииdocker commit
Если вы создадите изображение и позже измените его, каждое изменение будет делать изображение более раздутым.Удаленные элементы на верхнем слое не будут потеряны и всегда будут следовать за изображением, даже если оно вообще недоступно. Это сделает изображение более раздутым.