17.06.0-ce версия докера
Я изучаю Докера путем наблюдения видео курса.
Шоу лектора:
sudo docker run -ti ubuntu /bin/bash
Выполненный докер с человечностью изображения. И то, что беспокоит меня, /bin/bash\
. man docker run
шоу это /bin/bash
команда. Это docker run IMAGE [COMMAND]
. Ну, это в порядке. Но каково различие между
sudo docker run -ti ubuntu
и
sudo docker run -ti ubuntu /bin/bash
Для меня нет ни одного. И лектор не сосредотачивает внимание на команде. Он сказал, что мы - просто выполненный докер. Это была его первая команда в курсе. И затем он показывает, что мы были изолированы от хост-машины, мы можем свободно разрушить то, что мы хотим без любого повреждения (как комната-rf / мусорное ведро).
Я проверил:
$ sudo docker run -ti ubuntu
root@aaf7cd26fe18:/# echo $SHELL
/bin/bash
$ sudo docker run -ti ubuntu /bin/bash
root@6b2570958216:/# echo $SHELL
/bin/bash
Ну, для меня я решил бросить это /bin/bash
часть далеко как мусор.
Но так или иначе я решил спросить Вас: возможно, существует некоторое различие между двумя способами выполнить Докера? Если существует, на что это похоже?
Банка изображений докера может указать, что определенная команда должна быть выполнена по умолчанию, с помощью CMD
директива в Dockerfile. И:
Если пользователь указывает аргументы
docker run
затем они переопределят значение по умолчанию, указанное вCMD
.
Как это происходит, команда по умолчанию, указанная для Dockerfile Ubuntu, является, на самом деле, ударом:
CMD ["/bin/bash"]
Так, для конкретного случая изображения Ubuntu, docker run ... ubuntu /bin/bash
не отличается от docker run ... ubuntu
.
Конечно, это не должно всегда быть верно. Dockerfile для механизма базы данных может выполнить команду базы данных по умолчанию. В этом случае при необходимости в интерактивной оболочке необходимо будет сделать docker run ... /bin/bash
.
В целом Вы не можете принять это docker run
даст Вам интерактивную оболочку. Более безопасно указать /bin/bash
если Вам нужна оболочка.
Когда Вы не обеспечиваете команду, которая в Вашем случае является /bin/bash
, при использовании -ti
(i
интерактивный, t
терминал) Вы будете привязаны к программе по умолчанию, которая была определена, чтобы быть выполненной при использовании run
команда в DockerFile
.
Например, если изображение выполняет веб-сервер на переднем плане, что Вы будете присматривать за использованием run
без /bin/bash
журналы того веб-сервера (программа по умолчанию, которая была запущена).
При определении команды Вы говорите, что я не забочусь о том, что продолжается или работает на изображении, дают мне интерактивный терминал путем выполнения этой "команды".
В Ubuntu команда по умолчанию bash
и если Вы не обеспечиваете -ti
контейнер будет остановлен, прямо будучи выполненным. потому что это выполнило удар в неинтерактивном режиме, и после того, как это - конец, контейнеру больше нечего делать.