Docker#4 - 資料卷

前言

容器內部檔案是隔離的特性,如果要與外部的程式溝通,要用網路通訊以及檔案存取方式處理,如何做到內部與容器之間的資料管理,有分資料卷 (Data Volumes) 以及資料卷容器 (Data Volume Containers)

資料卷 (Data Volumes)

簡單來說就是從外界掛載在容器中的檔案或目錄,由於是掛載的,所以不會因為容器被刪除之後而有受到影響。

資料卷的使用類似 linux 對目錄或文件的 mount

列出資料卷

可以列出主機上的資料卷,這也包含未被使用的資料卷以及正在使用的資料卷

1
$ docker volume list

建立資料卷

1
$ docker volume create testvol

可以輸入以下指令查看指定的資料卷資訊

1
2
3
4
5
6
7
8
9
10
11
12
13
$ docker volume inspect testvol

[
{
"CreatedAt": "2020-01-26T15:10:25Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/testvol/_data",
"Name": "testvol",
"Options": {},
"Scope": "local"
}
]

啟動一個掛載資料卷的容器

一個 docker run 可以掛載多個容器

1
$ docker run -d -P --name webapp --mount source=testvol,target=/webapp maruko/nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ docker inspect webapp

# 可以從 webapp 容器資訊內的 Mounts 的 key 值看到已經有 mount 一組 testvol 資料卷

"Mounts": [
{
"Type": "volume",
"Name": "testvol",
"Source": "/var/lib/docker/volumes/testvol/_data",
"Destination": "/webapp",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
],

刪除資料卷

使用 rm 指令要特別小心,可以加上 -v 參數一起刪除使用的資料卷

1
$ docker volume rm -v testvol

或者使用 volume id 方式,這組的 ID 必須使用 64 位元,無法使用簡寫輸入

1
$ docker volume rm e4f09874fe24bed49af733a74237487a43bdace89cc138291b9e34e754d623be