# docker volume

使用 volume 時，docker 會在你的本機上隨機新增一個本地資料夾（Local storage area），大部分會在/var/lib/docker/volumes/底下，然後讓**這個資料夾跟 container 裡面的某個資料夾互通**。

因為他們是互通的，所以當你 container 裡面那個資料夾有任何變更時，本地的資料夾也會跟著變，而且很重要的一點是：***container 被刪掉時那個資料夾資料仍被保留，***&#x6211;們就可以利用這個特性保留容器裡面的資料。

替容器裡面的/data目錄建立相通的永久volume

```
docker run -it -v /data --name=container1 busybox sh
exit

docker volume ls
DRIVER              VOLUME NAME
local               2b44e16bfe8a7417e6ef183e9b9824936a490bff0c4122568437a449f85d52a1
local               283861498c6d94b05dfed40237066e05e955f916ae94e6ac8c5a9070d8dcc058
docker start container1
docker inspect container1
```

![](https://529150212-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh81JtaIQ84bwQqz_Wh%2F-LkROIA2erH9gYaVPJAQ%2F-LkRQTJodM9uo5knLiG4%2Fimage.png?alt=media\&token=73a18a21-f852-410a-bd5b-14e29e2c65ed)

![](https://529150212-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh81JtaIQ84bwQqz_Wh%2F-LkROIA2erH9gYaVPJAQ%2F-LkRPfg96zy5wCZHZnaC%2Fimage.png?alt=media\&token=9cd71330-0e58-4523-8da1-e945a0f27283)

## 讓 Container 和 Container 之間的資料共享

啟動第二個 Container 指令如下

```
docker run -it --volumes-from container1 --name=container2 busybox sh
```

![](https://529150212-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh81JtaIQ84bwQqz_Wh%2F-LkROIA2erH9gYaVPJAQ%2F-LkRRh1nuSwXcKH_zZiI%2Fimage.png?alt=media\&token=f5f19f58-3476-4b8d-af3a-d65bb0699d49)

```
root@kawsing:/# cd /var/lib/docker/volumes/2b44e16bfe8a7417e6ef183e9b9824936a490bff0c4122568437a449f85d52a1/_data/
root@kawsing:/var/lib/docker/volumes/2b44e16bfe8a7417e6ef183e9b9824936a490bff0c4122568437a449f85d52a1/_data# ls
helloworld2.txt  helloworld.txt
```

### 新增一個named volume <a href="#id-27f8" id="id-27f8"></a>

```
docker volume create --name data
docker volume ls
真實路徑位於/var/lib/docker/volumes/data/_data
```

![](https://529150212-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh81JtaIQ84bwQqz_Wh%2F-LkRAaNbCMjDE2nObpxX%2F-LkRAgiMnui5m23Xtnqm%2Fimage.png?alt=media\&token=40346073-6bf9-4466-9c11-bf5c2b9da831)

![](https://529150212-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh81JtaIQ84bwQqz_Wh%2F-LkRCbaSi51yJhpvMu8k%2F-LkRCeJzTC7AIEcKZiHz%2Fimage.png?alt=media\&token=c6bd5170-f96f-4305-a938-e34f9668b77a)

![](https://529150212-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh81JtaIQ84bwQqz_Wh%2F-LkRCbaSi51yJhpvMu8k%2F-LkRD9UX7szX7JdR5jXI%2Fimage.png?alt=media\&token=ca0c3ddd-6840-4ddb-b462-2e428c8ecc03)

![](https://529150212-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh81JtaIQ84bwQqz_Wh%2F-LkRCbaSi51yJhpvMu8k%2F-LkRCoJT-UaBJrazwRne%2Fimage.png?alt=media\&token=4735dffa-e60e-4f4e-87ee-f501dedbde21)

### 再次啟動容器

docker run --name testvolume -v data:/tmp **-itd** busybox sh

![](https://529150212-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh81JtaIQ84bwQqz_Wh%2F-LkRCbaSi51yJhpvMu8k%2F-LkRDxNYYfxVQ3R-DvvR%2Fimage.png?alt=media\&token=cb4e63be-aac2-4046-a59a-d02208d292e8)

![](https://529150212-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh81JtaIQ84bwQqz_Wh%2F-LkRFu4ggPNirm_M5DSw%2F-LkRFve_5EQVEq3lF8Yz%2Fimage.png?alt=media\&token=f7695384-ece6-43c9-8fcc-5e389c0caad3)

```
docker volume inspect data
[
    {
        "CreatedAt": "2019-07-23T00:22:18Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/data/_data",
        "Name": "data",
        "Options": {},
        "Scope": "local"
    }
]
```

## 新增一個 HOST volume

&#x20;docker volume create data 使用的 volume 稱作 **named volume**，而現在要介紹另外一種叫做 **host volume**，用來直&#x63A5;***指定某個資料夾***&#x8DDF;容器內的資料夾連通

```
docker run --name hostvolume -v /docker/busybox/tmp:/tmp -itd busybox sh
cd /docker/busybox/tmp
echo "Host volume create" > fromhostvolume.txt
```

![](https://529150212-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh81JtaIQ84bwQqz_Wh%2F-LkRS8LZ5KnU70wgfSHC%2F-LkRVbdTyewL6Ii2Qvtw%2Fimage.png?alt=media\&token=8e7764f2-0b47-4016-8abc-c4f265e473a5)
