1. 程式人生 > >docker 映象與容器儲存目錄結構精講

docker 映象與容器儲存目錄結構精講

Docker 映象與容器儲存目錄結構精講

很多朋友在初學 docker 的時候非常迷茫,不清楚 docker 是怎樣的一種儲存方式,並且也不清楚 docker 到底儲存在什麼地方。其實 docker 的映象與容器都儲存在 /var/lib/docker 下面,那麼基於不同的系統又有不同的儲存方式,在 ubuntu 下面儲存方式為 AUFS;在 Centos 下面儲存方式又是 device mapper,下面我們先來看一下 /var/lib/docker 目錄,分別有三個階段,看看在不同階段都新增了那些東西及映象與容器儲存結構的變化:

環境: 
系統:centos 7 
核心:3.10.0-229.el7.x86_64 
docker 版本: 1.8.2

  • start docker 服務之後目錄結構
  • pull images 後目錄結構
  • run container 後目錄結構

啟動docker ,安裝完 docker 後執行命令 systemctl start docker.service:

[[email protected]100 docker]# tree ./
./
├── containers
├── devicemapper
│   ├── devicemapper
│   │   ├── data
│   │   └── metadata
│   └── metadata
│       ├── base
│       ├── deviceset-metadata
│       └── transaction-metadata
├── graph
├── linkgraph.db
├── repositories-devicemapper
├── tmp
├── trust
└── volumes
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

前面我們說過,centos 下面 docker 使用 devicemapper 的儲存方式,所以在 /var/lib/docker 下面出現了 devicemapper 目錄

/var/lib/docker/devicemapper/devicemapper/ 目錄下有兩個檔案: 
/var/lib/docker/devicemapper/devicemapper/data 
/var/lib/docker/devicemapper/devicemapper/metadata 
它們是用來儲存對應的儲存池和相關的元資料。

/var/lib/docker/devicemapper/metadara/ 目錄下有三個檔案: 
/var/lib/docker/devicemapper/metadata/base 
/var/lib/docker/devicemapper/metadata/transaction-metadata 
/var/lib/docker/devicemapper/metadata/deviceset-metadata 
它們則是用來存放前面元資料的id、大小、以及UUID等資訊。

當然,現在也存在幾個空目錄,我們等下來說,例如: 
/var/lib/docker/containers 
/var/lib/docker/devicemapper 
/var/lib/docker/graph 
/var/lib/docker/tmp 
/var/lib/docker/trust 
/var/lib/docker/volumes

還有一個檔案,我們等下來說,先來了解下大致的目錄結構: 
/var/lib/docker/repositories-devicemapper

現在我們 docker pull centos 一個映象下來 docker images 檢視。接著再檢視目錄變化,對比之前的目錄結構及檔案變化:

