Как я могу создать образ докера из ничего? - PullRequest
0 голосов
/ 28 сентября 2018

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

Я до сих пор не знаю, откуда появилось первое изображение докера?
Другими словами, чтоесли мне понадобится червеобразный образ, скажем, Ubuntu, который сильно отличается от официального изображения?

Обновление на 20180928:
На основании настоящего ответа и комментария создается впечатление, что scratch является очень оригинальным изображением.Каждое изображение строилось из него.Итак, вот вопрос: что такое царапина?Ребята, не могли бы вы объяснить это простыми словами?

Обновление на 20180929:
Согласно информации, указанной в комментариях, действительно, построенное изображение (скажем, light / hello: latest) FROM scratch не имеет дополнительных файлов, ночто добавили.После запуска контейнера из light / hello: latest появятся другие файлы и каталоги, кроме файлов, которые мы добавили.

И теперь я знаю, поскольку каждый контейнер должен иметь корневую файловую систему для выполнения, эти дополнительные файлы и каталоги создаются реализацией среды выполнения контейнера (runC / libcontainer) на основе спецификации runC libcontainer v1, которая следует за OCIспецификация времени выполнения.

Теперь вернемся к моему замешательству: что за царапина?Это какой-то трюк, зарезервированный Docker?Так же, как проект Java, всегда начинающийся с основной функции: public static void main(String[] args)?

Обновление 20181008:
Теперь я думаю, что самый первый способ, который я должен выяснить, это то, что докеризображение на самом деле.И как это можно сделать?Если возможно и необходимо, вы можете разместить здесь некоторый исходный код.Пожалуйста, покажи мне свет.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Вместо того, чтобы быть FROM сервером или базой дистрибутивных образов, Dockerfile может объявить себя FROM scratch.«Скретч» - это специальное имя изображения, которое не содержит абсолютно ничего - ни файлов, ни каталогов, я думаю, что оно даже не имеет слоев изображения.

Самое распространенное использование FROM scratch - это создание очень маленького изображения вокруг статически скомпилированный двоичный файл (чаще всего в Go, также возможен в C / C ++, невозможен в таких языках, как Java или Python, для которых требуется интерпретатор).Это может выглядеть так:

FROM scratch
COPY app /
ENTRYPOINT ["/app"]

Если бы вы как-то посмотрели на изображение, вы бы увидели только один файл /app плюс пару введенных системных битов (я думаю, вы всегда получаете /devи /proc, например).Это сложно, потому что нет оболочки, которую вы можете запустить (нет директории /bin, если вы не создаете ее явно).

Другое место, где появляется "царапина", - это базовые образы, такие как этот debian:стабильный Dockerfile :

FROM scratch
ADD rootfs.tar.xz /
CMD ["bash"]

Опять же, начиная с абсолютно ничего, распакуйте tar-файл установки Debian и используйте его в качестве отправной точки для дальнейших действий.

0 голосов
/ 28 сентября 2018

A базовое изображение либо не имеет строки FROM в своем Dockerfile, либо имеет FROM нуля.

A родительское изображение - это изображениечто ваш образ основан на.Это относится к содержанию директивы FROM в Dockerfile.

Создание простого родительского изображения с использованием нуля

Вы можете использоватьЗарезервированное, минимальное изображение Docker в качестве отправной точки для построения контейнеров.Используя «образ» с нуля, он сообщает процессу сборки, что следующая команда в Dockerfile должна быть первым слоем файловой системы в вашем образе.

Пока в хранилище Docker на концентраторе появляется царапина, вы не можетепотяните его, запустите или пометьте любое изображение с именем «царапина».Вместо этого вы можете сослаться на него в своем Dockerfile.Например, чтобы создать минимальный контейнер с использованием нуля:

FROM scratch
ADD hello /
CMD ["/hello"]

Предполагается, что вы создали исполняемый пример "hello", следуя инструкциям в https://github.com/docker-library/hello-world/, и скомпилировали егос флагом -static вы можете создать этот образ Docker с помощью этой команды сборки Docker:

docker build --tag hello .

FROM scratch явно пустое изображение, особенно для построения изображений«С нуля»

Это изображение наиболее полезно в контексте создания базовых образов (таких как debian и busybox) или супер минимальных образов (которые содержат только один двоичный файл и все, что ему требуется), например, hello-world).

Скретч не добавляет слой к вашему изображению докера.но почему поцарапать?это из-за

Корневая файловая система должна быть предоставлена ​​контейнеру для выполнения.Контейнер будет использовать эту корневую файловую систему (rootfs) для блокировки и порождения процессов внутри, где двоичные файлы и системные библиотеки являются локальными для этого каталога.Все исполняемые файлы должны быть включены в этот rootfs.

develop-images baseimages

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