1. Volume 提供独立于容器之外的持久化存储

    1.1 在容器中的任何改动是不会被保存的,Volume 提供容器的持久化存储。
    1.2 可以提供容器之间数据共享。

  2. 第一种运行方式

    vagrant@ubuntu-xenial:/data/www/d2$ docker run -d --name nginx-1.0  -v /usr/share/nginx nginx     #以守护进程的方式启动一个name为nginx-1.0 指定nginx的解析路径       
    5efac15b31ba860101d49f5864c8c998347aa8ea7a748ba9b3d02d9777519c3a
    vagrant@ubuntu-xenial:/data/www/d2$ docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
    5efac15b31ba        nginx               "/docker-entrypoint.…"   6 seconds ago       Up 5 seconds        80/tcp               nginx-1.0
    44eac38c0fe2        dockerfiel/nginx    "/usr/sbin/nginx -g …"   17 minutes ago      Up 17 minutes       0.0.0.0:80->80/tcp   romantic_ishizaka
    
    
    vagrant@ubuntu-xenial:/data/www/d2$ docker inspect nginx-1.0    # 查看nginx-1.0 的元信息
    [
        {
            "Mounts": [
                {
                    "Type": "volume",
                    "Name": "1c923bce076155554f06705fbfaeaca0c3d6cad3c8211602138cf48c77b13e8b",
                    "Source": "/var/lib/docker/volumes/1c923bce076155554f06705fbfaeaca0c3d6cad3c8211602138cf48c77b13e8b/_data",
                    "Destination": "/usr/share/nginx",                                                                         
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                }
            ]
        }
    ]

    Source:"/var/lib/docker/volumes/1c923bce076155554f06705fbfaeaca0c3d6cad3c8211602138cf48c77b13e8b/_data" #宿主机的这个物理路径
    Destination:"/usr/share/nginx" #挂载到nginx-1.0的解析路径
    下面我们修改一下宿主机的这个物理路径下的文件,然后去进入到nginx-1.0的解析目录看看修改的内容是否一样

    vagrant@ubuntu-xenial:/data/www/d2$ sudo chmod -R 775 /var/lib/docker/volumes/
    vagrant@ubuntu-xenial:/data/www/d2$ cd /var/lib/docker/volumes/1c923bce076155554f06705fbfaeaca0c3d6cad3c8211602138cf48c77b13e8b/_data/html/
    vagrant@ubuntu-xenial:/var/lib/docker/volumes/1c923bce076155554f06705fbfaeaca0c3d6cad3c8211602138cf48c77b13e8b/_data/html$ ls
    50x.html  index.html
    vagrant@ubuntu-xenial:/var/lib/docker/volumes/1c923bce076155554f06705fbfaeaca0c3d6cad3c8211602138cf48c77b13e8b/_data/html$ sudo vi index.html

    清空内容 使用vi命令gg以及dG清空内容
    写入

    docker
    docker
    docker

    进入容器

    vagrant@ubuntu-xenial:/data/www/d2$ docker exec -it   nginx-1.0  /bin/bash    # docker exec -it   容器名称  /bin/bash
    root@5efac15b31ba:/# cat /usr/share/nginx/html/index.html     # 容器内部
    docker
    docker
    docker

    显然验证了。

  3. 其他运行方式

    docker run -d -v $PWD/html:/usr/share/nginx/html nginx-1.0
    
    解释一下:$PWD 就是当前目录
    vagrant@ubuntu-xenial:/data/www/d2$ echo $PWD
    /data/www/d2
    vagrant@ubuntu-xenial:/data/www/d2$
    
  4. 创建一个仅仅有数据的容器并把这个数据容器挂载到其他容器里面去

    vagrant@ubuntu-xenial:/data/www$ sudo mkdir -m 755 data  && cd  data
    
    vagrant@ubuntu-xenial:/data/www/data$ docker create -v $PWD/data:/var/mydata  --name data_container ubuntu   #data_container 挂载到ubuntu
    2f6145f1627a6fa33e2f588c804228515d19cdba87e20ff3b926adcb9b7c8aa7
    
    vagrant@ubuntu-xenial:/data/www/data$ docker run -it --volumes-from data_container ubuntu  /bin/bash
    
    root@b08eb5b02ce0:/# mount
    /dev/sda1 on /var/mydata type ext4 (rw,relatime,data=ordered)      #挂载显示
    
    root@b08eb5b02ce0:/var/mydata# touch index.txt
    root@b08eb5b02ce0:/var/mydata# ls
    index.txt
    
    
    root@b08eb5b02ce0:/var/mydata#
    root@b08eb5b02ce0:/var/mydata# exit
    exit
    vagrant@ubuntu-xenial:/data/www/data$ ls
    data
    vagrant@ubuntu-xenial:/data/www/data$ cd data/
    vagrant@ubuntu-xenial:/data/www/data/data$ ls
    index.txt
    

    仅有数据的容器可以被多个容器挂载,这样就达到了容器间的数据互通

Last modification:October 12, 2020
如果觉得我的文章对你有用,请随意赞赏