跳到主內容

Docker 儲存


 

image-1642488516425.pngimage-1642488516425.png

--mount 與 -v/ --volume

xxxxxxxxxx
 
1
-v, --volume list      Bind mount a volume
2

--mount mount Attach a filesystem mount to the container


 


Data Volume

相關指令

xxxxxxxxxx
 
1
# 建立volume 
2
# docker volume create [OPTIONS] [VOLUME]
3
$docker volume create my-vol
4
5
#使用 -v
6
$ docker run -d --name my-http -v my-vol:/usr/local/apache2 -p 8080:80 httpd
7
#使用 --mount
8
$ docker run -d --name my-http --mount source=my-vol,target=/usr/local/apache2 -p 8080:80 httpd
xxxxxxxxxx
 
1
#
列出所有volume
2
[tomcat@docker]$ docker volume ls
3
DRIVER              VOLUME NAME
4
local               2db2d2b1a6ceb9f578d2149dc44625e1996dcc33de0639f8644ce2082182b9a8
5
local               my-vol
6
7
# 查詢某volume細節
8
[tomcat@docke]$ docker volume inspect 2db2d2b1a6ceb9f578d2149dc44625e1996dcc33de0639f8644ce2082182b9a8
9
[
10
    {
11
        "CreatedAt": "2019-06-04T15:40:43+08:00",
12
        "Driver": "local",
13
        "Labels": null,
14
        "Mountpoint": "/var/lib/docker/volumes/2db2d2b1a6ceb9f578d2149dc44625e1996dcc33de0639f8644ce2082182b9a8/_data",
15
        "Name": "2db2d2b1a6ceb9f578d2149dc44625e1996dcc33de0639f8644ce2082182b9a8",
16
        "Options": null,
17
        "Scope": "local"
18
    }
19
]
20
21
[tomcat@docke]$ docker volume inspect my-vol
22
[
23
    {
24
        "CreatedAt": "2023-02-07T02:11:18Z",
25
        "Driver": "local",
26
        "Labels": {},
27
        "Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
28
        "Name": "my-vol",
29
        "Options": {},
30
        "Scope": "local"
31
    }
32
]
33
34
35
# 刪除所有不使用的volume
36
[tomcat@docker]$ docker volume prune
37
WARNING! This will remove all local volumes not used by at least one container.
38
Are you sure you want to continue? [y/N] y
39
Deleted Volumes:
40
2db2d2b1a6ceb9f578d2149dc44625e1996dcc33de0639f8644ce2082182b9a8
41
44d6286d1a793ac8c788b0fd364fa8d9430ce3ec079731dbe894dd996cae9adb
42
925559f4c2399c0c989d8602ca77fb3243dfb83022fe029b09b130c9521e7f89
43
9484acbd73c53af47f29add893c5125b0cd7f0f96e521c54e643f1aeb8f97eeb
44
b47202da45060de8f67e48058966b32078d525cadd1c94671a0ffe33f3d5df4b
45
006d620ae77bf7530ea37abd48b9c20ac264956f4b9ef3397e2c5072f32677c2
46
15e0fd2e575c2c24a2a137ff420dbf30326f3859d483561efc45e568d294c802
47
98b5385b04a401e9e870c5a1e807d69c56a1764b2ec91baedd9c13994cb2c863
48
ffdae0e84d00966afdc0df55d664d06ee99c14d249ad7558848088c464d472ff
49
50
Total reclaimed space: 77.8MB
51
52
# 指定volume mount 至 /var/www/html
53
[tomcat@docker]$ docker run -d -v html_doc:/var/www/html httpd
54
55
56

Bind Mount

xxxxxxxxxx
 
1
#
直接mount 外部資料夾 至 /var/www/html
2
# 相對路徑
3
[tomcat@docker-qc html-doc]$ docker run -d -v ${PWD}/html-doc:/var/www/html httpd
4
# 絕對路徑
5
[tomcat@docker-qc html-doc]$ docker run -d -v /home/tomcat/docker/html-doc:/var/www/html httpd


 

image-1642495777057.pngimage-1642495777057.png

官方参考链接 https://docs.docker.com/storage/volumes/#share-data-among-machines


常用volume mapping (log)

xxxxxxxxxx

 

1
#
nginx
2
docker run -p 80:80 -itd -v /tmp/log/nginx/docker-nginx-log:/var/log/nginx nginx
3

使用綁定的不同時機比較

- 使用 Volume 的時機
  • 想要在多個 Container 中共用資料的時候
  • 在無法確保存放資料路徑或結構的時候
  • 當 Docker 不在本機端而是在雲端或遠端的時候
  • 當有需要資料的備份、還原、轉移的時候
  • 當資料有大量 I/O 的情況,Docker 建議你可以把資料放在 Docker VM 內,會有更好的性能表現
  • 當你的應用程式需要完整且原生的 File System 的時候
- 使用 Bind Mount 的時機
  • 想要將 Config 設定檔同時分享給 Container 與本機端的時候
  • 想要同時分享程式碼或其他來源文件給 Container 與本機端的時候
  • 當非常確定所綁定的路徑底下,其資料夾與結構等等都非常確定且保持一致不會改變的時候
- 使用 Tmpfs Mount 的時機
  • 不想讓資料被永久儲存的時候
  • 需要每次重啟都有乾淨的環境時
  • 當想要讀寫性能非常好時,因為它掛載的空間是在記憶體上

Docker筆記 - 讓資料遠離Container,使用 Volume、Bind Mount 與 Tmpfs Mount