Начало работы с Docker (5): использование зеркал
Начало работы с Docker (5): использование зеркал

4. 💖Используйте зеркальное отображение

Из предыдущего введения мы знали, что образ — это один из трех основных компонентов Docker. Прежде чем Docker сможет запустить контейнер, соответствующий образ должен существовать локально. Если образ не существует локально, Docker загрузит его из хранилища образов.

1. Получите изображение

Как упоминалось ранее, в Docker Hub доступно большое количество высококачественных изображений. Здесь мы поговорим о том, как получить эти изображения.

от Docker Команда для получения изображения из хранилища изображений: docker pull . Формат его команды:

Язык кода:javascript
копировать
 docker pull [параметры] [Docker Registry Адрес[:номер порта]/]не указано в приведенной выше команде Docker Адрес склада зеркала, поэтому оно будет от Docker Hub Получите изображение.Название склада[:Этикетка]

Конкретные варианты можно найти через docker pull --helpкоманда, чтобы увидеть。

  • Docker Адрес склада зеркала: Адрес в обычном формате <доменное имя/IP>[:номер порта] . Адрес по умолчанию: Docker Hub。
  • Название склада: Как уже говорилось ранее, здесь из Название склада — имя, состоящее из двух частей, т.е. <имя пользователя>/<Название программного обеспечения> . для Docker Hub, если имя пользователя не указано, по умолчанию используется значение для library ,то есть «зеркало».

Например

Язык кода:javascript
копировать
 $ 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 внутри и выполнять интерактивные операции, мы можем выполнить следующую команду.

Язык кода:javascript
копировать
 $ 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покидатьконтейнер。

2. Перечислите изображения

Чтобы просмотреть загруженные изображения, вы можете использовать docker image ls Заказ.

Язык кода:javascript
копировать
 $ 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, потому что они соответствуют тому же зеркалу.

2.1 Объем зеркала

Если вы посмотрите внимательно, то увидите, что место, занимаемое логотипом, здесь исуществовать. 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), нужно только сохранить тот же слой Просто сохраните одну копию, чтобы фактическое занятое пространство на жестком диске, вероятно, было намного меньше, чем размер и общий размер этого списка.

Вы можете использовать следующие команды, чтобы легко просматривать зеркало, контейнер и тома данных пространство занято.

Язык кода:javascript
копировать
 $ 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
2.2 Виртуальное подвесное зеркало

иззеркало список выше,Вы также можете увидеть специальное иззеркало.,У этого зеркала нет названия. в наличии, без этикетки и т. д. для <none>

Язык кода:javascript
копировать
 <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) , вы можете использовать следующую команду для отображения этого типа зеркала:

Язык кода:javascript
копировать
 $ docker image ls -f dangling=true
 REPOSITORY  TAG     IMAGE ID    CREATED     SIZE
 <none>      <none> 00285df0df87 5 days ago   342 MB

Вообще говоря,Виртуальное висящее зеркало утратило ценность существования.,Вы можете удалить его по своему желанию,Вы можете использовать следующую команду удалить.

Язык кода:javascript
копировать
  $ docker image prune
 ​
 WARNING! This will remove all dangling images.
 Are you sure you want to continue? [y/N] y            
 Deleted Images:
 ....
2.3 Зеркальное отображение среднего уровня

Для того, чтобы ускорить сборку зеркала и повторное использование ресурсов, Docker буду использовать средний слойзеркало。таксуществоватьиспользоватьспустя некоторое время,Вы можете увидеть некоторые зависимостиизсредний слойзеркало。по умолчаниюизdocker image lsв списке Толькопоказыватьверхний уровеньзеркало,если Если вы хотите отобразить все слова в зеркалесуществовать, включая средний слой, вам нужно добавить -a параметр.

Язык кода:javascript
копировать
 $ 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

Таким образом, вы увидите много людей без Этикеткаиззеркало.,Отличается от предыдущего,Многие из этих без Этикеткаиззеркало являются средними слоями зеркало.,Это то, от чего зависит другое зеркало. Эти никакие Этикетказеркало удалять не следует.,В противном случае это приведет к ошибке зеркала верхнего уровня из-за потери зависимости. на самом деле,Эти зеркала удалять не нужно.,Потому что для сказал это раньше,Один и тот же слой будет сохранен только один раз.,и Эти зеркала не являются иззеркалоиз зависимостей, поэтому вы не сохраните лишнюю копию только потому, что они есть в списке, и вы все равно сохраните ее. Они нужны. Пока эти зависимости от них будут удалены, эти зависимости на среднем уровне также будут удалены.

