docker 数据卷

作者: 鲁智深 分类: docker 发布时间: 2018-08-31 01:34

docker理念:
1、将运用与运行的环境打包形成容器运行,运行可以伴随容器,但是我们对数据的要求希望是持久化的
2、容器之间希望有可能共享数据

docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。

为了能保存数据在docker中我们使用卷。

数据卷

redis是内存中的数据库,redis关机后在开启数据还在存在的,因为redis里面的rdb和aof文件,docker机制类似redis的rdb和aof文件。

特点:
1、数据卷可在容器之间共享或重用数据
2、卷中的更改可以直接生效
3、数据卷中的更改不会包含在镜像的更新中
4、数据卷的生命周期一直持续到没有容器使用它为止

容器内添加数据卷

直接命令添加容器数据卷

命令:
docker run -it -v /宿主机绝对路劲目录:/容器内目录 镜像名

1
docker run -it -v /myDataVolume:/dataVoLUNEContainer ubuntu
宿主机

宿主机

dataVolumeContainer 文件夹和 myDataVolume 文件夹数据共享

docker容器

docker容器

查看数据卷是否挂载成功

1
2
docker ps
docker inspect 容器id

容器和宿主机之间数据共享

绑定

绑定

我们在宿主机上touch 一个host.txt

宿主机host文件

宿主机host文件

查看容器中dataVolumeContainer 文件夹,发现也有了

容器文件

容器文件

容器停止退出后,主机修改后数据是否同步

1、停止容器

停止容器

停止容器

2、宿主机上修改资料

宿主机上修改资料

宿主机上修改资料

3、再次启动容器,查看容器内容数据

启动容器

启动容器

查看容器内数据

查看容器内数据

所以主机修改过,容器已经停止,数据仍然会同步!

命令带权限
ro (read only)只读
docker run -it -v /宿主机绝对路劲目录:/容器内目录:ro 镜像名

1
docker run -it -v /myDataVolume:/dataVoLUNEContainer:ro ubuntu

DockerFile 添加容器数据卷

docker images ====》 dockerfile 相当于,dockerfile是对docker 镜像源码级别的描述。

我们查看一下docker redis

docker redis镜像

docker redis镜像

千万不要以为掌握一个docker pull redis 就可以了!

根目录下新建mydocker文件夹并进入

1
2
mkdir mydocker
cd mydocker

可在docker中使用volume指令给镜像添加一个或多个数据卷

file构建

1
2
3
4
5
6
7
FROM ubuntu
VOLUME ["/dataVolumeContauner1","/dataVolumeContauner2"]
CMD echo "finished,--------success1"
CMD /bin/bash

# 类似于命令
docker run -it -v /host:/dataVolumeContainer1 -v /host2:/dataVolumeContainer2 ubuntu /bin/bash

build后生成容器获得一个新镜像ayf/ubuntu

1
sudo docker build -f /home/atguigu/mydocker/DockerFile -t ayf/ubuntu .

会一层层执行DockerFile文件内代码

docker build

docker build

run容器

1
docker run -it 容器id

通过上述步骤,容器内的卷目录地址已经知道dataVolumeContauner1和dataVolumeContauner2

容器卷

容器卷

对应的主机目录地址哪?

主机对应默认地址

1
docker inspect 容器id
对于宿主机上的数据卷

对于宿主机上的数据卷

测试共享数据

容器内

容器内

宿主机

宿主机

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注