1

用户指南指出应按如下方式运行图像:

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 内核运行?

4

2 回答 2

2

第1部分:

无论您传递什么,docker run -t -i ubuntu都是您的容器将运行的第一个命令。您可以尝试使用 /bin/bash、/bin/sh,甚至可以echo hello看到它的实际效果。Ubuntu 默认使用 bash,但其他容器使用基于其 Dockerfile 的其他命令。

第2部分:

当您运行 hello-world 时,会从 hello-image 创建一个 docker 容器。容器“包括应用程序及其所有依赖项——但与其他容器共享内核,在主机操作系统的用户空间中作为独立进程运行。”。

Hello-world 具体是从头开始创建的https://hub.docker.com/_/scratch/

于 2016-09-09T01:01:45.280 回答
2

为什么我们需要 /bin/bash?

因为虽然ubuntu可以将图像配置为/bin/bash默认运行,但并非所有图像都如此。如果您有一个默认启动网络服务器的图像,并且您想要运行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 时,您在 Linux VMdocker-machine运行容器,该 Linux VM 由(或以前,boot2docker)为此目的而生成。在 Windows Docker 下使用 Hyper V,而在 OS X 上它以前使用 VirtualBox,而在最近的版本中可能使用了其他东西(自从我在 OS X 下运行 Docker 已经有一段时间了)。

于 2016-09-09T01:01:54.807 回答