博客首页:派 大 星
⛳️ 欢迎关注 ❤️ 点赞 收藏 ✏️ 留言
本文由派大星原创编撰
系列专栏:Docker—云原生
本系列记录容器化技术的初次探险与深入思考历程,如有描述有误的地方还望诸佬不吝赐教
数据卷是一个可供一个或者多个容器使用的特殊目录,它绕过UFS
可以提供很多有用的特性:
使用docker volume create [数据卷名称]
命令来创建一个数据卷
[root@VM-4-14-centos /]# docker volume create my-vol
my-vol
创建完成之后就需要查看创建的数据卷是否存在
[root@VM-4-14-centos /]# docker volume ls
DRIVER VOLUME NAME
local my-vol
除此之外也可以通过命令来查看数据卷的详细信息
docker volume inspect [数据卷名称]
首先在使用docker run
启动挂载数据卷的容器之前,需要了解一些命令基础:
-v
:标记来创建一个数据卷并挂载到容器里--mount
:标记来将 数据卷 挂载到容器里由上述两条命令的作用是一样的,都是将数据卷挂载到容器里,但是在书写时的格式却差别略大,而且在使用docker run
启动中一次可以挂载多个数据卷
-v
:
docker run -d -P --name web -v /webapp training/webapp python app.py
--mount
:
$ docker run -d -P \
--name web \
--mount source=my-vol,target=/usr/share/nginx/html \
nginx:alpine
使用--mount
需要指定source
也就是数据卷的名称和挂载到的目标位置
依然是使用-v
指定一个本地主机目录到容器中
docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
上述的命令加载主机的/src/webapp
目录到容器的/opt/webapp
目录下,这个功能在进行测试的时候十分方便,比如用户放置一些程序到本地目录,来查看容器是否正常工作。
注: 本地目录的路径必须是绝对路径,如果目录不存在Docker
会自动为你创建,并且Docker
挂载数据卷的默认权限是读写,用户也可以通过:ro
指定为只读
docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py
同样使用-v
命令从主机挂载单个文件到容器中
docker run --rm -it -v ~/.bash_history:/bash_history ubuntu /bin/bash
如果有一些持续更新的数据需要在容器之间共享,最好创建数据卷容器
数据卷容器其实就是一个正常的容器,专门用来提供数据卷供其他容器挂载
首先创建一个命名的数据卷容器 pdx
:
docker run -d -v /pdx --name pdx training/postgres echo Data-only container for postgres
还可以在其他容器中使用--volumes-from
参数来从多个容器挂载多个数据卷,也可以从其他已经挂载的数据卷的容器来挂数据卷
docker run -d volumes-from pdx --name p1 training/postgres
docker run -d volumes-from pdx --name p2 training/postgres
注意: 使用--volumes-from
参数所挂载数据卷的容器自己并不需要保持在运行状态
如果删除了挂载的容器(包括pdx、p1和p2
),数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时使用docker rm -v
命令来指定同时删除关联的容器。