运行Docker镜像

时间:2016-09-09 00:47:13

标签: linux bash docker docker-for-mac

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 个答案:

答案 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已经有一段时间了。)