[[email protected]100 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              latest              ce20c473cd8a        8 weeks ago         172.3 MB
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3
[[email protected]100 docker]# tree ./
./
├── containers
├── devicemapper
│   ├── devicemapper
│   │   ├── data
│   │   └── metadata
│   ├── metadata
│   │   ├── 168a69b6220279e6d5bd8dafd2edf71434a08e32b60a7060f7a705f64857169d
│   │   ├── 4234bfdd88f8ed2bc4607bd2ebba2d41d61e2693ad0d184e7b05e1b57f8b8b33
│   │   ├── 47d44cb6f252ea4f6aecf8a447972de5d9f9f2e2bec549a2f1d8f92557f4d05a
│   │   ├── 812e9d9d677f15c39277b2edc8f9bc07354c899483409bb07d1c13c2b9c33ec8
│   │   ├── base
│   │   ├── ce20c473cd8ac1fab6601529ce6a075743f2cf7a8f4cfed2216f8cfcb53bfc4e
│   │   ├── deviceset-metadata
│   │   └── transaction-metadata
│   └── mnt
│       ├── 168a69b6220279e6d5bd8dafd2edf71434a08e32b60a7060f7a705f64857169d
│       ├── 4234bfdd88f8ed2bc4607bd2ebba2d41d61e2693ad0d184e7b05e1b57f8b8b33
│       ├── 47d44cb6f252ea4f6aecf8a447972de5d9f9f2e2bec549a2f1d8f92557f4d05a
│       ├── 812e9d9d677f15c39277b2edc8f9bc07354c899483409bb07d1c13c2b9c33ec8
│       └── ce20c473cd8ac1fab6601529ce6a075743f2cf7a8f4cfed2216f8cfcb53bfc4e
├── graph
│   ├── 168a69b6220279e6d5bd8dafd2edf71434a08e32b60a7060f7a705f64857169d
│   │   ├── json
│   │   ├── layersize
│   │   └── tar-data.json.gz
│   ├── 4234bfdd88f8ed2bc4607bd2ebba2d41d61e2693ad0d184e7b05e1b57f8b8b33
│   │   ├── json
│   │   ├── layersize
│   │   └── tar-data.json.gz
│   ├── 47d44cb6f252ea4f6aecf8a447972de5d9f9f2e2bec549a2f1d8f92557f4d05a
│   │   ├── json
│   │   ├── layersize
│   │   └── tar-data.json.gz
│   ├── 812e9d9d677f15c39277b2edc8f9bc07354c899483409bb07d1c13c2b9c33ec8
│   │   ├── json
│   │   ├── layersize
│   │   └── tar-data.json.gz
│   ├── ce20c473cd8ac1fab6601529ce6a075743f2cf7a8f4cfed2216f8cfcb53bfc4e
│   │   ├── json
│   │   ├── layersize
│   │   └── tar-data.json.gz
│   └── _tmp
├── linkgraph.db
├── repositories-devicemapper
├── tmp
├── trust
└── volumes

20 directories, 27 files
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

當我 pull 一個映象之後,子目錄中增加了許多檔案,最先看到的變化是在三個資料夾下面: 
/var/lib/docker/devicemapper/medata/ 
/var/lib/docker/devicemapper/mnt/ 
/var/lib/docker/graph/

好,在這之前呢,我們先來看一下 docker 檢視映象中介軟體命令,docker images -a 顯示所有影象(預設隱藏中間影象),我們在下圖中可以清楚的看到,IMAGFE ID 分別為下圖中的內容,也就是說,images centos 被下面四個中介軟體所支援:

centos ce20c473cd8a
<none> 4234bfdd88f8
<none> 812e9d9d677f
<none> 168a69b62202
<none> 47d44cb6f252
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5
[[email protected] metadata]# docker images -a
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              latest              ce20c473cd8a        8 weeks ago         172.3 MB
<none>              <none>              4234bfdd88f8        8 weeks ago         172.3 MB
<none>              <none>              812e9d9d677f        8 weeks ago         172.3 MB
<none>              <none>              168a69b62202        8 weeks ago         172.3 MB
<none>              <none>              47d44cb6f252        3 months ago        0 B
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

我們檢視下 /var/lib/docker/devicemapper/metadata 目錄下的內容

[root@docker-100 metadata]# cat base 
{"device_id":1,"size":107374182400,"transaction_id":3,"initialized":true}

[root@docker-100 metadata]# cat 47d44cb6f252ea4f6aecf8a447972de5d9f9f2e2bec549a2f1d8f92557f4d05a 
{"device_id":2,"size":107374182400,"transaction_id":4,"initialized":false}

[root@docker-100 metadata]# cat 168a69b6220279e6d5bd8dafd2edf71434a08e32b60a7060f7a705f64857169d 
{"device_id":3,"size":107374182400,"transaction_id":5,"initialized":false}

[root@docker-100 metadata]# cat 812e9d9d677f15c39277b2edc8f9bc07354c899483409bb07d1c13c2b9c33ec8 
{"device_id":4,"size":107374182400,"transaction_id":6,"initialized":false}

[root@docker-100 metadata]# cat 4234bfdd88f8ed2bc4607bd2ebba2d41d61e2693ad0d184e7b05e1b57f8b8b33 
{"device_id":5,"size":107374182400,"transaction_id":7,"initialized":false}

[root@docker-100 metadata]# cat ce20c473cd8ac1fab6601529ce6a075743f2cf7a8f4cfed2216f8cfcb53bfc4e 
{"device_id":6,"size":107374182400,"transaction_id":8,"initialized":false}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

可以清楚的看到,device_id (1、2、3、4、5、6)排序,也就是說,出了base這個檔案以外,其他都是我們剛才新增的中介軟體,那麼可以得出: 
/var/lib/devicemapper/metadata 目錄下的檔案(除了base、 deviceset- metadata、transaction-medatata),其餘的檔案都是 images 本身和 images 的中介軟體資訊;用來描述它們的id、大小、transaction_id、以及是否initialized,並且它們大小都是一樣的。

變化的另一個目錄是 /var/lib/docker/devicemapper 下的: 
/var/lib/docker/devicemapper/mnt 
它主要是用來掛載 images 和 Container 的目錄,因為 devicemapper 本身就是通過在儲存池中掛載的方式進行執行的。

最後一個目錄則是 /var/lib/docker 下的: 
/var/lib/docker/graph

我們來檢視下 /var/lib/docker/graph 目錄下到底有什麼鬼?:

[[email protected]100 graph]# tree /var/lib/docker/graph/
/var/lib/docker/graph/
├── 168a69b6220279e6d5bd8dafd2edf71434a08e32b60a7060f7a705f64857169d
│   ├── json
│   ├── layersize
│   └── tar-data.json.gz
├── 4234bfdd88f8ed2bc4607bd2ebba2d41d61e2693ad0d184e7b05e1b57f8b8b33
│   ├── json
│   ├── layersize
│   └── tar-data.json.gz
├── 47d44cb6f252ea4f6aecf8a447972de5d9f9f2e2bec549a2f1d8f92557f4d05a
│   ├── json
│   ├── layersize
│   └── tar-data.json.gz
├── 812e9d9d677f15c39277b2edc8f9bc07354c899483409bb07d1c13c2b9c33ec8
│   ├── json
│   ├── layersize
│   └── tar-data.json.gz
├── ce20c473cd8ac1fab6601529ce6a075743f2cf7a8f4cfed2216f8cfcb53bfc4e
│   ├── json
│   ├── layersize
│   └── tar-data.json.gz
└── _tmp
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

原來是在每個images 本身及中介軟體下面多了三個檔案,分別為(json、layersize、tar-data.json.gz),那我們來分別檢視下這三個檔案是幹嘛的!

1、json (json 檔案是用來描述 images 本身或者中介軟體的詳細資訊)

[root@docker-100 graph]# cat /var/lib/docker/graph/168a69b6220279e6d5bd8dafd2edf71434a08e32b60a7060f7a705f64857169d/json  | python -mjson.tool
{
    "Size": 172284372,
    "architecture": "amd64",
    "author": "The CentOS Project <[email protected]>",
    "config": {
        "AttachStderr": false,
        "AttachStdin": false,
        "AttachStdout": false,
        "Cmd": null,
        "Domainname": "",
        "Entrypoint": null,
        "Env": null,
        "ExposedPorts": null,
        "Hostname": "7aa5783a47d5",
        "Image": "47d44cb6f252ea4f6aecf8a447972de5d9f9f2e2bec549a2f1d8f92557f4d05a",
        "Labels": null,
        "MacAddress": "",
        "NetworkDisabled": false,
        "OnBuild": null,
        "OpenStdin": false,
        "PublishService": "",
        "StdinOnce": false,
        "Tty": false,
        "User": "",
        "VolumeDriver": "",
        "Volumes": null,
        "WorkingDir": ""
    },
    "container": "7aa5783a47d56a1dd5b9f60dfa3dcc7ad83479f380137272e7493aa2e317d1cc",
    "container_config": {
        "AttachStderr": false,
        "AttachStdin": false,
        "AttachStdout": false,
        "Cmd": [
            "/bin/sh",
            "-c",
            "#(nop) ADD file:125fe45519717bec39f64a67dfc5cd0ac1c8733963d71510ba770817d9466fcb in /"
        ],
        "Domainname": "",
        "Entrypoint": null,
        "Env": null,
        "ExposedPorts": null,
        "Hostname": "7aa5783a47d5",
        "Image": "47d44cb6f252ea4f6aecf8a447972de5d9f9f2e2bec549a2f1d8f92557f4d05a",
        "Labels": null,
        "MacAddress": "",
        "NetworkDisabled": false,
        "OnBuild": null,
        "OpenStdin": false,
        "PublishService": "",
        "StdinOnce": false,
        "Tty": false,
        "User": "",
        "VolumeDriver": "",
        "Volumes": null,
        "WorkingDir": ""
    },
    "created": "2015-10-13T23:29:00.133774303Z",
    "docker_version": "1.8.2",
    "id": "168a69b6220279e6d5bd8dafd2edf71434a08e32b60a7060f7a705f64857169d",
    "os": "linux",
    "parent": "47d44cb6f252ea4f6aecf8a447972de5d9f9f2e2bec549a2f1d8f92557f4d05a"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

2、layersize (layersize 可以在字面意思就知道是用來表示中介軟體的大小)

[root@docker-100 graph]# cat /var/lib/docker/graph/168a69b6220279e6d5bd8dafd2edf71434a08e32b60a7060f7a705f64857169d/layersize 
172284372
  • 1
  • 2
  • 1
  • 2

3、tar-data.json.gz (tar-data.json: ASCII text, with very long lines,長文字格式,應該是用來描述依賴或者其他資訊),解包檢視發現很多亂碼;但是可以檢視,具體是做什麼的目前還不清楚。 
gunzip tar-data.json.gz

下面我們來看一下另一個檔案 repositories-devicemapper,也其實就是記錄 images本身(不是中介軟體)資訊的檔案;換句話說,它記錄了映象名稱、映象 tag(預設為 latest)、映象ID等資訊。

cat /var/lib/docker/repositories-devicemapper

{"Repositories":{"centos":{"latest":"ce20c473cd8ac1fab6601529ce6a075743f2cf7a8f4cfed2216f8cfcb53bfc4e"}},"ConfirmDefPush":true}
  • 1
  • 1

好,有變化的目錄我們都檢視完了,也發現其中變化的資訊,那這時候還有一些目錄是未曾變 
化的,分別為:

/var/lib/docker/container
/var/lib/docker/tmp
/var/lib/docker/trust
/var/lib/docker/volumes
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

那,這時候我們把 centos images 跑起來,run container 後看看目錄結構會發生什麼變化:

docker run -d -it –name centos centos 來執行 centos images

[[email protected]100 docker]# tree /var/lib/docker/
/var/lib/docker/
├── containers
│   └── c2adc691ad19428e44d655d9daa8573cd71b162e05faaaa824010929089bc052
│       ├── c2adc691ad19428e44d655d9daa8573cd71b162e05faaaa824010929089bc052-json.log
│       ├── config.json
│       ├── hostconfig.json
│       ├── hostname
│       ├── hosts
│       ├── resolv.conf
│       ├── resolv.conf.hash
│       └── secrets
├── devicemapper
│   ├── devicemapper
│   │   ├── data
│   │   └── metadata
│   ├── metadata
│   │   ├── 168a69b6220279e6d5bd8dafd2edf71434a08e32b60a7060f7a705f64857169d
│   │   ├── 4234bfdd88f8ed2bc4607bd2ebba2d41d61e2693ad0d184e7b05e1b57f8b8b33
│   │   ├── 47d44cb6f252ea4f6aecf8a447972de5d9f9f2e2bec549a2f1d8f92557f4d05a
│   │   ├── 812e9d9d677f15c39277b2edc8f9bc07354c899483409bb07d1c13c2b9c33ec8
│   │   ├── base
│   │   ├── c2adc691ad19428e44d655d9daa8573cd71b162e05faaaa824010929089bc052
│   │   ├── c2adc691ad19428e44d655d9daa8573cd71b162e05faaaa824010929089bc052-init
│   │   ├── ce20c473cd8ac1fab6601529ce6a075743f2cf7a8f4cfed2216f8cfcb53bfc4e
│   │   ├── deviceset-metadata
│   │   └── transaction-metadata
│   └── mnt
│       ├── 168a69b6220279e6d5bd8dafd2edf71434a08e32b60a7060f7a705f64857169d
│       ├── 4234bfdd88f8ed2bc4607bd2ebba2d41d61e2693ad0d184e7b05e1b57f8b8b33
│       ├── 47d44cb6f252ea4f6aecf8a447972de5d9f9f2e2bec549a2f1d8f92557f4d05a
│       ├── 812e9d9d677f15c39277b2edc8f9bc07354c899483409bb07d1c13c2b9c33ec8
│       ├── c2adc691ad19428e44d655d9daa8573cd71b162e05faaaa824010929089bc052
│       ├── c2adc691ad19428e44d655d9daa8573cd71b162e05faaaa824010929089bc052-init
│       └── ce20c473cd8ac1fab6601529ce6a075743f2cf7a8f4cfed2216f8cfcb53bfc4e
├── graph
│   ├── 168a69b6220279e6d5bd8dafd2edf71434a08e32b60a7060f7a705f64857169d
│   │   ├── json
│   │   ├── layersize
│   │   ├── tar-data.json
│   │   └── tar-data.json.gz.bak
│   ├── 4234bfdd88f8ed2bc4607bd2ebba2d41d61e2693ad0d184e7b05e1b57f8b8b33
│   │   ├── json
│   │   ├── layersize
│   │   └── tar-data.json.gz
│   ├── 47d44cb6f252ea4f6aecf8a447972de5d9f9f2e2bec549a2f1d8f92557f4d05a
│   │   ├── json
│   │   ├── layersize
│   │   └── tar-data.json.gz
│   ├── 812e9d9d677f15c39277b2edc8f9bc07354c899483409bb07d1c13c2b9c33ec8
│   │   ├── json
│   │   ├── layersize
│   │   └── tar-data.json.gz
│   ├── ce20c473cd8ac1fab6601529ce6a075743f2cf7a8f4cfed2216f8cfcb53bfc4e
│   │   ├── json
│   │   ├── layersize
│   │   └── tar-data.json.gz
│   └── _tmp
├── linkgraph.db
├── repositories-devicemapper
├── tmp
├── trust
└── volumes

24 directories, 37 files
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66

跟前面對比,有變化的其實是三個檔案:

/var/lib/docker/devicemapper/medata 
/var/lib/docker/devicemapper/mnt 
/var/lib/docker/container

我們先來看 /var/lib/docker/devicemapper/medata/下的檔案

[[email protected]100 containers]# tree /var/lib/docker/devicemapper/metadata/
/var/lib/docker/devicemapper/metadata/
├── 168a69b6220279e6d5bd8dafd2edf71434a08e32b60a7060f7a705f64857169d
├── 4234bfdd88f8ed2bc4607bd2ebba2d41d61e2693ad0d184e7b05e1b57f8b8b33
├── 47d44cb6f252ea4f6aecf8a447972de5d9f9f2e2bec549a2f1d8f92557f4d05a
├── 812e9d9d677f15c39277b2edc8f9bc07354c899483409bb07d1c13c2b9c33ec8
├── base
├── c2adc691ad19428e44d655d9daa8573cd71b162e05faaaa824010929089bc052
├── c2adc691ad19428e44d655d9daa8573cd71b162e05faaaa824010929089bc052-init
├── ce20c473cd8ac1fab6601529ce6a075743f2cf7a8f4cfed2216f8cfcb53bfc4e
├── deviceset-metadata
└── transaction-metadata

0 directories, 10 files
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

與之前 docker pull images (還未執行容器)時,多了兩個檔案,那下面兩個檔案是幹嘛的呢,當Docker執行一個從映象建立的容器,它會在映象頂部新增一個可讀寫的層,應用程式可以在這裡執行,所以這時候會有這兩個檔案也不足為奇了,下面來看看新增的兩個檔案與之前的資訊有何不同(該目錄下的檔案為 images 的描述資訊)

├── c2adc691ad19428e44d655d9daa8573cd71b162e05faaaa824010929089bc052
├── c2adc691ad19428e44d655d9daa8573cd71b162e05faaaa824010929089bc052-init
  • 1
  • 2
  • 1
  • 2

一個一個來檢視 base 、以及後面的 5 箇中間件(包括 images 本身)還有新增的兩個檔案,發現前面五個檔案沒變,後面兩個(c2adc… 和 c2adc…-init)描述了本身的一些資訊。

[root@docker-100 metadata]# cat base 
{"device_id":1,"size":107374182400,"transaction_id":3,"initialized":true}

[root@docker-100 metadata]# cat 47d44cb6f252ea4f6aecf8a447972de5d9f9f2e2bec549a2f1d8f92557f4d05a 
{"device_id":2,"size":107374182400,"transaction_id":4,"initialized":false}

[root@docker-100 metadata]# cat 168a69b6220279e6d5bd8dafd2edf71434a08e32b60a7060f7a705f64857169d 
{"device_id":3,"size":107374182400,"transaction_id":5,"initialized":false}

[root@docker-100 metadata]# cat 4234bfdd88f8ed2bc4607bd2ebba2d41d61e2693ad0d184e7b05e1b57f8b8b33 
{"device_id":5,"size":107374182400,"transaction_id":7,"initialized":false}

[root@docker-100 metadata]# cat 812e9d9d677f15c39277b2edc8f9bc07354c899483409bb07d1c13c2b9c33ec8 
{"device_id":4,"size":107374182400,"transaction_id":6,"initialized":false}

[root@docker-100 metadata]# cat ce20c473cd8ac1fab6601529ce6a075743f2cf7a8f4cfed2216f8cfcb53bfc4e 
{"device_id":6,"size":107374182400,"transaction_id":8,"initialized":false}

[root@docker-
            
           

相關推薦

docker 映象容器儲存目錄結構

Docker 映象與容器儲存目錄結構精講 很多朋友在初學 docker 的時候非常迷茫,不清楚 docker 是怎樣的一種儲存方式,並且也不清楚 docker 到底儲存在什麼地方。其實 docker 的映象與容器都儲存在 /var/lib/docker 下面,那麼基於不

Docker映象容器命令

         Docker是一個開源的引擎,可以輕鬆的為任何應用建立一個輕量級的、可移植的、自給自足的容器。開發者在筆記本上編譯測試通過的容器可以批量地在生產環境中部署,包括VMs(虛擬機器)、bare metal、OpenStack 叢集和其他的基礎應用平臺。 Dock

Docker(一):理解Docker映象容器

一、映象的概念   1、廣泛映象概念:     映象是一種檔案儲存形式,是冗餘的一種型別,一個磁碟上的資料在另一個磁碟上存在完全相同的副本即為映象。   2、Docker映象概念:     在Docker中映象同樣是一種完全相同的副本,以廣泛的映象來理解就很簡單了,Docker雖然在Linux系統中,但是內部

修改Docker本地映象容器儲存位置的方法

軟連結 預設 Docker 的存放位置為:/var/lib/docker 命令檢視具體位置 docker info | grep "Docker Root Dir" 最簡單方法是掛載分割槽到這個目錄,因資料盤內有資料,採用修改映象和容器的存放路徑的方式達到目的。通過軟連線來實現。 停掉Do

Docker配置本地映象容器儲存位置

使用find命令找到大於指定大小的檔案: find / -type f -size +10G 排除某個目錄 find / -path "/media/xww" -type f -size +10G 修改Docker本地映象與容器的儲存位置的

兩個修改Docker本地映象容器儲存位置的方法

1、軟連線方式 檢視docker資訊 預設情況下Docker的存放位置為:/var/lib/docker 可以通過下面命令檢視具體位置: sudo docker info | grep "Docker Root Dir" 解決這個問題,最直接的方法當然是掛載分割槽到這個目錄

Docker安裝容器映象操作

1. 在Ubuntu中使用原始碼安裝Docker:進入到原始碼資料夾中 sudo apt-key add gpg sudo dpkg -i docker-ce_17.03.2~ce-0~ubuntu-xenial_amd64.deb 檢查Docker CE是否安裝正確 sudo

docker之進入啟動容器檢視目錄結構

[[email protected] docker]# docker container ls -a CONTAINER ID IMAGE COMMA

docker之安裝使用和映象容器

一.安裝下載 下載:epel-release-6-8.noarch.rpm 安裝:rpm -Uvh epel-release-6-8.noarch.rpm yum install docker-io 啟動:/etc/init.d/docker start 搜尋映象:docker

理解docker映象容器儲存驅動

理解docker映象,容器和儲存驅動 2016年9月5日 14:40 一. 映象 映象作為docker中最基本的概念,有以下幾個特性: 分層,每個映象都由一個或多個映象層組成可通過在某個映象加上一定的映象層得到新映象(此過程可通過編寫dockerfile或在容器中com

用tar打包時忽略檔案的目錄結構儲存目錄結構

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

docker學習二】CentOS7.5+Docker 映象容器)的使用

      承接上篇:https://mp.csdn.net/postedit/82744127       上文介紹了容器與映象的基本操作,這裡總結下容器的使用。 先在官網找到一個映象: https://hub.docker.

Docker主機容器互相拷貝檔案記錄

從容器拷貝檔案到主機上 命令: docker cp <containerId>:<Path>容器內檔案目錄 <localPath>本地目錄 拷貝檔案 root$

docker映象容器資料持久化

1.為什麼持久化      在我們部署環境中,會利用Mysql來儲存資料,而假如我們不小心刪除了Mysql所處的container,那麼我們之前所儲存的資料將會丟失,所以說資料的持久化對我們來說是至關重要的. 持久化的方法:                    

如何實現Docker映象容器例項的備份遷移

題記 大家在使用Docker都會從容器倉庫下載映象,不過這個過程可能依據網路頻寬而定,那麼如果將一個已經下載好的映象遷移到另外一個環境中,或者說如何實現Docker容器的備份恢復,或者遷移,接下來我們

Docker 映象容器、倉庫的概念及基本操作

Docker 映象、容器、倉庫的概念 Docker映象 Docker映象(Image)類似於虛擬機器的映象,可以將他理解為一個面向Docker引擎的只讀模板,包含了檔案系統。 例如:一個映象可以完全包含了Ubuntu作業系統環境,可以把它稱作一個Ubu

Docker映象容器的理解和使用方法

零、應用背景 先看下面2個問題: 1. 單機多系統。如:windows上跑linux、VPS服務、PaSS服務。 windows上跑linux,一般用VM技術實現。 VPS提供商需要將一臺機器劃分成多

docker映象容器以及命令操作

docker imagedocker image是一個極度精簡版的Linux程式執行環境,官網的java映象包括的東西更少,除非是映象疊加方式的如centos+java7docker image是需要定製化build的一個安裝包,包括基礎映象+應用的二進位制部署包docker

修改docker映象容器存放位置。

預設情況下docker的存放位置為: /var/lib/docker 一般根下分割槽我們不會給太大。映象和容器越存越多一般我們有兩種解決方法 1、掛載大分割槽到/var/lib/docker: 一般選擇建立邏輯分割槽lvm,方便後期擴充套件集體。     a.建立新分割槽

Docker映象容器操作

Docker映象、容器操作 2018-8-20 映象操作 檢視映象 docker images 儲存映象 docker save myimage -o /home/zzz/docker/myimage.tar