docker中的数据卷

1.数据卷  volume  

    定义:用来实现宿主机和容器之间文件目录映射同步。

2.数据卷使用    -v   宿主机路径:容器内路径

    注意:必须在容器首次启动时指定

  a.使用绝对路径数据卷

         docker  run -v  /root/data:/usr/local/tomcat/webapps      .......

     b.使用别名方式数据卷

         docker  run  -v   bb:/usr/local/tomcat/webapps      .......

          注意: 上述中的bb,代表一个数据卷别名

                     bb这个数据别名可以存在,也可以不存在  不存在Docker首次用到时候自动创建

                     第一次使用别名时将容器中原始数据保留下来    使用绝对路径方式不会保留容器中的原始数据

3.别名到底是啥?

   别名代表一个docker,自身维护的数据卷

    1)查看所有docker维护数据卷

             docker volume ls

    2)  查看数据卷详细内容

             docker  inspect   数据卷别名 

    3)  删除数据卷别名

             docker  volume  rm  数据卷别名

 4)  创建一个别名数据卷

             docker  volume  create  数据卷别名

4.别名数据卷基本使用

# docker volume create edc-nginx-vol // 创建一个自定义容器卷
# docker volume ls // 查看所有容器卷
# docker volume inspect edc-nginx-vol // 查看指定容器卷详情信息
创建一个数据卷
docker  volume  create  my_nginx

  查看所有数据卷

docker volume ls 

 查看单个数据卷详细信息

docker  volume  inspect  my_nginx

有了自定义容器卷,我们可以创建一个使用这个数据卷的容器,这里我们以nginx为例:

docker run -d  --name=nginx2 -p 8800:80 -v my_nginx:/usr/share/nginx/html nginx:latest

其中,-v代表挂载数据卷,这里使用自定数据卷my_nginx,并且将数据卷挂载到 /usr/share/nginx/html (这个目录是yum安装nginx的默认网页目录)。

  如果没有通过-v指定,那么Docker会默认帮我们创建匿名数据卷进行映射和挂载。

  创建好容器之后,我们可以进入容器里面看看:

 可以看到有两个默认页,这时我们新启动一个SSH连接到宿主机去到刚刚创建的数据卷里边看看:

 

可以看到,我们可以访问到容器里面的两个默认页面,由此可知,volume帮我们做的类似于一个软链接的功能。在容器里边的改动,我们可以在宿主机里感知,而在宿主机里面的改动,在容器里边可以感知到。

  这时,如果我们手动stop并且remove当前nginx容器,我们会发现容器卷里面的文件还在,并没有被删除掉.

 

由此可以验证,在数据卷里边的东西是可以持久化的。如果下次还需要创建一个nginx容器,那么还是复用当前数据卷里面的文件。

  此外,我们还可以启动多个nginx容器实例,并且共享同一个数据卷,复用性和扩展性较强。

 

 

5.别名数据卷清理

如果不再使用自定义数据卷了,那么可以手动清理掉:

# docker stop my_nginx // 暂停容器实例
# docker rm my_nginx  // 移除容器实例
# docker volume rm my_nginx  // 删除自定义数据卷

 

 6.绝对路径数据卷挂载

docker run -d -it --name=edc-nginx -v /app/wwwroot:/usr/share/nginx/html nginx

这里指定了将宿主机上的 /app/wwwroot 目录(如果没有会自动创建)挂载到 /usr/share/nginx/html (这个目录是yum安装nginx的默认网页目录)。

  这时我们再次进入容器内部看看:

可以看到,与volumes不同,bind mounts的方式会隐藏掉被挂载目录里面的内容(如果非空的话),这里是/usr/share/nginx/html 目录下的内容被隐藏掉了,因此我们看不到。

  但是,我们可以将宿主机上的文件随时挂载到容器中:

  Step1.新建一个index.html

    Step2.在容器中查看

   查看下:docker inspect edc-nginx

   通过上述命令可以看到一大波配置,我们要关注的是:

 数据卷清理

docker stop edc-nginx
docker rm edc-nginx

同volumes一样,当我们清理掉容器之后,挂载目录里面的文件仍然还在,不会随着容器的结束而消失,从而实现数据持久化。

 

   

 

posted on 2023-04-24 22:07  一先生94  阅读(88)  评论(0编辑  收藏  举报

导航