docker学习六:数据卷

一、什么是容器数据卷

 1、数据卷出现原因:将应用和环境打包成一个镜像。但数据放到容器中,容器关闭,数据会丢失。为了数据持久化,希望可以将容器内的数据存放到本地,容器之前,容器和本地可以实现数据共享,出现了数据卷。

2、数据卷:将容器内的目录,挂载到linux,宿主机上。可以实现容器的持久化和同步操作,容器间也可以数据共享

二、使用数据卷

(一)、使用命令挂载  ----使用多个-v可以挂载多个目录

语句:-v 主机目录:容器内目录

案例:docker run -d -it --name centos1 -v /home/ceshi:/home centos /bin/bash-----将容器home目录挂载到linux本机的ceshi文件夹

           验证是否挂载成功

          docker inspect 容器id-----出现红框内的数据说明挂载成功

         

        实现1,在容器内home文件夹创建文件,ceshi文件夹也会有

        实验2,停止容器,在ceshi文件夹中编写文件内容,容器内home文件夹也会有

    3、数据卷好处:修改配置只需要在服务器上修改,容器会自动同步

(二)、使用dockerfile文件挂载

一、自己构建一个镜像

1、创建一个dockerfile文件,名字可以随机,建议Dockerfile-----mkdir创建文件夹

2、vim dockerfile :打开文件编辑,编辑命令如下

   FROM centos

  VOLUME["volume01","volume02"]

   CMD echo"---end---"

    CMD /bin/bash

3,构建镜像

docker build -f home/docker-test-volume/dockerfile1 -t kuangshen/centos:01 .

参数解释:-f 生成镜像名字的路径

                 -t 生成的镜像名,后面的点表示在当前目录生成镜像

通过这种方式,将挂载写到生成镜像的文件里,构建时会自动挂载卷,匿名挂载。如果文件里没有写,才需要通过-v命令挂载

三、实战演练---部署mysql

1、下载镜像mysql

docker pull mysql:5.7

2、运行时做数据挂载

docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql101 mysql:5.7

参数解释:-d----后台运行

                  -p------端口映射

                  -v ------数据卷

                 -e-------配置环境

                      --name---------命名

四、具名挂载和匿名挂载

匿名挂载:-v 容器内路。只写容器内路径,不写容器外路径,叫匿名挂载

       

具名挂载:-v 卷名:容器路径-----只写容器外名字,不写路径,写容器路径,叫具名挂载

查看挂载卷的路径

docker volume inspect 卷名

注:所有docker内的卷没有指定目录的情况下,都在/var/lib/docker/volumes/xxxx

容器挂载一般都使用具名挂载

###如何确定是具名挂载还是匿名挂载

-v 容器内路径 # 匿名挂载

-v 卷名:容器内路径 #具名挂载

-v 主机路径:容器内路径#指定挂载

拓展:

 docker run -d -p --name niginx01 -v juming-nginx:/etc/nginx:ro nginx

docker run -d -p --name niginx01 -v juming-nginx:/etc/nginx:rw nginx

ro :readonly  #只读,一旦文件打开有ro,说明文件只能通过宿主机操作,容器内部无法操作

rw:readwrite#可读可写

原文地址:https://www.cnblogs.com/xiaoyuer2121/p/13939933.html