2.4 Перечислите несколько изображений

Без добавления каких-либо параметров, docker image ls В списке перечислены все верхние зеркала, но иногда нам нужно перечислить только некоторые зеркала.

docker image ls Есть несколько параметров, которые могут помочь в этом.

  1. По названию склада Список зеркал: $ docker image ls ubuntu REPOSITORY TAG IMAGE ID CREATED SIZE 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
  2. Перечислите конкретное из зеркала,это Скажем, укажите WarehouseNameLabel $ docker image ls ubuntu:16.04 ТЕГ РЕПОЗИТОРИЯ ИДЕНТИФИКАТОР ИЗОБРАЖЕНИЯ СОЗДАННЫЙ РАЗМЕР ubuntu 16.04 f753707788c5 4 недели назад 127 МБ

Кроме, docker image ls Также поддерживает мощные параметры фильтра. --filter или сокращенно -f . прежде чем мы Уже видел Понятноиспользоватьфильтр Приходитьсписокприостановленныйзеркалоизиспользование(docker image ls -f dangling=true ), у него гораздо больше применений.

Например, мы надеемся увидеть существование mongo:3.2, чтобы построить иззеркало, вы можете использовать следующую команду:

Язык кода:javascript
копировать
 $ 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 фильтровать.

Язык кода:javascript
копировать
 $ docker image ls -f label=com.example.version=0.1
2.5 Отображение в определенном формате

По умолчанию, docker image ls Будет выведена полная таблица, но этот контент нам понадобится постоянно. например, когда мы только что удалили зеркало Сюйсуань, нам нужно использовать docker image ls Повесьте все из ID Составьте список перед передачей docker image rm Команда использует параметр для для удаления указанного зеркала, которое используется в данный момент. -q параметр.

Язык кода:javascript
копировать
 $ docker image ls -q
 5f515359c7f8
 05a60462f8ba
 fe9198c04d62
 00285df0df87
 f753707788c5
 f753707788c5
 1e0c3dd64ccd

--filter Сотрудничать -q Произвести указанный диапазон из ID список, а затем отправить его другому docker Команда принимает параметры и выполняет определенные операции в пакетном режиме над этой группой сущностей. существовать Docker командная строкаиспользовать Очень часто в процессе,Не просто зеркало,В будущем мы увидим такого рода комбинации в различных командах для достижения очень мощных функций. Поэтому каждый раз, когда существующий документ видит фильтр,Вы можете узнать больше об их использовании.

в другое время,Возможно, мы просто недовольны структурой таблицы.,Я хочу организовать столбцы самостоятельно или не хочу иметь заголовки;,Это облегчает другим программам анализ результатов и т. д.,Это используется Go синтаксис шаблона.

например, следующая команда будет напрямую перечислять результаты зеркала и содержать только зеркалоIDи Название складаи Этикетка:

Язык кода:javascript
копировать
 $ 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

или предназначен для отображения в виде таблицы в изометрии,и имеет заголовок,По умолчанию то же самое,Но определите столбцы самостоятельно:

Язык кода:javascript
копировать
 $ 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

3. Удалить локальное зеркало

Если вы хотите удалить локальное иззеркало, вы можете использовать docker image rmЗаказ,Его формат:

Язык кода:javascript
копировать
 $ docker image rm [параметры] <зеркало1> [<зеркало2> ...]

в, <зеркало> может быть зеркалокороткий ID 、 зеркалодлинный ID 、зеркалоимя или зеркалократкое содержание 。

Например, у нас есть зеркало:

Язык кода:javascript
копировать
 $ 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 символа или более.,Пока он достаточно отличим от других.

Язык кода:javascript
копировать
 $ 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

Мы также можем использовать зеркалоимя , то есть <Название склада>:<Этикетка> , чтобы удалить зеркало.

