原文地址:https://docs.docker.com/userguide/dockervolumes/
到目前为止,我们介绍了许多Docker的基础知识,学会了如何操作镜像,也学会了如何关联两个容器,本节课,我们将学习如何管理容器内外的数据
我们有两种主要的方式来管理Docker中的数据
1:数据卷组
2:数据卷组容器
数据卷组
一个数据卷组是一个特殊设计的目录,一个活多个容器公用,数据卷组提供了许多非常有用的特点:
1:数据卷组会在一个容器创建的时候初始化,如果这个容器的镜像包含特殊挂载点的的数据,存在的数据会被拷贝一份到新的数据卷组中
2:数据卷组可以在多个容器之间分享
3:对数据的修改是直接的(这是毛意思?)
4:对数据的修改将不会包含在镜像的更新中
5:数据卷组长期存在,就算容器被删除
数据卷组是用来长期存储数据,不受限于容器的生命周期,Docker在你删除一个容器的时候永远不会自动删除卷组,也不会对那些没有容器时候的卷组进行垃圾回收
如何添加一个数据卷组
我们可以使用一个-v 标示在使用docker create ,docker run命令的时候来增加一个数据卷组,我们在一个命令中使用多次-v,我们现在仅仅挂载一个目录:
docker run -d -P –name web -v /webapp training/webapp python app.py
这个时候我们就在容器中创建了一个/webapp的镜像
定位一个镜像
我们可以使用docker inspect 命令来定位一个卷组
docker inspect web
然后我们就可以找到这么一个东西
“Volumes”: {
“/webapp”: “/var/lib/docker/volumes/2cd2dcd4a9741deb5c84f352f5de4ecef94eccce38e1c455328c7ee823edcebd/_data”
},
“VolumesRW”: {
“/webapp”: true
},
我们就知道容器内的数据其实是存储在了/var/lib/docker/volumes/2cd2dcd4a9741deb5c84f352f5de4ecef94eccce38e1c455328c7ee823edcebd/_data 下,然后这个卷组是可读写的
挂载一个本机目录作为数据目录
除了我们可以使用-V 来创建一个目录之外,我还可以把本机的一个目录挂载到容器内作为数据卷组,
docker run -d -P –name web -v /src/webapp:/opt/webapp training/webapp pyton app.py
其中,本机目录是/src/webapp,挂载到容器内之后的目录是/opt/webapp,如果/opt/webapp已经存在,那么文件夹内容会被覆盖
这对测试是非常有用的,比如我们可以挂载我们的源代码到容器中,然后看一下当我们修改源代码的时候应用是否会正常工作,前提这个目录必须是真是存在的,如果目录不存在,Dokcer会自动给你创建
Docker 模式人是可读可写的,当然我们可以只挂载只读
docker run -d -P –name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py
这个命令中我们特别加入了:ro 只读权限(readonly)
挂载本机文件到容器
使用-v 我们还可以挂载单个文件到容器中
docker run –rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash
这个命令会让你进入到bash界面中,并且,你会有你的bash历史记录从本机拷贝到了容器中,当你从容器中退出之后,本机的历史中也会有你在容器中输入的命令的记录(因为修改的是同一文件)
Latest posts by Zhiming Zhang (see all)
- aws eks node 自动化扩展工具 Karpenter - 8月 10, 2022
- ReplicationController and ReplicaSet in Kubernetes - 12月 20, 2021
- public key fingerprint - 5月 27, 2021