簡體   English   中英

基本Docker映像的容器是什么?

[英]What's the container of a base docker image?

我正在學習使用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是基礎映像的容器ID。

什么是基本映像的容器? 我覺得它成為了主機名。 主機名實際上是什么?

我不確定您的用語。 如果根據定義,基本圖像是沒有父圖像的圖像,則示例中的圖像不是基本圖像。

但是圖像可能沒有父級。 例如, scratch沒有父項:

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

$

您還可以使用import創建沒有父級的圖像:

$ 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指令中指示的映像。 用我的術語來說,基本圖像不必是平坦的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM