user guide表示图像应按如下方式运行:
docker run -t -i ubuntu /bin/bash
我得到-t
创建伪终端,-i
使其成为交互式。但似乎/bin/bash
部分是不必要的。无论我是否使用/bin/bash
运行它,我都会给出一个交互式提示,我可以从这两个时间读取和写入。
root@77eeb1f4ac2a:/#
为什么我们需要/bin/bash
?
第2部分
我在Docker for Mac上运行。当我下载hello-world
二进制文件并运行它时,它只有1kb
。显然Linux图像没有随之下载。小hello-world
二进制文件是从我的Mac内核运行还是从Docker for Mac附带的小型Linux内核运行?
答案 0 :(得分:2)
第1部分:
在docker run -t -i ubuntu
之后传递的是您的容器将运行的第一个命令。您可以尝试使用/ bin / bash,/ bin / sh甚至echo hello
并查看它的实际效果。 Ubuntu默认使用bash,但其他容器使用基于Dockerfiles的其他命令。
第2部分:
当你运行hello-world时,会从hello-image创建一个docker容器。容器“包括应用程序及其所有依赖项 - 但与其他容器共享内核,在主机操作系统的用户空间中作为独立进程运行。”。
具体的Hello-world是从头开始创建的https://hub.docker.com/_/scratch/。
答案 1 :(得分:2)
为什么我们需要/ bin / bash?
因为虽然ubuntu
图像可以配置为默认运行/bin/bash
,但对于每个图像都不会这样。如果您的图像默认启动Web服务器,并且您想运行bash
...则需要明确说明。某些图像未指定任何默认命令,导致:
$ docker run -it alpine
docker: Error response from daemon: No command specified.
启动容器时要明确一点,尤其是使用你自己没有构建的图像,这绝不会让人痛苦。
当我下载hello-world二进制文件并运行它时......
哪个hello-world二进制文件?
但是是执行它的Linux的VM还是我的mac执行它?
Docker只能在Linux下运行。当您在OS X或Windows下使用Docker时,您正在内部内部运行容器由docker-machine
(或之前的boot2docker
)为此目的而生成的Linux VM。在Windows Docker下使用Hyper V,在OS X上它以前使用的是VirtualBox,在更新版本中可能正在使用其他东西(因为我在OS X下运行Docker已经有一段时间了。)