Docker storage
docker储存文件主要有三种方式:volume、bind mount、tmpfs mount
volume是在宿主机docker目录下创建的一个类似于磁盘的虚拟卷,用户可以使用docker命令来管理volume;volume生命周期与容器的生命周期分离,即使容器被删除,数据依然保留,可以使用 Volume。
bind mount直接与宿主机的文件系统关联,因此数据共享更加直接、实时;方便进行开发和调试,容器中的文件也更易于与宿主机同步;但是Bind Mount 的权限与宿主机文件系统的权限直接相关,可能会导致权限管理上更加复杂。
tmpfs mount直接在容器内存中开辟一个虚拟目录空间,因此随着容器的消失,数据也会消失,一般很少使用。
通常情况下,开发环境和测试环境更适合使用 Bind Mount,而生产环境更适合使用 Volume 进行数据管理。
Volume
创建卷
docker volume create my-vol
列出卷
docker volume ls
检查卷
docker volume inspect my-vol
删除卷
docker volume rm my-vol
使用volume启动容器
# use --mount
docker run -d \
--name devtest \
--mount source=myvol2,target=/app \
nginx:latest
# use -v
docker run -d \
--name devtest \
-v myvol2:/app \
-it nginx:latest bash
Read-only
# use --mount
docker run -d \
--name=nginxtest \
--mount source=nginx-vol,destination=/usr/share/nginx/html,readonly \
nginx:latest
# use -v
docker run -d \
--name=nginxtest \
-v nginx-vol:/usr/share/nginx/html:ro \
-it nginx:latest bash
Bind Mount
使用bind mount启动容器
# use --mount
docker run -d \
-it \
--name devtest \
--mount type=bind,source="$(pwd)",target=/app \
-it nginx:latest bash
# use -v
docker run -d \
-it \
--name devtest \
-v "$(pwd)":/app \
-it nginx:latest bash
# $(pwd)是当前文件夹
Read-only
# use --mount
docker run -d \
-it \
--name devtest \
--mount type=bind,source="$(pwd)",target=/app,readonly \
-it nginx:latest bash
# use -v
docker run -d \
-it \
--name devtest \
-v "$(pwd)":/app:ro \
-it nginx:latest bash