写在前面
主题是Use bind mounts,这里是链接。本文主要学习持久化数据的另一种方式。
使用mount持久化数据
前文使用Volume持久化数据,这里使用另一种方式Mount持久化数据,就是把主机中的路径映射到容器内的路径。下图是两种方式的主要区别。
| volume | mount | |
|---|---|---|
| 数据在主机存放的位置 | Docker选择 | 自己选择 | 
| 使用例子 | type=volume,src=my-volume,target=/usr/local/data | type=bind,src=/path/to/data,target=/usr/local/data | 
| 用容器内存填充新的卷 | 支持 | 不支持 | 
| 支持卷驱动程序 | 支持 | 不支持 | 
尝试使用mount
- 确保当前终端路径处于之前的getting-started-app路径
- 运行下面代码,type为bind,src=”$(pwd)“把当前文件目录作为源目录,target=/src是映射到容器内的文件目录。-it是进入实时交互。结果如下所示。docker run -it --mount type=bind,src="$(pwd)",target=/src ubuntu bashroot@ac1237fad8db:/# pwd / root@ac1237fad8db:/# ls bin dev home media opt root sbin srv tmp var boot etc lib mnt proc run src sys usr
- 进入src目录并创建myfile.txtroot@ac1237fad8db:/# cd src root@ac1237fad8db:/src# ls Dockerfile node_modules package.json spec src yarn.lockroot@ac1237fad8db:/src# touch myfile.txt root@ac1237fad8db:/src# ls Dockerfile myfile.txt node_modules package.json spec src yarn.lock
- 打开一个新终端并进入getting-started-app目录,会发现myfile.txt在出现这个目录。├── getting-started-app/ │ ├── Dockerfile │ ├── myfile.txt │ ├── node_modules/ │ ├── package.json │ ├── spec/ │ ├── src/ │ └── yarn.lock
- 使用Ctrl + D停止容器运行