Из предыдущего введения мы знали, что образ — это один из трех основных компонентов Docker. Прежде чем Docker сможет запустить контейнер, соответствующий образ должен существовать локально. Если образ не существует локально, Docker загрузит его из хранилища образов.
Как упоминалось ранее, в Docker Hub доступно большое количество высококачественных изображений. Здесь мы поговорим о том, как получить эти изображения.
от Docker Команда для получения изображения из хранилища изображений: docker pull
. Формат его команды:
docker pull [параметры] [Docker Registry Адрес[:номер порта]/]не указано в приведенной выше команде Docker Адрес склада зеркала, поэтому оно будет от Docker Hub Получите изображение.Название склада[:Этикетка]
Конкретные варианты можно найти через docker pull --help
команда, чтобы увидеть。
Например:
$ docker pull ubuntu:16.04
16.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:16.0
не указано в приведенной выше команде Docker Адрес склада зеркала, поэтому оно будет от Docker Hub Получите изображение.
Имя образа — ubuntu:16.04, поэтому будет получен образ с меткой 16.04 в официальной библиотеке изображений/репозитории Ubuntu.
от В процессе загрузки вы можете увидеть то, о чем мы упоминали ранее из Многоуровневое Согласно концепции хранилища, зеркало состоит из многоуровневого хранилища. Загрузка также производится послойно, нет одного файла. Процесс загрузки приведен для каждого слоя из ID до 12 Кусочек. И скачать результат После завершения выдается полное изображение. sha256 сводка, чтобы обеспечить согласованность загрузки.
Если от Docker Hub Загрузка изображения происходит очень медленно, см. Зеркальное ускорение Один раздел настраивает ускоритель.
бегать:
Получив образ, мы можем запустить и запустить контейнер на основе этого образа. Взяв в качестве примера приведенный выше Ubuntu: 16.04, если мы планируем запустить bash внутри и выполнять интерактивные операции, мы можем выполнить следующую команду.
$ docker run -it --rm \
ubuntu:16.04 \
bash
root@e7009c6ce357:/# cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.4 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.4 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
docker run
Это команда для запуска контейнера. Мы обсудим конкретный формат. контейнер Подробное объяснение будет дано в этом разделе. Здесь мы кратко объясним параметры, использованные выше.
-it
:Это два параметра,один -i : Интерактивная операция, одна из них -t Терминал. Планируем сюда поступить bash Выполните несколько команд и посмотрите возвращаемые результаты, поэтому нам нужен интерактивный терминал.--rm
:Этот параметр означаетконтейнер После выхода замените его наудалить.По По умолчанию, для того, чтобы решить проблему, выйдите из Сервер не будет удален немедленно, если только вручную docker rm . Мы просто выполняем здесь случайную команду и видим результаты. Нет необходимости устранять неполадки и сохранять результаты, поэтому используйте --rm Это позволяет избежать потери пространства.ubuntu:16.04
:Имеется в виду использование ubuntu:16.04 зеркалодля Основы для началаконтейнер。bash
:помещатьсуществоватьзеркало После имениизэто заказ,Здесь мы надеемся провести интерактивный Шелл, так из есть bash 。После входа в контейнер мы можем существовать Shell Далее выполните все необходимые команды. Здесь мы выполнили cat /etc/os-release ,Это Linux Обычно используется для просмотра текущей версии системы с помощью команды, при возврате результатов вы можете увидеть контейнер Внутри есть Ubuntu 16.04.4 LTS система.
Наконец-то ты можешь пройтиexit
покидатьконтейнер。
Чтобы просмотреть загруженные изображения, вы можете использовать docker image ls
Заказ.
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 5f515359c7f8 5 days ago 183 MB
nginx latest 05a60462f8ba 5 days ago 181 MB
mongo 3.2 fe9198c04d62 5 days ago 342 MB
<none> <none> 00285df0df87 5 days ago 342 MB
ubuntu 16.04 f753707788c5 4 weeks ago 127 MB
ubuntu latest f753707788c5 4 weeks ago 127 MB
ubuntu 14.04 1e0c3dd64ccd 4 weeks ago 188 MB
Список содержит Название склада
、 Этикетка
、 зеркало ID
、 время создания
а также Пространство, занимаемое
。
Среди них «Название склада» и «Этикеткасуществовать», которые были представлены в предыдущих главах, посвященных основным понятиям.
зеркало ID Это уникальный идентификатор зеркалаиз, зеркало может соответствовать нескольким Этикеткам (то есть версиям). Таким образом, из приведенного выше примера мы можем видеть ubuntu:16.04 и ubuntu:latest иметь то же самое ID, потому что они соответствуют тому же зеркалу.
Если вы посмотрите внимательно, то увидите, что место, занимаемое логотипом, здесь исуществовать. Docker Hub Посмотрите иззеркало разных размеров. например, ubuntu:16.04 размер зеркала, существует вот это 127 MB , но в Docker Hub То, что отображается, 50 MB 。
Это потому, что Docker Hub Объем, показанный на рисунке, представляет собой сжатый объем. существуетзеркало во время скачивания и выгрузки зеркало есть остается сжатым, поэтому Docker Hub Показанный размер представляет собой размер трафика, который имеет большее значение при передаче по сети. и docker image ls
Дисплей из зеркала после загрузки на локальный сайт,Развернуть размер,Если быть точным,Это общее пространство, занимаемое каждым слоем после расширения.,После прибытия на место из-за визеркало,Просмотр пространства и времени,Меня больше беспокоит размер занимаемого локального дискового пространства.
Еще одна проблема, требующая внимания, заключается в том, что docker image ls
в спискеиззеркало Общий объемиНетдавсезеркало Фактическое потребление жесткого диска。потому что Docker Зеркало представляет собой многослойную структуру хранения, которую можно унаследовать и использовать повторно, поэтому разные зеркала могут меняться в зависимости от Используйте то же самое из базового зеркала, что и из общих слоев. потому что Docker использовать Многоуровневое хранилище(Union FS), нужно только сохранить тот же слой Просто сохраните одну копию, чтобы фактическое занятое пространство на жестком диске, вероятно, было намного меньше, чем размер и общий размер этого списка.
Вы можете использовать следующие команды, чтобы легко просматривать зеркало, контейнер и тома данных пространство занято.
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAI MABLE
Images 24 0 1.992GB 1.992GB (100%)
Containers 1 0 62.82MB 62.82MB (100%)
Local Volumes 9 0 652.2MB 652.2MB (100%)
Build Cache 0B 0B
иззеркало список выше,Вы также можете увидеть специальное иззеркало.,У этого зеркала нет названия. в наличии, без этикетки и т. д. для <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>
иззеркало。Такое ничего Этикетказеркалотакже известный какдляприостановленныйзеркало (dangling image) , вы можете использовать следующую команду для отображения этого типа зеркала:
$ docker image ls -f dangling=true
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 00285df0df87 5 days ago 342 MB
Вообще говоря,Виртуальное висящее зеркало утратило ценность существования.,Вы можете удалить его по своему желанию,Вы можете использовать следующую команду удалить.
$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Deleted Images:
....
Для того, чтобы ускорить сборку зеркала и повторное использование ресурсов, Docker буду использовать средний слойзеркало。таксуществоватьиспользоватьспустя некоторое время,Вы можете увидеть некоторые зависимостиизсредний слойзеркало。по умолчаниюизdocker image ls
в списке Толькопоказыватьверхний уровеньзеркало,если Если вы хотите отобразить все слова в зеркалесуществовать, включая средний слой, вам нужно добавить -a
параметр.
$ docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
bannerstudioblog0.1 latest 9f2070cdcccf 4 months ago 1.19GB
<none> <none> fde0dda57bd8 4 months ago 1.19GB
<none> <none> c1d6969dac38 4 months ago 1.19GB
<none> <none> 3259bedf1c23 4 months ago 941MB
<none> <none> 624dbf7d7d15 4 months ago 941MB
<none> <none> a59da3e50d84 8 months ago 1.19GB
blog 1.0 49c0867d1034 8 months ago 1.19GB
<none> <none> 3d90f69e5bbf 8 months ago 1.19GB
<none> <none> fc8359346240 8 months ago 941MB
<none> <none> 1013dd8cbbda 8 months ago 941MB
bannerblog 1.0 d56fe6bfb15d 12 months ago 1.19GB
<none> <none> 59013b16731b 12 months ago 1.19GB
<none> <none> 6d1d6db01a93 12 months ago 1.19GB
<none> <none> 35a790a2bce7 12 months ago 992MB
<none> <none> 7168e72c7905 15 months ago 1.17GB
beego-blog 0.1 024d19f072db 15 months ago 1.17GB
<none> <none> e6ae2d10a2fb 15 months ago 1.17GB
<none> <none> cdb0c5741207 15 months ago 962MB
<none> <none> f61bbad8b9bc 15 months ago 941MB
<none> <none> 2bec8d75d139 15 months ago 941MB
golang latest 276895edf967 19 months ago 941MB
mysql latest 3218b38490ce 19 months ago 516MB
centos 7 eeb6ee3f44bd 22 months ago 204MB
b3log/solo latest 4afbc7964f83 23 months ago 144MB
elasticsearch 7.12.0 9337ed510a0c 2 years ago 830MB
Таким образом, вы увидите много людей без Этикеткаиззеркало.,Отличается от предыдущего,Многие из этих без Этикеткаиззеркало являются средними слоями зеркало.,Это то, от чего зависит другое зеркало. Эти никакие Этикетказеркало удалять не следует.,В противном случае это приведет к ошибке зеркала верхнего уровня из-за потери зависимости. на самом деле,Эти зеркала удалять не нужно.,Потому что для сказал это раньше,Один и тот же слой будет сохранен только один раз.,и Эти зеркала не являются иззеркалоиз зависимостей, поэтому вы не сохраните лишнюю копию только потому, что они есть в списке, и вы все равно сохраните ее. Они нужны. Пока эти зависимости от них будут удалены, эти зависимости на среднем уровне также будут удалены.
Без добавления каких-либо параметров, docker image ls
В списке перечислены все верхние зеркала, но иногда нам нужно перечислить только некоторые зеркала.
docker image ls
Есть несколько параметров, которые могут помочь в этом.
Кроме, docker image ls
Также поддерживает мощные параметры фильтра. --filter или сокращенно -f . прежде чем мы Уже видел Понятноиспользоватьфильтр Приходитьсписокприостановленныйзеркалоизиспользование(docker image ls -f dangling=true
), у него гораздо больше применений.
Например, мы надеемся увидеть существование mongo:3.2, чтобы построить иззеркало, вы можете использовать следующую команду:
$ docker image ls -f since=mongo:3.2
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 5f515359c7f8 5 days ago 183 MB
nginx latest 05a60462f8ba 5 days ago 181 MB
Если вы хотите проверить перед определенным местом, вы также можете использовать «Заменить на перед Вот и все».
Кроме того, если зеркало buildчас, определяет LABEL
,Также доступно через LABEL фильтровать.
$ docker image ls -f label=com.example.version=0.1
По умолчанию, docker image ls
Будет выведена полная таблица, но этот контент нам понадобится постоянно. например, когда мы только что удалили зеркало Сюйсуань, нам нужно использовать docker image ls
Повесьте все из ID Составьте список перед передачей docker image rm
Команда использует параметр для для удаления указанного зеркала, которое используется в данный момент. -q параметр.
$ docker image ls -q
5f515359c7f8
05a60462f8ba
fe9198c04d62
00285df0df87
f753707788c5
f753707788c5
1e0c3dd64ccd
--filter
Сотрудничать -q
Произвести указанный диапазон из ID список, а затем отправить его другому docker Команда принимает параметры и выполняет определенные операции в пакетном режиме над этой группой сущностей. существовать Docker командная строкаиспользовать Очень часто в процессе,Не просто зеркало,В будущем мы увидим такого рода комбинации в различных командах для достижения очень мощных функций. Поэтому каждый раз, когда существующий документ видит фильтр,Вы можете узнать больше об их использовании.
в другое время,Возможно, мы просто недовольны структурой таблицы.,Я хочу организовать столбцы самостоятельно или не хочу иметь заголовки;,Это облегчает другим программам анализ результатов и т. д.,Это используется Go синтаксис шаблона.
например, следующая команда будет напрямую перечислять результаты зеркала и содержать только зеркалоIDи Название складаи Этикетка:
$ docker image ls --format "{{.ID}}: {{.Repository}}:{{.Tag}}"
9f2070cdcccf: bannerstudioblog0.1:latest
49c0867d1034: blog:1.0
d56fe6bfb15d: bannerblog:1.0
024d19f072db: beego-blog:0.1
276895edf967: golang:latest
3218b38490ce: mysql:latest
eeb6ee3f44bd: centos:7
4afbc7964f83: b3log/solo:latest
9337ed510a0c: elasticsearch:7.12.0
или предназначен для отображения в виде таблицы в изометрии,и имеет заголовок,По умолчанию то же самое,Но определите столбцы самостоятельно:
$ docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
IMAGE ID REPOSITORY TAG
9f2070cdcccf bannerstudioblog0.1 latest
49c0867d1034 blog 1.0
d56fe6bfb15d bannerblog 1.0
024d19f072db beego-blog 0.1
276895edf967 golang latest
3218b38490ce mysql latest
eeb6ee3f44bd centos 7
4afbc7964f83 b3log/solo latest
9337ed510a0c elasticsearch 7.12.0
Если вы хотите удалить локальное иззеркало, вы можете использовать docker image rm
Заказ,Его формат:
$ docker image rm [параметры] <зеркало1> [<зеркало2> ...]
в, <зеркало>
может быть зеркалокороткий ID 、 зеркалодлинный ID 、зеркалоимя или зеркалократкое содержание 。
Например, у нас есть зеркало:
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 0584b3d2cf6d 3 weeks ago 196.5 MB
redis alpine 501ad78535f0 3 weeks ago 21.03 MB
docker latest cf693ec9b5c7 3 weeks ago 105.1 MB
nginx latest e43d811ce2f4 5 weeks ago 181.5 MB
Можем дополнить зеркаломиз. ID, также известный как для длинный ID , чтобы удалить зеркало.
использовать Скриптиз Иногда можно использоватьдлинный удостоверение личности, но Ручной ввод слишком утомителен, поэтому большую часть времени я использую короткий ID снять зеркало.
docker image ls В списке по умолчанию из уже короткий ID Понятно,Обычно берут первые 3 символа или более.,Пока он достаточно отличим от других.
$ docker image rm 501
Untagged: redis:alpine
Untagged: redis@sha256:f1ed3708f538b537eb9c2a7dd50dc90a706f7debd7e1196c9264edeea521a86
d
Deleted: sha256:501ad78535f015d88872e13fa87a828425117e3d28075d0c117932b05bf189b7
Deleted: sha256:96167737e29ca8e9d74982ef2a0dda76ed7b430da55e321c071f0dbff8c2899b
Deleted: sha256:32770d1dcf835f192cafd6b9263b7b597a1778a403a109e2cc2ee866f74adf23
Deleted: sha256:127227698ad74a5846ff5153475e03439d96d4b1c7f2a449c7a826ef74a2d2fa
Deleted: sha256:1333ecc582459bac54e1437335c0816bc17634e131ea0cc48daa27d32c75eab3
Deleted: sha256:4fc455b921edf9c4aea207c51ab39b10b06540c8b4825ba57b3feed1668fa7c7
Мы также можем использовать зеркалоимя
, то есть <Название склада>:<Этикетка>
, чтобы удалить зеркало.
$ docker image rm centos
Untagged: centos:latest
Untagged: centos@sha256:b2f9d1c0ff5f87a4743104d099a3d561002ac500db1b9bfa02a783a46e0d36
6c
Deleted: sha256:0584b3d2cf6d235ee310cf14b54667d889887b838d3f3d3033acd70fc3c48b8a
Deleted: sha256:97ca462ad9eeae25941546209454496e1d66749d53dfa2ee32bf1faabd239d38
Конечно, более точное использование isuse зеркалократкое содержание
удалитьзеркало。
$ 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
Если вы наблюдаете за выходной информацией приведенных выше команд,,Вам будет предоставлено Уведомление для удаления строк, разделенных на две категории.,Категорияда Untagged
,另Категорияда Deleted
。Мы представили его раньше,зеркалоизуникальный идентификаторда Что ID и резюме, в то время как Зеркало может иметь несколько этикеток.
Поэтому, когда мы выше приказываем удалить зеркалоиз, оно фактически просит удалить определенное Этикеткаиззеркало.
Итак, сначала Что необходимо сделать, так это удовлетворить наши требования из Все зеркала Этикетка отменена, вот что мы видим из Untagged
изинформация。
Потому что одному зеркалу может соответствовать несколько Этикеток.,Поэтому когда мы удаляем указанную из Этикетку,На это зеркало может указывать другая из Этикетка.,еслида В этом случае, тогда Delete
ХОРОШОдляэтого не произойдет。так Нетвсеиз docker rmi
приведет к удалениюзеркалоиз ХОРОШОдля,Возможно, просто какая-то Этикетка была отменена. При отмене зеркалаall из Этикетка,Зеркало, скорее всего, потеряет смысл существования.,Поэтому инициируется удаление строки для.
зеркало – это многоярусное хранилищеструктура,поэтомусуществоватьудалитьизвремя тожедаотнаправление вверх Базанаправление слоев по порядку ХОРОШОсуждениеудалить. Многослойная структура зеркала позволяет очень легко повторно использовать изменения в зеркале, поэтому это вполне возможно. какое-то другое зеркало зависят от На данный момент зеркалоиз определенного уровня. В этом случае,Удаление слоя по-прежнему не будет инициировано. Пока ни один слой не будет зависеть от текущего слоя час,Только тогда текущий слой будет действительно удален.
Это то, что для,Иногда это странно,для чего явно нет разницы из Этикетка указывает на это зеркало, Но это все равно сохраняет причины того, почему иногда вы обнаруживаете, что слои удалены. docker pull
увидеть из Количество слоев разное.изпричина。(Не понимаю)
В дополнение к зависимости от зеркала,Также обязательное Уведомление о том, что контейнер зависит от размера зеркала. Если пригодится это зеркало, запустите изконтейнер, сохраните существование (даже если у контейнера нет запуска),Тогда и это зеркало удалить нельзя. Сказал это раньше,контейнердакзеркалодля База,Добавьте еще один уровень хранения,Эта многоуровневая структура хранения состоит из архитектур. Итак, если это зеркало зависит от этого контейнера,Тогда удаление неизбежно приведет к сбою. Если эти контейнеры не нужны из,Их следует удалить в первую очередь,Потом снова зеркало.
Как и другие команды, которые могут обрабатывать несколько объектов, вы можете 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 -filter before=mongo:3.2)
В полной мере используйте свое воображение. Командная строка Linux настолько мощна, что вы можете выполнять множество удивительных функций.
Уведомление:
docker commit
Заказ Кромевне учебы,Также есть специальные приложения,Например, сохранение сцены после вторжения и т. д. но,не хочуиспользоватьdocker commit
сделанный на заказзеркало,сделанный на заказзеркалодолжениспользоватьDockerfile
Приходить Заканчивать。еслиты хочешьсделанный на заказзеркалопожалуйста, проверьтеDockerfile。
зеркало является основой для любого исполнения контейнериз. docker run
из всегда уточнит, какое зеркало является основой дляконтейнера протектиз.
В предыдущих примерах существования все нашииспользования взяты из Docker Hub
иззеркало. Непосредственное использование этих зеркал может удовлетворить определенные потребности, а когда эти зеркала не могут напрямую удовлетворить потребности, нам необходимо настроить эти зеркала. В следующих нескольких разделах объясняется, как настроить зеркало.
Повторите то, что вы узнали ранее,зеркало – это многоярусное хранилище,Каждый уровень модифицируется на основе предыдущего слоя, а контейнер также является многоуровневым хранилищем;,дасуществоватькзеркалодля Базаслой,существование добавляет слой поверх него в качестве слоя хранения.
Теперь существующие настроят веб-сервер, чтобы объяснить, как устроено зеркало.
$ docker run --rm --name webserver -d -p 80:80 nginx
-p
: Укажите сопоставление портов,Форматдля:Порт хоста (хоста): порт контейнера。-d
: За кулисамибегатьконтейнер,И вернуть идентификатор контейнера;--name=""
: дляконтейнер указывает имя;Эта команда будет использовать nginx зеркало запускает контейнер с именем для webserver
,и карта Понятно 80
порт,Таким образом, мы можем использовать браузер для доступа к этому серверу nginx (http://ip хоста Вот и все).
Если мы напрямую воспользуемся доступом через браузер, мы увидим страницу Приветственная страница Nginx по умолчанию.
сейчассуществовать,Допустим, нам очень не нравится эта страница приветствия.,наснадеяться改成欢迎 Docker из текста, который мы можем использовать docker exec
Команда входит в контейнер и изменяет его содержимое.
$ docker exec -it webserver bash
root@1323f3676fc3:/# echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
root@1323f3676fc3:/# exit
Входим в режим интерактивного терминала webserver контейнер и выполнен bash Заказ, то есть Получить работоспособную версию из Shell.
Затем мы используем <<h1>Hello, Docker!</h1>
покрытый /usr/share/nginx/html/index.html
из содержания.
Теперь существуют, если мы снова обновим браузер, мы обнаружим, что содержимое было изменено.
Мы изменили файловый контейнериз, то есть измененный слой хранения контейнериз. мы можем пройти docker diff команда, чтобы увидеть Конкретные изменения.
$ docker diff webserver
C /root
A /root/.bash_history
C /var
C /var/cache
C /var/cache/nginx
A /var/cache/nginx/fastcgi_temp
A /var/cache/nginx/proxy_temp
A /var/cache/nginx/scgi_temp
A /var/cache/nginx/uwsgi_temp
A /var/cache/nginx/client_temp
C /run
A /run/nginx.pid
C /etc
C /etc/nginx
C /etc/nginx/conf.d
C /etc/nginx/conf.d/default.conf
C /usr
C /usr/share
C /usr/share/nginx
C /usr/share/nginx/html
C /usr/share/nginx/html/index.html
В настоящее время мы настроили изменения и надеемся сохранить их в форме зеркала.
знать,Когда мы запускаем контейнериз (если не использовать объем слов),нас Делатьиз Любые изменения файла будут записаны вконтейнер На уровне хранения。и Docker предоставил docker commit
Заказ,Уровень хранения контейнериз можно сохранить как вместилище. другими словами,Основано на оригинальном зеркалеиз,Затем добавьте слой хранения,И составляют новое иззеркало. Отныне у нас будет это новое время,У вас будет исходный контейнер последних изменений файла.
docker commit
формат грамматикидля:
$ docker commit [параметры] <контейнерIDиликонтейнеримя> [<Название склада>[:<Этикетка>]]
Мы можем использовать следующую команду из, чтобы сохранить контейнер в дозеркало:
$ docker commit --author 'hyy' --message «Изменена веб-страница по умолчанию» webserver nginx:v2
sha256:07e33465974800ce65751acc279adc6ed2dc5ed4e0838f8b86f0c87aa1795214
--author
:да Укажите модификациюизавтор--message
:нода Запишите это изменениеизсодержаниеи git
Контроль версий аналогичен,Однако эту информацию можно пропустить и оставить пустой.
Мы можем существовать docker image ls
Посмотрите это новое кастомное иззеркало.
docker image ls nginx
мы также можем использовать docker history
Специально проверьте историю зеркала внутри, если сравниваете. nginx:latest история Запишите, мы обнаружим, что слой, который мы только что отправили, был добавлен.
$ docker history ngigx:v2
IMAGE CREATED CREATED BY SIZE COMMENT
07e334659748 54 seconds ago nginx -g daemon off; 95 B Изменена веб-страница по умолчанию.
...
После того, как новое иззеркало будет настроено, мы сможем приступить к заказу этого зеркала.
$ docker run --name webserver2 -d -p 81:80 nginx:v2
доступ http://хост:81 Вы можете увидеть измененную страницу только сейчас.
До сих пор,Мы впервые завершили настройку,использоватьизда docker commit Команда, ручная операция по добавлению старого иззеркало добавлять Понятноновыйизслой,сформировать новое иззеркало,Многослойное хранилище должно вызывать более интуитивное ощущение.
использовать docker commit Хотя команда может быть более интуитивно понятной и поможет понять зеркало Многоуровневое концепция хранилища, а реальная среда При использовании это не так.
первый,Если внимательно посмотреть Доиз docker diff webserver
Из результатов вы обнаружите, что помимо того, что вы действительно хотите изменить, /usr/share/nginx/html/index.html
вне файла,Поскольку команда из выполняется,Многие файлы были измененыилидобавить в Понятно。
Это самая простая операция,Если вы устанавливаете пакеты программного обеспечения, компилируете и собираете,Тогда будет добавлено много нерелевантного контента.,Если вы случайно почистили его,Зеркало будет сильно раздутым.
также,использовать docker commit
Это означает, что все операции над зеркалом являются операциями черного ящика, а генерацию иззеркало еще называют для черного ящика. Другими словами, кроме человека, который сделал зеркалоиз, который знает, какие команды были выполнены и как генерировать иззеркало, вообще никто не знает. Более того, даже человек, изготовивший зеркалоиз, через некоторое время не может вспомнить конкретную существующую операцию. Хотя docker diff
Возможно, мы сможем получить какие-то подсказки, но это далеко не тот момент, когда мы сможем обеспечить достоверное отражение. Обслуживание этого черного ящика очень болезненно.
И просмотрите то, что было упомянуто ранее, используя Многоуровневое Концепция хранилища, за исключением текущего слоя, каждый предыдущий слой не изменится. Другими словами, результат любой модификации является просто результатом. существования Отмечайте, добавляйте и изменяйте текущий слой, не изменяя предыдущий слой. Если сипользовать docker commit делатьзеркало,а Также Если вы измените его позже, каждое изменение приведет к появлению зеркала. Еще более раздутым является то, что удаленные элементы на предыдущем слое не будут потеряны и всегда будут следовать за этим элементом, даже если Туда просто невозможно попасть. Это сделает зеркало еще более раздутым.
ЯсуществоватьучаствоватьСпециальный тренировочный лагерь Tencent Technology Creation 2023, Второй выпуск Конкурс эссе, получивший приз, чтобы разделить призовой фонд в 10 000 юаней и часы с клавиатурой