Язык кода:javascript
копировать
 $ docker image rm centos
 Untagged: centos:latest
 Untagged: centos@sha256:b2f9d1c0ff5f87a4743104d099a3d561002ac500db1b9bfa02a783a46e0d36
 6c
 Deleted: sha256:0584b3d2cf6d235ee310cf14b54667d889887b838d3f3d3033acd70fc3c48b8a
 Deleted: sha256:97ca462ad9eeae25941546209454496e1d66749d53dfa2ee32bf1faabd239d38

Конечно, более точное использование isuse зеркалократкое содержаниеудалитьзеркало。

Язык кода:javascript
копировать
 $ 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
3.1 Без тегов и удалено

Если вы наблюдаете за выходной информацией приведенных выше команд,,Вам будет предоставлено Уведомление для удаления строк, разделенных на две категории.,Категорияда Untagged,另Категорияда Deleted。Мы представили его раньше,зеркалоизуникальный идентификаторда Что ID и резюме, в то время как Зеркало может иметь несколько этикеток.

Поэтому, когда мы выше приказываем удалить зеркалоиз, оно фактически просит удалить определенное Этикеткаиззеркало.

Итак, сначала Что необходимо сделать, так это удовлетворить наши требования из Все зеркала Этикетка отменена, вот что мы видим из Untaggedизинформация。

Потому что одному зеркалу может соответствовать несколько Этикеток.,Поэтому когда мы удаляем указанную из Этикетку,На это зеркало может указывать другая из Этикетка.,еслида В этом случае, тогда DeleteХОРОШОдляэтого не произойдет。так Нетвсеиз docker rmi приведет к удалениюзеркалоиз ХОРОШОдля,Возможно, просто какая-то Этикетка была отменена. При отмене зеркалаall из Этикетка,Зеркало, скорее всего, потеряет смысл существования.,Поэтому инициируется удаление строки для.

зеркало – это многоярусное хранилищеструктура,поэтомусуществоватьудалитьизвремя тожедаотнаправление вверх Базанаправление слоев по порядку ХОРОШОсуждениеудалить. Многослойная структура зеркала позволяет очень легко повторно использовать изменения в зеркале, поэтому это вполне возможно. какое-то другое зеркало зависят от На данный момент зеркалоиз определенного уровня. В этом случае,Удаление слоя по-прежнему не будет инициировано. Пока ни один слой не будет зависеть от текущего слоя час,Только тогда текущий слой будет действительно удален.

Это то, что для,Иногда это странно,для чего явно нет разницы из Этикетка указывает на это зеркало, Но это все равно сохраняет причины того, почему иногда вы обнаруживаете, что слои удалены. docker pull увидеть из Количество слоев разное.изпричина。(Не понимаю)

В дополнение к зависимости от зеркала,Также обязательное Уведомление о том, что контейнер зависит от размера зеркала. Если пригодится это зеркало, запустите изконтейнер, сохраните существование (даже если у контейнера нет запуска),Тогда и это зеркало удалить нельзя. Сказал это раньше,контейнердакзеркалодля База,Добавьте еще один уровень хранения,Эта многоуровневая структура хранения состоит из архитектур. Итак, если это зеркало зависит от этого контейнера,Тогда удаление неизбежно приведет к сбою. Если эти контейнеры не нужны из,Их следует удалить в первую очередь,Потом снова зеркало.

3.2 Используйте команду docker image ls для сотрудничества

Как и другие команды, которые могут обрабатывать несколько объектов, вы можете docker image ls -q Приходить Сотрудничатьиспользовать docker image rm ,Это можно делать партиямиизудалитьнадеятьсяудалитьиззеркало。нассуществоватьСписок зеркалВ этой главе представлено множество фильтров.зеркалосписокиз Доступен любой методквзял это Приходитьиспользовать。

например, нам нужно удалить все Название склададля redis иззеркало:

Язык кода:javascript
копировать
 $ docker image rm $(docker image ls -q redis)

или Удалите все существование mongo:3.2 перед иззеркало:

Язык кода:javascript
копировать
 $ docker image rm $(docker image ls -q -filter before=mongo:3.2)

В полной мере используйте свое воображение. Командная строка Linux настолько мощна, что вы можете выполнять множество удивительных функций.

4. Используйте коммит, чтобы понять композицию изображения

