1. 程式人生 > >docker掛載

docker掛載

docker儲存

資料卷(volume)

資料卷是一種特殊的目錄,可以被多個容器使用

建立資料卷

docker volume create 卷名
例如:

MacBook-Pro:~$ docker volume create vol-test
vol-test

檢視卷列表
MacBook-Pro:~$ docker volume ls
DRIVER              VOLUME NAME
local               79c713d89302dbf967318be3eb3a91c27962b5c3f45f7440763d2e08da1f3b75
local
92aadfaf31f7895a46669e2553f4884ae866e33d317a6ef0501df8ede92e221e local 9e4bb84c385cee9551a5568a7a739aa68e6cbd87e1baaee742d3220d75616185 local vol-test

檢視卷

上述例子中已經使用過就是docker volume ls

MacBook-Pro:~$ docker volume ls
DRIVER              VOLUME NAME
local               79
c713d89302dbf967318be3eb3a91c27962b5c3f45f7440763d2e08da1f3b75 local 92aadfaf31f7895a46669e2553f4884ae866e33d317a6ef0501df8ede92e221e local 9e4bb84c385cee9551a5568a7a739aa68e6cbd87e1baaee742d3220d75616185 local vol-test

檢查卷資訊

docker volume inspect 卷名

MacBook-Pro
:~$ docker volume inspect vol-test [ { "CreatedAt": "2018-06-24T04:46:03Z", "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/vol-test/_data", "Name": "vol-test", "Options": {}, "Scope": "local" } ]

掛載資料卷

docker run --name 容器名 -it --mount source=卷名,target=容器內絕對路徑(掛載點) 映象名 bash或者
docker run --name 容器名 -it -v 卷名:容器內絕對路徑(掛載點) 映象名 bash
掛載就是用–mount引數 source是資料卷,target是容器內檔案系統掛載點,
還可以使用-v引數 -v 卷名:容器內絕對路徑
例如:
啟動兩個容器,掛載同一個資料卷共享資料
新建容器m1,並建立檔案,內容為aaa

MacBook-Pro:~$ docker run --name m1 -it --mount source=vol-test,target=/root ubuntu bash
root@db69531209b9:/# cd root/
root@db69531209b9:~# echo "aaa" > aaa.txt
root@db69531209b9:~# ls
aaa.txt

啟動容器m2,檢視檔案和內容

fengbindeMacBook-Pro:~$ docker run --name m2 -it --mount source=vol-test,target=/root ubuntu bash
fengbindeMacBook-Pro:~ fengbinshi$ docker run --name m2 -it --mount source=vol-test,target=/root ubuntu bash
[email protected]:/# cd root/
[email protected]:~# ls
aaa.txt
[email protected]:~# cat aaa.txt 
aaa

可以看到,資料在m1中建立,m2中也可以讀取

資料卷刪除

docker volume rm 卷名來刪除指定資料卷
docker volume prune來刪除無主的資料卷

MacBook-Pro:~$ docker volume rm vol-test
vol-test
MacBook-Pro:~$ docker volume prune
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
9e4bb84c385cee9551a5568a7a739aa68e6cbd87e1baaee742d3220d75616185
79c713d89302dbf967318be3eb3a91c27962b5c3f45f7440763d2e08da1f3b75
92aadfaf31f7895a46669e2553f4884ae866e33d317a6ef0501df8ede92e221e

Total reclaimed space: 0B

目錄掛載

docker run -it -v 宿主機目錄:容器目錄 映象名 命令或者
docker run -it --mount type=bind,source=宿主目錄,target=容器目錄[,readonly] 映象 命令
在建立容器後我在本地目錄下建立檔案,並在容器內檢視

MacBook-Pro:Desktop$ docker run -it -v /Users/home/Desktop/dockerTest/:/root ubuntu bash
root@d3e4a2ca07ab:/# cd root
root@d3e4a2ca07ab:~# ls
bbb.txt
root@d3e4a2ca07ab:~# cat bbb.txt 
bbb

掛載主機檔案

命令同目錄掛載,只不過把路徑換為檔案

MacBook-Pro:Desktop fengbinshi$ docker run -it -v $HOME/Desktop/dockerTest/bbb.txt:/root/a.txt ubuntu bash
root@14484f34d384:/# cd root/
root@14484f34d384:~# ls
a.txt
root@14484f34d384:~# cat a.txt 
bbb