基地docker图像的容器是什么?

我正在学习使用docker。 我知道每个泊坞窗图像都build立在没有父级的基础图像上。

然后从基本的图像,我们可以通过容器(也许是一个非常短的生命容器)定制一些东西来提交一个新的形象。

所以我明白,这个过程就像这样:base image – > container – > new image 1 – > container – > new image 2

但是,我检查基本图像的json数据。 我仍然可以看到它有一个容器的信息:

[{ "Architecture": "amd64", "Author": "", "Comment": "", "Config": { "AttachStderr": false, "AttachStdin": false, "AttachStdout": false, "Cmd": null, "CpuShares": 0, "Cpuset": "", "Domainname": "", "Entrypoint": null, "Env": null, "ExposedPorts": null, "Hostname": "3f37dbc61890", "Image": "", "Labels": null, "MacAddress": "", "Memory": 0, "MemorySwap": 0, "NetworkDisabled": false, "OnBuild": null, "OpenStdin": false, "PortSpecs": null, "StdinOnce": false, "Tty": false, "User": "", "Volumes": null, "WorkingDir": "" }, "Container": "3f37dbc61890b0bb37cc8479db94602bcc2d6e177d76c0f3d7d53346c0dc580c", "ContainerConfig": { "AttachStderr": false, "AttachStdin": false, "AttachStdout": false, "Cmd": [ "/bin/sh", "-c", "#(nop) ADD file:777fad733fc954c0c161670c48c10ea1787a6e5d544daa20e55d593279df3fa3 in /" ], "CpuShares": 0, "Cpuset": "", "Domainname": "", "Entrypoint": null, "Env": null, "ExposedPorts": null, "Hostname": "3f37dbc61890", "Image": "", "Labels": null, "MacAddress": "", "Memory": 0, "MemorySwap": 0, "NetworkDisabled": false, "OnBuild": null, "OpenStdin": false, "PortSpecs": null, "StdinOnce": false, "Tty": false, "User": "", "Volumes": null, "WorkingDir": "" }, "Created": "2015-04-21T22:18:45.67739694Z", "DockerVersion": "1.6.0", "Id": "706766fe101906a1a6628173c2677173a5f8c6c469075083f3cf3a8f5e5eb367", "Os": "linux", "Parent": "", "Size": 188104128, "VirtualSize": 188104128 }] 

3f37dbc61890b0bb37cc8479db94602bcc2d6e177d76c0f3d7d53346c0dc580c是基础映像的容器标识。

什么是基础图像的容器? 我觉得它成为主机名。 什么是主机名呢?

我不确定你的术语。 如果定义的基本图像是没有父图像的图像,则示例中的图像不是基本图像。

但一个图像可能没有父母。 scratch ,例如,没有父母:

 $ docker inspect -f '{{.Container}}' ubuntu a4c15f8c80978475a53f96721f935de5823bc8c29aff14eb00a15f9b9d96cddd $ docker inspect -f '{{.Container}}' scratch $ 

您还可以使用import来创build没有父项的图像:

 $ echo hello world > foo && tar -cf- foo | docker import - 3e8fc0cb69fae0bd3f9711031df6d3b7bf6a7e8c9745657d9261e7b803718c67 $ docker inspect -f '{{.Container}}' 3e8fc0c $ 

不像scratch ,这个图像可能包含文件。 事实上,你可以使用这种技术来压扁复杂的图像。

 $ docker create ubuntu # create container from image 6b90bf145c193ef8e4ecb789372d2fd619769a20d96c8f3f586dcfbc501b0611 $ docker export 6b90bf1 > ubuntu.tar # export container fs to tarball $ docker import - flat_ubuntu < ubuntu.tar 4ef4ffb9514212acf6a19b2eeda8855b8c0445924311043ba5cba6574d40d772 $ docker inspect -f '{{.Container}}' 4ef4ffb $ 

重要的是要注意,虽然这个新的图像具有与原始图像完全相同的文件,但是没有像环境,音量,入口点等其他dockerfunction。

我不一定称之为“基础”形象。 我会称之为“平坦”的形象。 我会说一个基本的图像是你在一个Dockerfile FROM指令中指出的图像。 在我的术语中,基本图像不需要是平坦的。