zoukankan      html  css  js  c++  java
  • docker数据管理

    /* 
        如果我们只是单单在容器里写东西,那我们将容器关闭或是退出时,很可能内容就已经不存在了。 -- 特别是MySQL之类的数据。
    
        为了对数据进行很好的管理,
    
                                        我们可以将宿主机的目录挂载到容器里,
    
        就相当于 == 我们直接在此目录里写数据。
    */
    /* 1.挂载本地的目录到容器里*/
    [root@localhost ~]# mkdir /data/ //将宿主机的/data/与容器的/data1/相挂载在centos容器里 [root@localhost ~]# docker run -itd -v /data/:/data1/ centos bash 086aa99f34aa0b39f71bedab8dca92b48be35a3f99e680f09fd37968d2f87c5c //实验:在宿主机里创建新文档,写入新内容 [root@localhost ~]# touch /data/1.txt [root@localhost ~]# echo "111hjsdhs" > /data/1.txt //进入容器 [root@localhost ~]# docker exec -it 086 bash [root@086aa99f34aa /]# ls /data1/ //拥有与宿主机里内容相同的文档 1.txt [root@086aa99f34aa /]# cat /data1/1.txt 111hjsdhs //实验2: 再在宿主机里创建新文档 [root@086aa99f34aa /]# touch /data1/2.txt [root@086aa99f34aa /]# exit //回到宿主机,新文档更新 [root@localhost ~]# ls /data/ 1.txt 2.txt //关闭容器,数据依然存在 [root@localhost ~]# docker stop 086 086 [root@localhost ~]# ls /data/ 1.txt 2.txt //删除容器,数据依然存在 [root@localhost ~]# docker rm 086 086 [root@localhost ~]# ls /data/ 1.txt 2.txt
    /* 2.挂载数据卷 */
    [root@localhost ~]# docker run -itd -v /data/:/data1/ centos bash
    30c1fec5df6a2cbcfa4de6a7c5c074ed00bd42d4b9b3ad28ab9808acfd3d0d9b
    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    30c1fec5df6a        centos              "bash"              5 seconds ago       Up 4 seconds                            stoic_bartik
    
    /* 通过容器name进入容器
    
        容器name可以利用 -m来自定义 ,如果不自定义则随机定义
    */
    
    [root@localhost ~]# docker run -itd --volumes-from stoic_bartik centos bash
    ad8cca1e071122b33677255e82709e2c7fa51f3062a8333f61e9e384c3e1a4a7
    
    //就会新生成一个有联系的容器
    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
    ad8cca1e0711        centos              "bash"              8 seconds ago        Up 7 seconds                            romantic_morse
    30c1fec5df6a        centos              "bash"              About a minute ago   Up About a minute                       stoic_bartik
    
    //进入利用 “容器name" 创建的容器
    [root@localhost ~]# docker exec -it ad8 bash
    [root@ad8cca1e0711 /]# df -h
    Filesystem                                                                                        Size  Used Avail Use% Mounted on
    /dev/mapper/docker-253:0-785932-ad8cca1e071122b33677255e82709e2c7fa51f3062a8333f61e9e384c3e1a4a7  9.8G  231M  9.0G   3% /
    tmpfs                                                                                             495M     0  495M   0% /dev
    shm                                                                                                64M     0   64M   0% /dev/shm
    /dev/mapper/VolGroup-lv_root                                                                       18G  2.6G   14G  16% /data1
    [root@ad8cca1e0711 /]# ls /data1/
    1.txt  2.txt
    
    //在容器里新创建文档
    [root@ad8cca1e0711 /]# touch /data1/3.txt
    [root@ad8cca1e0711 /]# ls -l /data1/
    total 4
    -rw-r--r--. 1 root root 10 Aug 30 09:04 1.txt
    -rw-r--r--. 1 root root  0 Aug 30 09:04 2.txt
    -rw-r--r--. 1 root root  0 Aug 30 09:31 3.txt
    [root@ad8cca1e0711 /]# exit
    
    //宿主机也更新了新文档
    [root@localhost ~]# ls /data/
    1.txt  2.txt  3.txt
    
    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    ad8cca1e0711        centos              "bash"              3 minutes ago       Up 3 minutes                            romantic_morse
    30c1fec5df6a        centos              "bash"              4 minutes ago       Up 4 minutes                            stoic_bartik
    
    //进入另外一个相同的容器
    [root@localhost ~]# docker exec -it 30c bash
    [root@30c1fec5df6a /]# df -h
    Filesystem                                                                                        Size  Used Avail Use% Mounted on
    /dev/mapper/docker-253:0-785932-30c1fec5df6a2cbcfa4de6a7c5c074ed00bd42d4b9b3ad28ab9808acfd3d0d9b  9.8G  231M  9.0G   3% /
    tmpfs                                                                                             495M     0  495M   0% /dev
    shm                                                                                                64M     0   64M   0% /dev/shm
    /dev/mapper/VolGroup-lv_root                                                                       18G  2.6G   14G  16% /data1
    
    //同样也更新的文档
    [root@30c1fec5df6a /]# ls /data1/
    1.txt  2.txt  3.txt
    [root@30c1fec5df6a /]#
    /* 3.定义数据卷容器 */
    /*
        作用 : 只为多个容器之间共享数据    -- 类似于Linux里的NFS
              
           搭建专门的数据卷容器,然后把此数据卷容器挂载到其他的容器里
    */
    
    //1. 使用了“frankie” 作为command,产生了错误,但是执行成功
    [root@localhost ~]# docker run -itd -v /data/ --name centos_test centos frankie
    1f232f72aa9345a6ce1bbb729e8885de11ba18825051a41f86ed5c08dbf66a7b
    Error response from daemon: Cannot start container 1f232f72aa9345a6ce1bbb729e8885de11ba18825051a41f86ed5c08dbf66a7b: [8] System error: exec: "frankie": executable file not found in $PATH
    [root@localhost ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                CREATED              STATUS                      PORTS               NAMES
    1f232f72aa93        centos              "frankie"              About a minute ago                                                   centos_test
    
    
    //2.依然使用“bash”作为command
    [root@localhost ~]# docker run -itd -v /data/ --name centos_test centos bash
    76eaea452f3f0155777560bb5ec61ccbc36d57a282226419d5390d2335c42598
    [root@localhost ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                      PORTS               NAMES
    76eaea452f3f        centos              "bash"                 5 seconds ago       Up 4 seconds                                    centos_test
    
    ======================================
    //进入容器
    // /data/目录下什么东西都没有
    [root@localhost ~]# docker exec -it centos_test bash
    [root@76eaea452f3f /]# ls /data/
    [root@76eaea452f3f /]# exit
    
    //而在宿主机的/data/目录下还存在文件
    [root@localhost ~]# ls /data/
    1.txt  2.txt  3.txt
    
    /*
        结论: -v + 目录    --name + 自定义的镜像名
    
        此方式 -v 选项相当于 == 为容器里创建了一个新的目录,以方便共享数据
    
    */
    //继续实验
    
    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    ac7891f5926b        centos              "bash"              6 minutes ago       Up 6 minutes                            angry_mcclintock
    [root@localhost ~]# docker exec -it ac7 bash
    [root@ac7891f5926b /]# df -h
    Filesystem                                                                                        Size  Used Avail Use% Mounted on
    /dev/mapper/docker-253:0-785932-ac7891f5926b03efefe34936c052d3297b10422e5a37c94dcbda6bb7ae23d497  9.8G  231M  9.0G   3% /
    tmpfs                                                                                             495M     0  495M   0% /dev
    shm                                                                                                64M     0   64M   0% /dev/shm
    /dev/mapper/VolGroup-lv_root                                                                       18G  2.6G   14G  16% /data
    
    //在数据卷的容器里进行创建文档
    [root@ac7891f5926b /]# ls /data/
    [root@ac7891f5926b /]# mkdir /data/test
    [root@ac7891f5926b /]# mkdir /data/test/frankie
    [root@ac7891f5926b /]# touch frankie.txt
    [root@ac7891f5926b /]# exit
    
    //进入初始的容器里,新文档更新
    [root@localhost ~]# docker exec -it centos_test bash
    [root@76eaea452f3f /]# ls /data/
    test
    [root@76eaea452f3f /]# ls /data/test/
    frankie
    
    /*
            可以利用最初始的容器进行创建镜像
    
            这些镜像就可以共享到数据卷容器的数据。
    
           -- 可以利用脚本进行批量创建
    
    */ 
    [root@localhost ~]# docker run -itd --volumes-from centos_test --name=web2 centos bash
    e9f404f7b61d5093e9b57e10551561179a21c6d36c4d3673f12b34ab2d44582a
    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    e9f404f7b61d        centos              "bash"              7 seconds ago       Up 5 seconds                            web2
    [root@localhost ~]# docker run -itd --volumes-from centos_test --name=web3 centos bash
    7e015daeb32d15462725f47ab9d344e5b88ae7e1efcd7e385cc8ae6a1444c6e1
  • 相关阅读:
    lua中的冒号和点
    NuGet使用简要说明
    C#浅谈类实体与DataTable执行效率
    win8 使用技巧
    Bitnami Redmine 中文附件名 报错修复
    Markdown 测试
    几种常用网页返回顶部代码
    文字超出隐藏并显示省略号
    手机正则写法
    安卓内存管理相关关键字
  • 原文地址:https://www.cnblogs.com/frankielf0921/p/5821680.html
Copyright © 2011-2022 走看看