• Docker数据卷的创建与应用


    Docker数据卷的创建与应用

    在容器里增加、删除或修改文件,其实都是对可写层里的文件副本进行了操作。在容器关闭后,该可写层也会被删除,对容器的所有修改都会失效,因此需要解决容器内文件持久化的问题。Docker提供了两种方案来实现:

    一、Docker挂载时创建卷:把宿主机文件系统里的目录映射到容器内的目录。如此一来,容器内在该目录里创建的所有文件,都存储到宿主机的对应目录中,在关闭容器后,宿主机的目录依然存在,再次启动容器时还能读取到之前创建的文件,因此实现了容器的文件持久化。当然同时要明白,如果是对镜像自带文件进行了修改,由于镜像是只读的,该修改操作无法在关闭容器时保存下来,除非在修改了文件后构建一个新的镜像。

    1、Docker 挂载卷

    从nginx镜像中拉取一个名为nginx-test01的容器,指定映射到宿主机80端口,将宿主机的/data挂载到容器/usr/share/nginx/html下,从而使宿主机的/data成为挂载卷

    [root@docker ~]# docker run -d -p 80:80 -v /data:/usr/share/nginx/html --name nginx-test01 nginx
    4fdbb1bdfcb36348643f0c2e64a72e9750ee0b2e1b6dbae3d41fcec179209ce6
    

    访问测试:

    [root@docker ~]# curl 192.168.22.135:80

    403 Forbidden


    nginx/1.17.5

    由于/data中并没有主页资源,所以访问结果显示403(在下一步中写入)

    2、宿主机写入数据再次访问验证:

    [root@docker ~]# cd /data
    [root@docker data]# ls
    [root@docker data]# echo 123asd > index.html
    [root@docker data]# curl 192.168.22.135:80
    123asd
    

    3、设置共享卷

    使用同一个卷启动一个新容器并访问测试:

    从nginx镜像中拉取一个名为nginx-test02的容器,指定映射到宿主机8080端口,仍将宿主机的/data挂载到容器/usr/share/nginx/html下,由于/data已作为了容器nginx-test01的挂在卷,在这里又成为了nginx-test02挂载卷,因此宿主机/data成为共享卷。

    [root@docker ~]# docker run -d -p 8080:80 -v /data:/usr/share/nginx/html --name nginx-test02 nginx
    0c609176a6f77df1d467d679f18221de900943ddbc9aba9c589c00b6ed9e6405
    
    [root@docker ~]# curl 192.168.22.135:8080
    123asd

    二、Docker创建卷后挂载:把多台宿主机的磁盘目录通过网络联合为共享存储,然后把共享存储中的特定目录映射给特定的容器,这样容器在重启时,还是能读取到关闭前创建的文件。生产环境中常用NFS作为共享存储方案。

    1、创建一个名为nginx-j01的简单卷并查看卷列表

    [root@docker ~]# docker volume create --name nginx-j01
    nginx-j01
    
    [root@docker ~]# docker volume ls
    DRIVER              VOLUME NAME
    local               nginx-j01
    

    2、查看卷路径

    [root@docker ~]# docker volume inspect nginx-j01
    [
        {
            "CreatedAt": "2020-07-29T17:50:21+08:00",
            "Driver": "local",
            "Labels": {},
            "Mountpoint": "/var/lib/docker/volumes/nginx-j01/_data",
            "Name": "nginx-j01",
            "Options": {},
            "Scope": "local"
        }
    ]
    

    可查看出卷所在路径为/var/lib/docker/volumes/nginx-j01/_data

    3、创建docker共享卷挂载

    从镜像nginx中拉取一个名为nginx-test03的容器,映射宿主机端口9000,将之前创建的共享卷nginx-j01挂载到名为nginx-test03的容器中;将数据写入主页文件,并做访问测试。

    [root@docker ~]# docker run -d -p 9000:80 -v nginx-j01:/usr/share/nginx/html --name nginx-test03 nginx
    c40c65a2060d34319ac33a2263fb11cffdf50075b8efd4209cbd97ee163fb2e7
    
    [root@docker ~]# echo 888 > /var/lib/docker/volumes/nginx-j01/_data/index.html
    
    [root@docker ~]# curl 192.168.22.135:9000
    888
    

    4、实现docker共享卷挂载

    从镜像nginx中拉取一个名为nginx-test04的容器,自动映射一个宿主机端口,将之前创建的共享卷挂载到该容器中,因为该共享卷之前挂载到了nginx-test03又挂载到了nginx-test04中,所以正在成为了共享卷。

    [root@docker ~]# docker run -d -P --volumes-from nginx-test03 --name nginx-test04 nginx
    862e2f3867cb33a91dcc3b3809bde7a0de951a11fea8fea77163db7c39a227b2
    

    --volumes-from # 指定共享卷所在的容器

    5、查看使用的端口并做访问测试

    [root@docker ~]# netstat -lntup
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1104/master
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1015/sshd
    tcp6       0      0 ::1:25                  :::*                    LISTEN      1104/master
    tcp6       0      0 :::32768                :::*                    LISTEN      88573/docker-proxy
    tcp6       0      0 :::9000                 :::*                    LISTEN      55370/docker-proxy
    tcp6       0      0 :::8080                 :::*                    LISTEN      53960/docker-proxy
    tcp6       0      0 :::80                   :::*                    LISTEN      52152/docker-proxy
    tcp6       0      0 :::22                   :::*                    LISTEN      1015/sshd
    
    [root@docker ~]# curl 192.168.22.135:32768
    888
  • 相关阅读:
    2019-2020-1 20175311 20175324 20175330 实验四 外设驱动程序设计
    2019-2020-1 20175311 《信息安全系统设计基础》第十一周学习总结
    2019-2020-1《信息安全系统设计》20175311 20175324 20175330 实验三实时系统
    【2019-2020-1】20175330 20175324 20175311 实验二 固件程序设计
    2018-2019-1 20175311 20175324 20175330 实验一 开发环境的熟悉
    2019-2020-1 20175311胡济栋 《信息安全系统设计基础》第五周学习总结教材学习
    恶意代码分析
    免杀进阶
    Android的安装
    免杀原理与实践
  • 原文地址:https://www.cnblogs.com/elfin/p/16672005.html
Copyright © 2020-2023  润新知