【问题标题】:Running Docker Image运行 Docker 镜像
【发布时间】:2016-09-09 00:47:12
【问题描述】:

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

【问题讨论】:

  • 这里是关于第 2 部分的更多信息。基本上,hello-world 是“从头开始”运行的。 hub.docker.com/_/hello-world
  • @AlbertoRivera 谢谢,但是是 Linux 的 VM 执行它还是我的 mac 执行它?

标签: linux bash docker docker-for-mac


【解决方案1】:

为什么我们需要 /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 时,您正在运行容器docker-machine(或者,以前的boot2docker)为此目的生成的 Linux VM。在 Windows Docker 下使用 Hyper V,在 OS X 上它以前使用 VirtualBox,在最近的版本中可能使用其他东西(我已经有一段时间没有在 OS X 下运行 Docker)。

【讨论】:

  • 谢谢。我应该为hello-world 指定article。所以它肯定是某种运行小型hello-world 二进制文件的Linux VM?也有人指出它以某种方式使用osxfs
  • osxfs 是一种在 OS X 主机和运行 docker 的虚拟机之间共享文件的机制。我想我已经回答了“它是虚拟机吗?”问题,我不确定我还能说什么。
【解决方案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/

【讨论】:

    猜你喜欢
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多