docker容器的数据卷

 

一、容器的数据卷

在Docker的使用过程中往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,所以这就涉及到Docker容器的数据操作。 
容器中数据管理主要有两种方式:数据卷和数据卷容器。

  1. 数据卷(Data Volumes) 容器内数据直接映射到本地宿主机。
  2. 数据卷容器(Data Volume Containers) 使用特定容器维护数据卷。

数据卷

数据卷是一个特殊的目录,它将主机目录直接映射进容器。可供一个或多个容器使用。

数据卷设计的目的就是为了 数据的持久化,它完全独立与容器的生命周期。因此,容器删除时,不会删除其挂载的数据卷,也不会存在类似的垃圾机制对容器存在的数据卷进行处理。

数据卷的特性:

  • 数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中
  • 数据卷可以在容器之间共享和重用
  • 可以对数据卷里的内容直接修改,修改回马上生效,无论是容器内操作还是本地操作
  • 对数据卷的更新不会影响镜像的更新
  • 数据卷会一直存在,即使挂载数据卷的容器已经被删除

为容器添加数据卷:

sudo docker run -v ~/container_data:/data -it ubuntu /bin/bash

  这样就在宿主机当前目录创建了一个container_data的目录,在容器中创建了一个data目录,两个目录是相互连通的,在任何一个目录的修改都会在另一个目录体现。

可以通过docker inspect 命令来检查容器数据卷的情况:

docker inspect [容器id]:
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/home/litufu/container_data",
                "Destination": "/data",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

  默认是读写,可以通过在数据卷后增加权限的方式,修改权限

sudo docker run -v ~/container_data:/data:ro -it ubuntu /bin/bash

  这样的话将无法增加或修改内容,仅可查看数据卷中的内容

二、创建数据卷的另一种方式是通过Dockerfile的方式

VOLUMNE ['/data']

FROM ubuntu
VOLUME ["/dockervolume1" ,"/dockervolume2"]
CMD /bin/bash

  使用docker build -t 建立镜像

使用docker run -it --name v1 建立容器

使用docker inspect v1查看数据卷的情况:

"Mounts": [
            {
                "Type": "volume",
                "Name": "c88eb6d97ec4ec4b6f9ebd6fd225241ec59b8b9e65b9118c85f1fd24c4cd581a",
                "Source": "/var/lib/docker/volumes/c88eb6d97ec4ec4b6f9ebd6fd225241ec59b8b9e65b9118c85f1fd24c4cd581a/_data",
                "Destination": "/datavolume1",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            {
                "Type": "volume",
                "Name": "d00082b1f61fa1acb03c13ab0e1b5744045301c0177b1764b76275c842a57f12",
                "Source": "/var/lib/docker/volumes/d00082b1f61fa1acb03c13ab0e1b5744045301c0177b1764b76275c842a57f12/_data",
                "Destination": "/dockervolume2",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],

  可以看到docker自动在/var/lib/docker/volumes下创建了目录与容器中的目录相对应。

 

posted @ 2018-07-10 16:32  tutu_python  阅读(142)  评论(0)    收藏  举报