2016-09-09 5 views
1

user guide утверждает, что изображение должно выполняться следующим образом:Запуск Docker Image

docker run -t -i ubuntu /bin/bash 

Я понимаю, что -t создает псевдо-терминал и -i делает его интерактивным. Но кажется, что часть /bin/bash не нужна. Я запускаю его с /bin/bash или без него, мне предоставляется интерактивная подсказка, которую я могу читать и писать из обоих времен.

[email protected]:/# 

Зачем нам /bin/bash?

Часть 2

Я бегу на Docker для Mac. Когда я загружаю двоичный файл hello-world и запускаю его, это всего лишь 1kb. Очевидно, что образ Linux не был загружен с ним. Является ли маленькая двоичная запись hello-world с моим ядром Mac или с небольшим ядром Linux, которое поставляется с Docker для Mac?

+0

Подробнее о Части 2. В принципе, привет-мир запускается «с нуля». https://hub.docker.com/_/hello-world/ –

+0

@AlbertoRivera Спасибо, но это виртуальная машина Linux, выполняющая ее, или мой Mac ее выполняет? – qarthandso

ответ

2

Зачем нам нужен/bin/bash?

Потому что в то время как ubuntu изображение может быть настроен для запуска /bin/bash по умолчанию, что не собирается быть правдой каждого изображения. Если у вас есть изображение, которое запускает веб-сервер по умолчанию, и вы хотите запустить bash ... вам нужно сделать это явным. Некоторые изображения не указать любую команду по умолчанию, что приводит к:

$ docker run -it alpine 
docker: Error response from daemon: No command specified. 

Это никогда не помешает быть явным при запуске контейнера, особенно с использованием inmage, что вы не строить себя.

Когда я загружаю привет-мира бинарного и запустить его ...

Какой привет-мир бинарный?

но является виртуальной машиной Linux, выполняющей ее, или мой Mac ее выполняет?

Докер работает только под Linux.Когда вы используете Docker под OS X или Windows, вы запускаете контейнеры внутри Linux VM, созданный для этой цели docker-machine (или, ранее, boot2docker). В Windows Docker используется Hyper V, а в OS X он ранее использовал VirtualBox, а в более поздних версиях может использовать что-то еще (прошло некоторое время с тех пор, как я запустил Docker под OS X).

+0

Спасибо. И я должен был указать [статью] (https://docs.docker.com/engine/getstarted/step_one/) для 'hello-world'. Итак, это определенно какой-то Linux VM, который управляет маленьким двоичным 'hello-world'? Кто-то также отметил, что он каким-то образом использует [osxfs] (https://docs.docker.com/docker-for-mac/osxfs/). – qarthandso

+0

'osxfs' - это механизм обмена файлами между вашим хостом OS X и виртуальной машиной, в которой работает докер. Я думаю, что я уже ответил на вопрос: «Это vm?» вопрос, и я не уверен, что еще я могу сказать по этой теме. – larsks

2

Часть 1:

Все, что вы передаете после docker run -t -i ubuntu является первой командой, что ваш контейнер будет работать. Вы можете попробовать использовать/bin/bash,/bin/sh или даже echo hello и увидеть его в действии. Ubuntu использует bash по умолчанию, но в других контейнерах используются другие команды на основе их файлов Docker.

часть 2:

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

Hello-world in specific создан с нуля https://hub.docker.com/_/scratch/.