前言
默认情况下,容器内创建的所有文件都存储在可写容器层上。
1. 数据卷 (volume)详解
volume在docker中的意思表示将宿主机上的目录挂在到docker容器中,这样可以保持数据持久化,当将容器删除时,数据不会丢失
注意:数据卷 的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的文件会隐藏掉,能显示和看的是挂载的 数据卷,而不是被作为挂载点儿的目录中原来的内容。
a. volume 的使用场景
卷是在Docker容器和服务中保存数据的首选方式。卷的一些用例包括:
在多个运行容器之间共享数据。如果您没有明确创建它,则会在第一次将其装入容器时创建卷。当该容器停止或被移除时,该卷仍然 存 在。多个容器可以同时安装相同的卷,无论是读写还是只读。仅当您明确删除卷时才会删除卷。
当您想要将容器的数据存储在远程主机或云提供商上而不是本地时。
当您需要备份,还原或将数据从一台Docker主机迁移到另一台时,卷是更好的选择。您可以停止使用卷的容器,然后备份卷的目录实现数据的备份和迁移(如/var/lib/docker/volumes/)。
例如:
1. 创建一个新的数据卷,之后运行一个容器,并把数据卷挂载到容器的一个目录/webapp 下。
2. 在容器的 /webapp 目录下创建文件 nginx.txt 并写入一些内容
3. 接着退出这个容器,并删除这个容器。
4. 运行一个新的容器,并挂载刚才的数据卷到容器的目录 /zjg
5. 观察容器目录 /zjg 下是否有之前创建的文件 nginx.txt
创建一个数据券
docker volume create zjg_v1
启动一个容器并挂载一个已经创建好的数据卷
在用 docker run 命令的时候,使用 --mount 标记来将 数据卷 挂载到容器里。
下面创建一个名为 mynginx 的容器,并加载一个 数据卷 到容器的 /webapp 目录。*
docker run -it --mount source=zjg_v1,target=/webapp --name mynginx nginx /bin/sh
--mount 语法:
--mount type=volume, source=数据卷名, target=容器中的挂载点
type 的值可以是 volume , bind , tmpfs 默认是 volume
source 也可以简写成 src
target 可以简写成 dst
进入容器,创建文件
此时在容器的 /webapp 目录下创建文件 nginx.txt
/ # touch /webapp/nginx.txt
/ # echo "nginx server" > /webapp/nginx.txt
退出并删除容器
/ # exit
[root@docker data_volume]# docker rm mynginx
启动一个新的容器,并且把刚才的数据卷 zjg_v1 挂载到新的容器里
[root@docker data_volume]# docker run -it --name nginx_new \
> --mount source=zjg_v1,target=/zjg \
> alpine /bin/sh
接着查看容器中目录 /zjg 下是否有个刚才的文件 nginx.txt
/ # cat /zjg/nginx.txt
nginx server