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
原文地址:https://www.cnblogs.com/frankielf0921/p/5821680.html