容器数据卷
我们考虑一个问题,当我们在使用 Docker 的时候,数据是存放在容器中的,如果我们把容器删除掉,那么数据就会丢失,这肯定是不科学的,在正常情况下,我们肯定得考虑做一下持久化,把数据存储到本地。又或者说,我们现在需要容器之间进行数据的共享,这个功能 Docker 可以实现嘛?答案自然是可以的,这其实就是卷技术,实现了目录的挂载,将我们容器内的目录,挂载到了 Linux 上面。
使用数据卷的格式如下:
docker run -it -v 主机目录:容器内目录 -p 主机端口:容器内端口
我们测试一下,将主机 home 目录下的 test 文件夹映射到 centos 容器中的 /home 下,这时两个文件夹就可以实现数据同步了。
docker run -it -v /home/test:/home centos /bin/bash

我们在 centos 容器中的 /home 下创建了一个 test.java 文件,然后发现这个文件已经被同步到了主机的 /home/test 目录下,证明我们的数据卷技术实现成功。
当我们把容器删除之后,可以发现挂载到本地的数据卷没有丢失,这就实现了容器数据持久化功能。
挂载方式
数据卷一共有三种挂载方式,分别为匿名挂载、具名挂载和指定路径挂载。
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载
匿名挂载的实现:
[root@VM-0-4-centos test]# docker run -d --name test01 -v /home centos
查看一下所有卷的情况:
[root@VM-0-4-centos test]# docker volume ls
DRIVER VOLUME NAME
local 522ec66631d0f3f3808db304ca3808551da882eef8743845a72eb355f5b1ef37
显然,这是没有卷名的,也就是匿名挂载。
具名挂载的实现:
[root@VM-0-4-centos test]# docker run -d --name test02 -v vo:/home centos
我们再查看所有卷的情况,可以发现多了一个 vo 名字,这便是具名挂载。

Docker 容器内的卷,如果没有指定目录,都是存放在 /var/lib/docker/volumes/自定义的卷名/_data 下的。
Dockerfile
Dockerfile 是用来构建 docker 镜像的文件。我们可以通过下面这个脚本来生成镜像,由于镜像是一层一层的,而脚本的命令是一个一个的,所以其实每个命令都是镜像的一

本文详细介绍Docker的数据卷技术,包括挂载方式、Dockerfile构建过程及网络配置等。通过实例演示容器间数据同步和自定义网络搭建。
最低0.47元/天 解锁文章
4万+

被折叠的 条评论
为什么被折叠?



