Docker数据卷

1.容器数据卷简介 

  一句话:有点类似我们Redis里面的rdb和aof文件

2.容器数据卷作用

 

  容器的持久化

  容器间继承+共享数据

3.数据卷使用

[1].使用命令方式添加

(1).容器添加

语法:docker run -it -v /宿主机绝对路径目录:/容器内目录      镜像名

[root@pluto /]# docker run -it -v /myDataVolume:/dataVolumeContainer centos:6.8

 

(2).查看数据卷是否挂载成功

语法:docker inspect 容器ID

[root@pluto /]# docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

04bd9add86e3        centos:6.8          "/bin/bash"         4 minutes ago       Up 4 minutes                            angry_payne         

[root@pluto /]# docker inspect 04bd9add86e3

 

(3).容器和宿主机之间数据共享

 

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

 

(5).仅读

语法:docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

 

[2].DockerFile添加

(1).在主机创建目录

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

[root@pluto /]# mkdir /mydocker

[root@pluto /]# cd mydocker/

(2).File构建

语法:VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]

说明:

  出于可移植和分享的考虑,用-v 主机目录:容器目录这种方法不能够直接在Dockerfile中实现。

  由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。

  可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷

[root@pluto mydocker]# pwd

/mydocker

[root@pluto mydocker]# vim Dockerfile

 

# volume test

FROM centos:centos6.8

VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]

CMD echo "finished,--------success1"

CMD /bin/bash

  因为本机系统是centos6.8,所以如果不指定可能会出现"FATAL: kernel too old"的情况

(3).build

  build后生成镜像,获得一个新镜像pluto/centos

[root@pluto mydocker]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

centos              6.8                 efa3cf7ee1f9        17 months ago       194.5 MB

[root@pluto mydocker]# docker build -f /mydocker/Dockerfile -t pluto/centos .

 

(4).run容器  

[root@pluto mydocker]# docker run -it pluto/centos

 

(5).容器卷目录

  找到容器内的卷目录地址对应的主机目录地址

[root@pluto /]# docker ps

CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES

a7e8f6f016b4        pluto/centos        "/bin/sh -c /bin/bas   46 minutes ago      Up 46 minutes                           modest_morse           

[root@pluto /]# docker inspect pluto/centos

 

 

  如果出现"cannot open directory"的错误

Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied

解决办法:在挂载目录后多加一个--privileged=true参数即可

4.数据卷容器

  命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器

 

 

 Docker run -it --name mydocker1 pluto/cetos

posted @ 2020-10-23 23:46  HOsystem  阅读(439)  评论(0编辑  收藏  举报