Docker: построй и детализируй - PullRequest
0 голосов
/ 14 мая 2018

Многие люди знают, что docker build и docker push вообще делают на высоком уровне, но что именно они делают на низком уровне?

скажем, у нас есть Dockerfile вот так

FROM alpine:latest
RUN touch ~/tmp
RUN touch ~/tmp2

это создаст дельта-файловую систему (только изменения) для каждого слоя в /var/lib/docker/overlay2.

  1. слой содержит всю файловую систему
  2. слой содержит файл ~/tmp
  3. слой содержит файл ~/tmp2

Открытьвопросы

  • Какая фактическая связь между слоями?Существует ли json , содержащий всю информацию об изображении, включая отсортированный список слоев?

  • Какой тип результата создается для отправки его в реестр докеров во времявыполнение docker push это tar.gz , аналогично docker save

1 Ответ

0 голосов
/ 11 июня 2018

С моей точки зрения:

  • Каждый слой переносится (инструкция по добавлению / обновлению / удалению файлов только в измененные файлы) в Docker-Registry.
  • Каждый слой знает, что это родительский слой.
  • Поэтому, когда вы опускаете дочерний слой - он вытягивает иерархию родительского слоя до самого верхнего (базового уровня).
  • Каждый слой идентифицируется по идентификаторам (код sha256, а не по имени).
  • Любое изменение в иерархии вызовет другое кодовое имя sha256 для всех дочерних слоев изображения (даже если в этом слое нет изменений).

Не стесняйтесь добавлять или предлагать улучшения.

...