运行 Docker 图片

Running Docker Image

user guide 声明图像应 运行 如下:

docker run -t -i ubuntu /bin/bash

我知道 -t 创建了伪终端,-i 使其具有交互性。但似乎 /bin/bash 部分是不必要的。无论我 运行 使用还是不使用 /bin/bash,我都会得到一个交互式提示,我可以从这两个时间读取和写入。

root@77eeb1f4ac2a:/# 

为什么我们需要 /bin/bash

第 2 部分

我 运行 正在 Docker 参加 Mac。当我下载 hello-world 二进制文件和 运行 它时,它只有 1kb。显然 Linux 图像没有随它一起下载。小 hello-world 二进制文件 运行 是从我的 Mac 内核中删除还是从 Docker 为 Mac 附带的小 Linux 内核中删除?

第 1 部分:

无论您在 docker run -t -i ubuntu 之后传递什么,都是您的容器将 运行 执行的第一个命令。您可以尝试使用 /bin/bash、/bin/sh 甚至 echo hello 并查看实际效果。 Ubuntu 默认使用 bash,但其他容器根据其 Dockerfiles 使用其他命令。

第 2 部分:

当您 运行 hello-world 时,会从 hello-image 创建一个 docker 容器。容器 "include the application and all of its dependencies --but share the kernel with other containers, running as isolated processes in user space on the host operating system.".

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

Why do we need /bin/bash?

因为虽然 ubuntu 图像可能默认配置为 运行 /bin/bash,但并非所有图像都如此。如果您有一个默认启动网络服务器的图像,并且您想要 运行 bash...您需要明确说明。有些图像没有指定任何默认命令,导致:

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

在启动容器时,明确说明永远不会有坏处,尤其是使用不是您自己构建的镜像。

When I download the hello-world binary and run it...

哪个 hello-world 二进制文件?

but is a VM of Linux executing it or is my mac executing it?

Docker 仅 运行 低于 Linux。当您在 OS X 或 Windows 下使用 Docker 时,您是 运行ning 容器 inside a Linux VM docker-machine(或之前的 boot2docker)为此目的而产生。在 Windows Docker 下使用 Hyper V,在 OS X 上它以前使用 VirtualBox 并且在更新的版本中可能使用其他东西(自从我 运行 Docker 下 OS X).