什么是底座码头图像的容器?

use*_*910 2 containers image docker

我正在学习使用docker.我知道每个docker镜像都是在没有父级的基础图像上构建的.

然后从基本图像中,我们可以通过容器(可能是一个非常短的生命容器)自定义一些东西来提交新图像.

所以我理解过程是这样的:基本图像 - >容器 - >新图像1 - >容器 - >新图像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
}]
Run Code Online (Sandbox Code Playgroud)

3f37dbc61890b0bb37cc8479db94602bcc2d6e177d76c0f3d7d53346c0dc580c是基本映像的容器ID.

什么是基本图像的容器?我觉得它成了主机名.实际上主机名是什么?

koj*_*iro 5

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

但是图像可能没有父母.scratch例如,没有父母:

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

$
Run Code Online (Sandbox Code Playgroud)

您还可以创建没有使用父级的图像import:

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

$
Run Code Online (Sandbox Code Playgroud)

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

$
Run Code Online (Sandbox Code Playgroud)

重要的是要注意,虽然这个新图像与原始图像具有完全相同的文件,但它没有其他泊坞窗功能,如环境,音量,入口点等.

我不一定称之为"基础"形象.我称之为"扁平"形象.我会说基本图像是您在Dockerfile FROM指令中指示的图像.在我的术语中,基本图像不需要是平坦的.