首页 » 翻译 » Docker » 正文

Docker 入门教程06 管理容器中的数据 第一部分

原文地址: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历史记录从本机拷贝到了容器中,当你从容器中退出之后,本机的历史中也会有你在容器中输入的命令的记录(因为修改的是同一文件)

发表评论