zoukankan      html  css  js  c++  java
  • `docker数据持久化volume和bind mounts两种方式

    将数据从宿主机到容器的三种方式:
    1,volumes:docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)保存数据的最佳方式
    2,bind mounts 将宿主机上的任意位置的文件或者目录挂在到容器 (--mount type=bind,src=源目录,dst=目标目录)
    3,tmpfs:挂载存储在主机系统的内存中,而不会写入主机的文件系统。如果不希望将数据持久存储在任何位置,可以使用
    tmpfs,同时避免写入容器可写层提高性能。
    
    
    =====================Volume================================
    方式一:
    $ docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
    c9ba6a9cecc6        nginx               "nginx -g 'daemon of…"   About an hour ago   Up About an hour    0.0.0.0:8080->80/tcp   nginx01
    root@bogon: ~ 14:23:51
    $ docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    hctest/nginx        latest              881bd08c0b08        8 days ago          109MB
    nginx               latest              881bd08c0b08        8 days ago          109MB
    centos              7                   1e1148e4cc2c        3 months ago        202MB
    java                8                   d23bdf5b1b1b        2 years ago         643MB
    root@bogon: ~ 14:23:56
    $ docker volume ls
    DRIVER              VOLUME NAME
    root@bogon: ~ 14:24:00
    $ docker volume create nginx-vol
      inx-vol
    ▽oot@bogon: ~ 14:24:14
    $ docker volume ls
    DRIVER              VOLUME NAME
    local               nginx-vol
    root@bogon: ~ 14:24:22
    $ docker run -itd --name nginx02 -p 8081:80 -h nginx01 -v nginx-vol:/usr/share/nginx/html nginx
    6e5a0cf4451cb71a78e41d7dcfd2a60181208d7b6ca6f4c05d16434dcc674ba7
    root@bogon: ~ 14:25:05
    $ docker volume inspect nginx-vol
    [
        {
            "CreatedAt": "2019-03-13T14:25:04+08:00",
            "Driver": "local",
            "Labels": {},
            "Mountpoint": "/var/lib/docker/volumes/nginx-vol/_data",
            "Name": "nginx-vol",
            "Options": {},
            "Scope": "local"
        }
    ]
    root@bogon: ~ 14:33:43
    $ cd /var/lib/docker/volumes/nginx-vol/_data
    root@bogon: /var/lib/docker/volumes/nginx-vol/_data 14:33:48
    $ ls
    50x.html  index.html
    root@bogon: /var/lib/docker/volumes/nginx-vol/_data 14:33:49
    $ vim index.html 
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
        body {
             35em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
        }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>
    
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    
    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>
    root@bogon: /var/lib/docker/volumes/nginx-vol/_data 14:34:11
    $ echo "aa" >index.html 
    root@bogon: /var/lib/docker/volumes/nginx-vol/_data 14:35:42
    $ docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
    6e5a0cf4451c        nginx               "nginx -g 'daemon of…"   10 minutes ago      Up 10 minutes       0.0.0.0:8081->80/tcp   nginx02
    c9ba6a9cecc6        nginx               "nginx -g 'daemon of…"   2 hours ago         Up 2 hours          0.0.0.0:8080->80/tcp   nginx01
    root@bogon: /var/lib/docker/volumes/nginx-vol/_data 14:36:00
    $ curl 127.0.0.1:8081
    aa
    root@bogon: /var/lib/docker/volumes/nginx-vol/_data 14:36:02
    $ 
    方式二:
    $ docker run -itd -p 8082:80 --mount src=nginx-vol2,dst=/usr/share/nginx/html --name nginx03 nginx
    6254f743f799b52e82516767989e995d08601383188d0e4fbda07cbea3ca858f
    root@bogon: /var/lib/docker/volumes/nginx-vol/_data 14:38:47
    $ docker volume inspect nginx-vol2
    [
        {
            "CreatedAt": "2019-03-13T14:38:32+08:00",
            "Driver": "local",
            "Labels": null,
            "Mountpoint": "/var/lib/docker/volumes/nginx-vol2/_data",
            "Name": "nginx-vol2",
            "Options": null,
            "Scope": "local"
        }
    ]
    root@bogon: /var/lib/docker/volumes/nginx-vol/_data 14:38:53
    $ 
    
    注意:
    1,如果没指定卷,自动创建
    2,建议使用--mount,比较通用
    
    
    
    
    =====================Bind Mounts================================
    
    root@bogon: /data/www 12:55:34
    $ docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    root@bogon: /data/www 12:55:36
    $ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    hctest/nginx        latest              881bd08c0b08        8 days ago          109MB
    nginx               latest              881bd08c0b08        8 days ago          109MB
    centos              7                   1e1148e4cc2c        3 months ago        202MB
    java                8                   d23bdf5b1b1b        2 years ago         643MB
    root@bogon: /data/www 12:55:39
    $ mkdir /data/www -p
    root@bogon: /data/www 12:55:49
    $ cat /data/www/index.html 
    sadasdad
    root@bogon: /data/www 12:57:17
    $ docker run -itd --name nginx01 -p 8080:80 --mount type=bind,src=/data/www,dst=/usr/share/nginx/html nginx   
    c9ba6a9cecc6bb8b241a15841fe1889f56a9c92e315017eb6c68fb0ef0c5bff4
    root@bogon: /data/www 12:57:32
    $ docker ps -a 
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
    c9ba6a9cecc6        nginx               "nginx -g 'daemon of…"   9 seconds ago       Up 8 seconds        0.0.0.0:8080->80/tcp   nginx01
    root@bogon: /data/www 12:57:41
    $ docker exec -it c9ba6a9cecc6  bash
    root@c9ba6a9cecc6:/# cat /usr/share/nginx/html/index.html 
    sadasdad
    root@c9ba6a9cecc6:/# 
    注意:
    1,如果源文件目录没有存在(也就是src),不会自动创建,会抛出一个错误
    2,如果挂载目标容器中为非空目录,则该目录源文件会被隐藏。
    
    volume
    总结:
    1,多个运行的容器之间共享数据,因为挂载点如果一样存储是一样的
    2,当容器停止或者删除,该卷依然存在,数据不会丢失
    3,多个容器可以同时挂载相同的卷
    4,当明确删除卷时,卷才会被删除
    5,将容器数据存储在远程主机上或者其他存储
    6,将数据从一台docker主机迁移到另一台时,先停止容器,然后备份卷的目录(/var/lib/docker/volumes/)
    
    Bind Mounts
    总结:
    1,从主机共享配置文件到容器,默认情况下,挂载主机/etc/resolv.conf到每个容器,提供dns解析
    2,在docker主机上开发环境和容器之间共享源代码,例如,可以将maven tag目录挂在到容器中,每次在docker主机上构建maven项目时,容器都可以访问构建的项目包
    3,当docker主机的文件或者目录结构保证与容器所需的绑定挂在一致时
    
    区别:
    volume 是docker的宿主机文件系统一部分,只有docker可以进行更改,其他进程不能修改
    bind mounts 是挂载在宿主机文件系统的任意位置,除了docker所有进程都可以进行修改、
  • 相关阅读:
    Python 迭代器&生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发
    python--如何在线上环境优雅的修改配置文件?
    Python补充--Python内置函数清单
    python3--open函数
    内置函数--map,filter,reduce
    Python内置函数—bytearray
    python lambda表达式简单用法
    Python浅拷贝copy()与深拷贝deepcopy()区别
    点击复制
    eval(function(p,a,c,k,e,d){e=function(c)加解密
  • 原文地址:https://www.cnblogs.com/Carr/p/10524357.html
Copyright © 2011-2022 走看看