在真实环境中docker需要对数据进行持久化,或者多个容器之间进行数据共享,涉及到容器的数据管理操作。
数据卷(Data Volumes)是一个可供容器使用的特殊目录,通过主机操作系统目录直接映射进容器,类似mount
特性:
1、创建数据卷
docker提供了volume命令来管理数据卷,除了create(创建),还支持inspect(查看详细信息),ls(列出已有数据卷),prune(清理无用数据卷),rm(删除数据卷)等
[root@docker01 ~]# docker volume create -d local test
test
[root@docker01 ~]# ll /var/lib/docker/volumes/
total 24
drwxr-xr-x. 3 root root 19 Mar 9 23:21 1d300cc7b91123b4180bf8edb1f3ce130a8f317dba3332f21c55be23f27d0f30
-rw-------. 1 root root 32768 Mar 10 15:10 metadata.db
drwxr-xr-x. 3 root root 19 Mar 10 15:10 test
[root@docker01 ~]# docker volume ls
DRIVER VOLUME NAME
local 1d300cc7b91123b4180bf8edb1f3ce130a8f317dba3332f21c55be23f27d0f30
local test
2、绑定数据卷
可以在创建容器时将本地主机的任意路径挂载到容器内作为数据卷,这种形式创建的数据卷成为绑定数据卷,docker [container] run --mount选择使用数据卷。
-mount支持三种类型的数据卷:
volume:普通数据卷,映射到主机/var/lib/docker/volumes路径下
bind:绑定数据卷,映射到主机指定路径下
tmpfs:临时数据卷,只存在于内存中
使用training/weapp镜像创建一个web容器,并创建一个数据卷挂载到容器的/opt/webapp目录下。
[root@docker01 ~]# docker run -d -P --name web --mount type=bind,source=/webapp,destination=/opt/webapp:ro training/webapp python app.py
#加个ro或rw表示目录权限
[root@docker01 ~]# docker run -d -P --name web --mount type=bind,source=/webapp,destination=/opt/webapp training/webapp python app.py
Unable to find image 'training/webapp:latest' locally
latest: Pulling from training/webapp
Image docker.io/training/webapp:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
e190868d63f8: Pull complete
909cd34c6fd7: Pull complete
0b9bfabab7c1: Pull complete
a3ed95caeb02: Pull complete
10bbbc0fc0ff: Pull complete
fca59b508e9f: Pull complete
e7ae2541b15b: Pull complete
9dd97ef58ce9: Pull complete
a4c1b0cb7af7: Pull complete
Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d
Status: Downloaded newer image for training/webapp:latest
89b39b0e540a3fc4730f5d72c2606dc162d4e6fa3f74eaf3c9b441d4e664576b
用户需要在多个容器之间共享一些持续更新的数据,可以使用数据卷容器,数据卷容器也是一个容器,但它是专门提供数据卷给其他容器挂载
创建一个数据容器卷dbdata,并在其中创建一个数据卷挂载到/dbdate
[root@docker01 ~]# docker run -it -v /dbdate --name dbdate ubuntu:18.04
root@f046a96ec64d:/# ls
bin boot dbdate dev etc home lib lib64 media mnt opt proc root run
其他容器使用--volumes-from来挂载dbdate容器中的数据卷
[root@docker01 webapp]# docker run -it --volumes-from dbdate --name db1 ubuntu
root@fafd91f30ad1:/# ls
bin boot dbdate dev etc home lib lib64 media mnt opt proc root run
测试,互相可以看到创建的文件
root@f046a96ec64d:~# cd /dbdate/
root@f046a96ec64d:/dbdate# touch aa
root@f046a96ec64d:/dbdate# ls
aa
root@fafd91f30ad1:/# cd dbdate/
root@fafd91f30ad1:/dbdate# ls
aa
如果删除了dbdata和db1数据卷不会被自动删除,如果要删除使用docker rm -v来删除
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。