gpt4 book ai didi

image - 基础 docker 镜像的容器是什么?

转载 作者:行者123 更新时间:2023-12-01 22:40:09 25 4
gpt4 key购买 nike

我正在学习使用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
}]

3f37dbc61890b0bb37cc8479db94602bcc2d6e177d76c0f3d7d53346c0dc580c is the container id of the base image.

什么是基础镜像的容器?我觉得它变成了主机名。主机名实际上是什么?

最佳答案

我不确定你的术语。如果根据定义,基础图像是没有父级的图像,那么示例中的图像就不是基础图像。

但是图像可能没有父图像。例如,scratch 没有父级:

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

$

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

$ 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

$

需要注意的是,虽然这个新镜像与原始镜像具有完全相同的文件,但它没有其他 Docker 功能,如环境、卷、入口点等。

我不一定将其称为“基础”图像。我将其称为“平面”图像。我想说基本镜像是您在 Dockerfile FROM 指令中指定的镜像。用我的术语来说,基础图像不必是平坦的。

关于image - 基础 docker 镜像的容器是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29949861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com