美文网首页dockerDocker
【现学现忘Docker基础】— 21.Docker容器数据卷(一

【现学现忘Docker基础】— 21.Docker容器数据卷(一

作者: 繁华似锦Fighting | 来源:发表于2021-04-10 08:41 被阅读0次

    1、什么是Docker容器数据卷

    Docker容器数据卷,即Docker Volume(卷)

    当Docker容器运行的时候,会产生一系列的数据文件,这些数据文件会在关闭Docker容器时,直接消失的。但是其中产生部分的数据内容,我们是希望能够把它给保存起来,另作它用的。

    所以我们期望:

    • 将应用与运行的环境打包形成容器运行,伴随着容器运行产生的数据,我们希望这些数据能够持久化。
    • 希望容器之间也能够实现数据的共享。

    根据我们之前所学,Docker容器产生的数据,如果不通过docker commit命令生成新的镜像,把数据做为镜像的一部分保存下来。那么当容器删除后,数据自然也就没有了。但为了能保存Docker容器中的数据,Docker为我们提供了卷技术(Volume)。

    总结:Docker容器中产生的数据,同步到本地,这就是卷技术。也就是通过目录的挂载,将容器内的目录,挂载到Linux系统上面,实现容器数据的持久化。

    2、数据卷的作用

    数据卷就是目录或文件,存在于一个或多个容器中,由Docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System(联合文件系统),提供一些用于持续存储或共享数据的特性。

    数据卷的设计目的就是为了Doeker容器中数据的持久化,完全独立于容器的生存周期,Docker不会在容器删除时,删除其挂载的数据卷。

    数据卷

    1. 数据卷可在容器之间共享或重用数据。
    2. 数据卷中的更改可以直接生效。
    3. 数据卷中的更改不会包含在镜像的更新中。
    4. 数据卷的生命周期一直持续到没有容器使用它为止。

    3、数据卷的使用

    使用-v参数给容器添加数据卷,Volume(卷)的首字母。

    我们以centos容器为例进行演示。

    步骤1:下载centos镜像

    # docker pull centos
    [root@192 ~]# docker images
    REPOSITORY            TAG       IMAGE ID       CREATED        SIZE
    centos                latest    300e315adb2f   3 months ago   209MB
    

    步骤2:启动centos镜像,并挂载数据卷

    命令:docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名或镜像ID

    我们希望宿主机/home中的HostDataVolume目录和容器中/home中的ContainerDataVolume目录实现数据卷挂载。

    我们先来查看宿主机/home目录的内容,如下:

    [root@192 ~]# ll /home/
    总用量 0
    

    没有任何文件。

    执行启动centos容器命令:

    # 启动centos容器
    [root@192 ~]# docker run -it -v /home/HostDataVolume:/home/ContainerDataVolume centos /bin/bash
    
    # 查看centos容器中/home目录中内容
    [root@5f63a0fc88c5 /]# ls /home/
    ContainerDataVolume
    
    # 我们可以看到在centos容器的/home目录里,有ContainerDataVolume目录
    # 这个目录肯定是容器启动后,根据
    # -v /home/HostDataVolume:/home/ContainerDataVolume创建的。
    

    我们在来看看宿主机上/home目录的内容,如下:

    [root@192 ~]# ls /home/
    HostDataVolume
    

    发现生成了HostDataVolume文件夹,说明我们数据卷的挂着初步成功。

    提示:挂载的文件夹可以存在也可以不存在,不存在则会自动创建。

    步骤3:验证centos容器数据卷是否挂着成功

    我们可以使用docker inspect命令,来查看centos容器的详细数据。

    [root@192 ~]# docker ps
    CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS 
    5f63a0fc88c5   centos    "/bin/bash"   10 minutes ago   Up 10 minutes            
    
    # 查看centos容器的详细数据
    [root@192 ~]# docker inspect 5f63a0fc88c5
    [
        {
            "Id": "5f63a0fc88c5ef2804a45dff0fbf82ae153f2df04887427a3057668867d64443",
            "Created": "2021-03-18T11:35:14.632025511Z",
    
            ... # 省略
            ... # 省略
    
            "HostConfig": { # 主机配置
                "Binds": [
                    "/home/HostDataVolume:/home/ContainerDataVolume"
                ],
    
             ... # 省略
             },
             ... # 省略
    
             "Mounts": [  # 容器挂载的数据卷
                {
                    "Type": "bind",
                    "Source": "/home/HostDataVolume", # 宿主机内地址
                    "Destination": "/home/ContainerDataVolume", # Docker容器内的地址
                    "Mode": "",             # 两目录就好比同一个目录。
                    "RW": true,  # 支持读写操作
                    "Propagation": "rprivate"
                }
             ],
             "Config": {
                ... # 省略
                
                # 新版的Dodker把Volumes信息放到了Mounts的Json字待串里了
                "Volumes": null,
    
                ... # 省略
             }
             ... # 省略
        }
    ]
    [root@192 ~]# 
    

    看到上面的信息,主要是Mounts属性,说明数据卷挂载已经成功。

    相关文章

      网友评论

        本文标题:【现学现忘Docker基础】— 21.Docker容器数据卷(一

        本文链接:https://www.haomeiwen.com/subject/yfvvcltx.html