В Docker 'From Scratch', который будет работать - PullRequest
0 голосов
/ 29 ноября 2018

В примере с приветственным миром Docker, базовый образ - это Scratch, поэтому, где будут выполняться команды, если я не упомяну ни одну ОС в базовом образе.Будет ли он выполняться в операционной системе хоста (моя ОС Mac), или он будет выполняться в программном обеспечении докера, или будет внутренне создавать любую ОС

Если она выполняется в операционной системе хоста, то я напишу команды Mac (моя ОС хоста Mac), теперь, если я передам это изображение кому-то из его окон, оно запускается?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Термин «операционная система» несколько перегружен.

Контейнеры Docker всегда работают на ядре Linux (за исключением случая с собственными контейнерами Windows).В системе, отличной от Linux (, например, , Mac), есть виртуальная машина Linux, и контейнеры всегда работают на этой виртуальной машине.Все контейнеры совместно используют этот «хост» или ядро ​​виртуальной машины (и по умолчанию запрещено вносить изменения, которые могут повлиять на всю систему).

«Операционная система» также может подразумевать стек библиотек, утилит и программ, которыезапустить поверх ядра.Docker позволяет вам запускать пользовательское пространство Ubuntu, пользовательское пространство Alpine или другое пользовательское пространство ... или вообще никакого пользовательского пространства.Между ними могут быть незначительные несовместимости (если вы используете несколько специфических вещей в GNU libc; если вы считаете, /bin/sh всегда GNU bash; ...).

Обычно вы не хотите FROM scratch.Вы получаете ничего , за исключением пары бит, таких как /proc и /dev, которые Docker предоставляет для вас.Вы не получите, например, оболочку.Это наиболее полезно, если у вас есть статически связанный бинарный файл Linux и по какой-либо причине вы хотите обернуть его в контейнер (ваше приложение обычно должно быть написано на C, C ++ или Go, и вам нужно предпринять специальные шаги для его статической компоновки).

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

0 голосов
/ 29 ноября 2018

Образ scretch используется в качестве «контейнера» двоичного исполняемого файла.В примере hello-world

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

hello - исполняемый файл, созданный с помощью gcc.

Так что, если вы намереваетесь использовать scretch, вам придется скомпилировать код,архитектура зависит от того, где вы хотите его запустить.Например, на современном ПК это будет amd64, на респриберри пи это будет arm *.

Цитата: https://docs.docker.com/develop/develop-images/baseimages/#create-a-simple-parent-image-using-scratch

Примечание: потому что Docker для Mac иDocker для Windows использует виртуальную машину Linux, вам нужен двоичный файл Linux, а не двоичный файл Mac или Windows.

Возвращаясь к вашему вопросу, для окна Mac и Linux Docker выполнит двоичный файл, как в linux.Вы не можете использовать команды mac с scratch, потому что это должен быть исполняемый файл внутри.

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