Уведомлениеdocker commitЗаказ Кромевне учебы,Также есть специальные приложения,Например, сохранение сцены после вторжения и т. д. но,не хочуиспользоватьdocker commitсделанный на заказзеркало,сделанный на заказзеркалодолжениспользовать DockerfileПриходить Заканчивать。еслиты хочешьсделанный на заказзеркалопожалуйста, проверьтеDockerfile

зеркало является основой для любого исполнения контейнериз. docker run из всегда уточнит, какое зеркало является основой дляконтейнера протектиз.

В предыдущих примерах существования все нашииспользования взяты из Docker Hub иззеркало. Непосредственное использование этих зеркал может удовлетворить определенные потребности, а когда эти зеркала не могут напрямую удовлетворить потребности, нам необходимо настроить эти зеркала. В следующих нескольких разделах объясняется, как настроить зеркало.

Повторите то, что вы узнали ранее,зеркало – это многоярусное хранилище,Каждый уровень модифицируется на основе предыдущего слоя, а контейнер также является многоуровневым хранилищем;,дасуществоватькзеркалодля Базаслой,существование добавляет слой поверх него в качестве слоя хранения.

Теперь существующие настроят веб-сервер, чтобы объяснить, как устроено зеркало.

Язык кода:javascript
копировать
 $ docker run --rm --name webserver -d -p 80:80 nginx 
  • -p: Укажите сопоставление портов,Форматдля:Порт хоста (хоста): порт контейнера
  • -d: За кулисамибегатьконтейнер,И вернуть идентификатор контейнера;
  • --name="": дляконтейнер указывает имя;

Эта команда будет использовать nginx зеркало запускает контейнер с именем для webserver,и карта Понятно 80порт,Таким образом, мы можем использовать браузер для доступа к этому серверу nginx (http://ip хоста Вот и все).

Если мы напрямую воспользуемся доступом через браузер, мы увидим страницу Приветственная страница Nginx по умолчанию.

сейчассуществовать,Допустим, нам очень не нравится эта страница приветствия.,наснадеяться改成欢迎 Docker из текста, который мы можем использовать docker exec Команда входит в контейнер и изменяет его содержимое.

Язык кода:javascript
копировать
 $ 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 команда, чтобы увидеть Конкретные изменения.

Язык кода:javascript
копировать
 $ 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 формат грамматикидля:

Язык кода:javascript
копировать
 $ docker commit [параметры] <контейнерIDиликонтейнеримя> [<Название склада>[:<Этикетка>]]

Мы можем использовать следующую команду из, чтобы сохранить контейнер в дозеркало:

Язык кода:javascript
копировать
 $ docker commit --author 'hyy' --message «Изменена веб-страница по умолчанию» webserver nginx:v2
 sha256:07e33465974800ce65751acc279adc6ed2dc5ed4e0838f8b86f0c87aa1795214
  • --author:да Укажите модификациюизавтор
  • --message:нода Запишите это изменениеизсодержание

и gitКонтроль версий аналогичен,Однако эту информацию можно пропустить и оставить пустой.

Мы можем существовать docker image ls Посмотрите это новое кастомное иззеркало.

Язык кода:javascript
копировать
 docker image ls nginx

мы также можем использовать docker history Специально проверьте историю зеркала внутри, если сравниваете. nginx:latest история Запишите, мы обнаружим, что слой, который мы только что отправили, был добавлен.

Язык кода:javascript
копировать
 $ docker  history ngigx:v2
 IMAGE CREATED CREATED BY    SIZE COMMENT
 07e334659748 54 seconds ago nginx -g daemon off; 95 B Изменена веб-страница по умолчанию.
 ...

После того, как новое иззеркало будет настроено, мы сможем приступить к заказу этого зеркала.

Язык кода:javascript
копировать
 $ docker run --name webserver2 -d -p 81:80 nginx:v2

доступ http://хост:81 Вы можете увидеть измененную страницу только сейчас.

До сих пор,Мы впервые завершили настройку,использоватьизда docker commit Команда, ручная операция по добавлению старого иззеркало добавлять Понятноновыйизслой,сформировать новое иззеркало,Многослойное хранилище должно вызывать более интуитивное ощущение.

4.1 Используйте 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 юаней и часы с клавиатурой

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода