zoukankan      html  css  js  c++  java
  • Docker容器数据卷(持久化)

    Docker容器数据卷

    功能:
    容器的持久化
    容器间继承+共享数据

    添加数据卷

    一、直接命令添加

    1.命令:

    docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
    
    [root@aaa /]# docker run -it -v /myDatavolume:/myDatavolume tomcat
    

    容器退出后重新启动,数据卷是否同步 √

    2.命令(带权限)

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

    二、DockerFile添加

    1.file构建

    FROM centos
    VOLUME ["/Data1","Data2"] -- privileged=true
    CMD echo "finished,----success1"
    CMD /bin/bash    
    

    2.docker build 生成新的镜像

    docker build -f /dockerfile路径 -t 标签 .
    

    3.run容器

    docker run -it yz/centos
    
    [root@aaa ~/mydocker]# docker run -it yz/centos1
    WARNING: IPv4 forwarding is disabled. Networking will not work.
    [root@94c424fc5074 /]# ls -l
    total 0
    drwxr-xr-x   2 root root   6 Aug  6 02:27 Data1
    drwxr-xr-x   2 root root   6 Aug  6 02:27 Data2
    

    4.查看宿主机路径

    docker inspect <容器名>
    

    docker数据持久化和数据共享

    数据卷

    数据卷是一个可供多个容器使用的特殊目录,绕过了UFS。
    特性:

    • 1.数据卷可以在容器之间共享和重用
    • 2.对数据卷的修改会立即生效
    • 3.对数据卷的更新,不会影响镜像
    • 4.数据默认会一直存在,即使容器被删除

    创建数据卷

    [root@919 ~]# docker volume create test1
    test1
    

    查看所有的数据卷

    [root@919 ~]# docker volume ls
    DRIVER              VOLUME NAME
    local               b6dd359fa115f77651bccd31160d3badf96532c5d37f2d799f0928c6c6f34167
    local               test1
    

    使用inspect命令查看指定数据卷的信息

    [root@919 ~]# docker  volume inspect test1
    [
        {
            "CreatedAt": "2020-09-20T08:49:35+08:00",
            "Driver": "local",
            "Labels": {},
            "Mountpoint": "/var/lib/docker/volumes/test1/_data",
            "Name": "test1",
            "Options": {},
            "Scope": "local"
        }
    ]
    

    启动一个挂载数据卷的容器,使用docker run命令,一次docker run可以挂载多个数据卷。

    [root@919 ~]# docker run -it --name test1 -v test1:/tmp centos
    [root@5e0138ae7301 /]# df -hT
    Filesystem     Type     Size  Used Avail Use% Mounted on
    overlay        overlay   40G  3.9G   34G  11% /
    tmpfs          tmpfs     64M     0   64M   0% /dev
    tmpfs          tmpfs   1000M     0 1000M   0% /sys/fs/cgroup
    shm            tmpfs     64M     0   64M   0% /dev/shm
    /dev/vda1      ext4      40G  3.9G   34G  11% /tmp
    

    重新打开一个终端查看:

    [root@919 ~]# docker inspect test1
    

    从配置中我们可以看到挂载了一个名为test1的存储卷,并且挂载到容器内的/tmp目录下。

    进入到容器内,创建文件

    [root@5e0138ae7301 /]# cd /tmp/  
    [root@5e0138ae7301 tmp]# echo "11111" > test_2020_09_20 
    

    退出容器,并将该容器删除

    [root@5e0138ae7301 tmp]# exit
    [root@919 ~]# docker rm test1
    

    并创建一个新的容器,并查看是否有刚才创建的文件

    [root@919 ~]# docker run --name centos1 -it -v test1:/tmp centos
    [root@5a3bf5cad675 /]# cd /tmp/
    [root@5a3bf5cad675 tmp]# ls
    ks-script-2n9owwnh  ks-script-xm1o5azb	test_2020_09_20
    [root@5a3bf5cad675 tmp]# cat test_2020_09_20 
    11111
    

    数据卷是被设计用来持久化数据的,它的生命周期独立于容器,docker不会在容器被删除后自动删除数据卷,并且也不存在垃圾回收机制,回收没有任何容器引用的数据卷。
    如果需要删除在删除容器同时移除数据卷,可以在删除容器时使用docker rm -v命令。

    挂载主机目录

    docker持久化存储除了有逻辑卷还有一个是挂载目录

    # 挂载一个主机目录作为数据集,可以使用`--mount`或`-v`指定目录
    [root@919 ~]# docker run -it --name centos1 -v /data:/data centos
    [root@11ff081d5454 ~]# cd /data/
    [root@11ff081d5454 data]# ls
    [root@11ff081d5454 data]# echo "ccku" > 1.txt
    [root@11ff081d5454 data]# exit 
    exit
    [root@919 ~]# cat /data/1.txt 
    ccku
    # 如果使用-v参数如果本地目录不存在docker会自动创建一个目录
    

    查看数据卷的具体信息,可以在主机上使用inspect查看指定容器的信息。

    [root@919 ~]# docker inspect centos1
    ……
            "Mounts": [
                {
                    "Type": "bind",
                    "Source": "/data",
                    "Destination": "/data",
                    "Mode": "",
                    "RW": true,
                    "Propagation": "rprivate"
                }
            ],
    ……
    
    作者:ccku
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有问题或建议,请多多赐教,非常感谢。
  • 相关阅读:
    面试后的一些思考
    NEW关键字的三种用法
    关于反射的初步介绍
    REF和OUT关键字的介绍
    关于WPF中TextBox行的选择与显示的问题
    资源字典——程序集之间的资源共享
    rsync 实现断点续传
    CentOS 7 安装 Git
    使用 docker 拉取镜像和创建容器-nginx
    docker安装 之 ---CentOS 7 系统脚本自动安装
  • 原文地址:https://www.cnblogs.com/ccku/p/13445010.html
Copyright © 2011-2022 走看看