Это 4-й день моего участия в августовском испытании обновлений.Подробности о событии:Испытание августовского обновления
Образ представляет собой легкий исполняемый независимый программный пакет, используемый для упаковки среды выполнения программного обеспечения и разработки программного обеспечения на основе среды выполнения.Он содержит все содержимое, необходимое программному обеспечению, включая код, библиотеки времени выполнения, переменные среды и файл конфигурации.
UnionFs (объединенная файловая система)
UnionFS (Union File System): Union File System (UnionFS) — это многоуровневая, легкая и высокопроизводительная файловая система. файловая система (объединить несколько каталогов в единую виртуальную файловую систему). Файловая система Union является основой образов Docker. Образы могут наследоваться через слои.На основе базового образа (без родительского образа) могут создаваться различные специфические образы приложений.характеристика: одновременная загрузка нескольких файловых систем, но снаружи видна только одна файловая система.Совместная загрузка наложит каждый слой файловых систем, так что окончательная файловая система будет содержать все нижележащие файлы и каталоги.
При загрузке образа докера слой за слоем на самом деле является воплощением совместной файловой системы
Принцип загрузки образа Docker
Образ докера фактически состоит из послойной файловой системы, файловой системы UnionFS на этом уровне. Bootfs (загрузочная файловая система) в основном включает в себя загрузчик и ядро. Загрузчик в основном загружает ядро. При запуске Linux загружается файловая система bootfs. Нижний слой образа Docker — это bootfs. Этот уровень аналогичен нашей типичной системе Linux/Unix и содержит загрузчик и ядро. При загрузке бут все ядро находится в памяти.В это время права на использование памяти переданы от bootfs к ядру, и система также выгрузит bootfs.
rootfs (корневая файловая система) поверх bootfs. Он содержит стандартные каталоги и файлы, такие как /dev, /proc, /bin, /etc в типичной системе Linux. rootfs — это множество различных дистрибутивов операционных систем, таких как Ubuntu, Centos и так далее.
Обычно CentOs, которые мы устанавливаем виртуальные машины, составляют несколько гигабайт, почему докер всего несколько сотен мегабайт
Для оптимизированной ОС rootfs может быть очень маленьким, и в него должны входить только самые основные команды, инструменты и библиотеки.Поскольку нижележащий уровень напрямую использует ядро хоста, вам нужно предоставить только rootfs. Видно, что для разных дистрибутивов Linux bootfs в основном одинаковые, а rootfs будут разными, поэтому разные дистрибутивы могут совместно использовать bootfs.
многоуровневое понимание
При загрузке docker-образа слой за слоем на самом деле наиболее интуитивное воплощение расслоения (он уже скачан и повторно скачиваться не будет)
$ docker pull redis
Using default tag: latest
latest: Pulling from library/redis
33847f680f63: Already exists
26a746039521: Pull complete
18d87da94363: Pull complete
5e118a708802: Pull complete
ecf0dbe7c357: Pull complete
46f280ba52da: Pull complete
Digest: sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest
Мы также можем передать команду проверки, упомянутую в предыдущей статье.
docker image inspect redis:latest
Вы можете увидеть конкретную информацию о слоях изображения, есть 6 слоев, соответствующих 6 слоям, когда изображение выше загружено.
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:814bff7343242acfd20a2c841e041dd57c50f0cf844d4abd2329f78b992197f4",
"sha256:dd1ebb1f5319785e34838c7332a71e5255bda9ccf61d2a0bf3bff3d2c3f4cdb4",
"sha256:11f99184504048b93dc2bdabf1999d6bc7d9d9ded54d15a5f09e36d8c571c32d",
"sha256:e461360755916af80821289b1cbc503692cf63e4e93f09b35784d9f7a819f7f2",
"sha256:45f6df6342536d948b07e9df6ad231bf17a73e5861a84fc3c9ee8a59f73d0f9f",
"sha256:262de04acb7e0165281132c876c0636c358963aa3e0b99e7fbeb8aba08c06935"
]
},
Преимущества многослойности:
Одно из самых больших преимуществ — совместное использование ресурсов
Например, если из одного и того же базового образа создается несколько образов, то Docker Host нужно сохранить только один базовый образ на диске, в то время как для обслуживания всех контейнеров требуется загрузить в память только один базовый образ. И каждый слой изображения может быть общим.
В настоящее время кто-то может спросить: если несколько контейнеров совместно используют базовый образ, когда контейнер изменяет содержимое базового образа, например файлы в /etc, будут ли изменены /etc других контейнеров? Ответ: Нет! Потому что модификации будут ограничены одним контейнером.
Это функция копирования при записи контейнера, которую мы собираемся изучить далее.
Доступный для записи слой контейнера
Когда контейнер запускается, новый записываемый слой загружается поверх изображения. Этот слой часто называют «контейнерным слоем», а все, что ниже «контейнерного слоя», называется «слоем изображения». Все операции выполняются для слоя контейнера, только слой контейнера доступен для записи, а все слои изображения ниже слоя контейнера доступны только для чтения.
зафиксировать изображение
docker commit 提交容器成为一个新的副本
Проиллюстрируем на примере
Я скачал образ кота здесь раньше
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest 710ec5c56683 7 days ago 668MB
redis latest aa4d65e670d6 3 weeks ago 105MB
mysql latest c60d96bd2b77 3 weeks ago 514MB
centos centos7 8652b9f0cb4c 9 months ago 204MB
начать кот
-- 镜像运行起来,并且将端口进行映射到宿主机端口
docker run -it -p 8080:8080 tomcat
Просмотрите текущий запущенный контейнер, создав другую команду, Tomcat работает
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8b294cd7074e tomcat "catalina.sh run" 29 seconds ago Up 28 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp zealous_cohen
f42ae22e4b72 centos:centos7 "/bin/bash" 3 weeks ago Up 46 hours centos-test
Затем мы входим в контейнер tomcat и смотрим
docker exec -it 8b294cd7074e /bin/bash
$ docker exec -it 8b294cd7074e /bin/bash
root@8b294cd7074e:/usr/local/tomcat# ls
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf lib logs native-jni-lib temp webapps webapps.dist work
Затем введите веб-приложение (расположение файла проекта) и посмотрите на него.Вы можете видеть, что веб-приложение пусто, как показано ниже.
root@8b294cd7074e:/usr/local/tomcat# cd webapps
root@8b294cd7074e:/usr/local/tomcat/webapps# ls
root@8b294cd7074e:/usr/local/tomcat/webapps#
Затем заходим в tomcat, 404 говорит о том, что tomcat запускается нормально, но соответствующая страница не найдена, что тоже несложно понять, в wabapp она должна быть пустой
Затем мы пытаемся сами сделать зеркало контента в веб-приложении.
Копируем файлы из webapps.dist в wabapp
root@8b294cd7074e:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@8b294cd7074e:/usr/local/tomcat# cd webapps
root@8b294cd7074e:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager
После модификации выяснилось, что к tomcat можно нормально обращаться
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8b294cd7074e tomcat "catalina.sh run" 27 minutes ago Up 27 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp zealous_cohen
Сейчас мы сделали простую модификацию этого кота.Мне кажется, мой кот немного лучше официального.Представляю свое зеркальное отражение.
$ docker commit -a="cb" -m "add init file" 8b294cd7074e newtomcat:1.0
sha256:44cf4d44be664d9704a3fc38ddef1f03fa7f113ad83f4049cced322a14dc216b
Через образы докеров вы можете видеть, что создается новый образ.Если вы внимательно посмотрите, вы обнаружите, что новый кот, который мы представили, немного больше, чем официальный кот.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
newtomcat 1.0 44cf4d44be66 46 seconds ago 673MB
tomcat latest 710ec5c56683 7 days ago 668MB
redis latest aa4d65e670d6 3 weeks ago 105MB
mysql latest c60d96bd2b77 3 weeks ago 514MB
centos centos7 8652b9f0cb4c 9 months ago 204MB
Позже вы можете напрямую использовать свое собственное изображение или опубликовать его для использования другими.
В этом примере мы можем рассмотреть приведенную выше идею многослойности. Newtomcat — это образ, сгенерированный после того, как мы изменили предыдущий слой контейнера. Этот образ аналогичен снимку образа виртуальной машины.
Это все, что касается зеркального отображения докера. Пока что докер — это простая запись. Мы продолжим изучать контент, связанный с докером, позже.
Смерти Сунь Гуна нет конца, но вклады династии Тан окажутся в море