docker中的数据交互

数据卷(data volumes)

容器与宿主之间的数据交互
数据卷的操作类似于linux中对文件和目录的mount操作。在宿主主机于docker容器之间,数据卷的交互类似于在容器中新建一个文件目录,将宿主机器的某个文件目录挂载到容器的

数据卷操作

--------------------------
# 查看宿主目录
[root@VM_191_181_centos docker]# pwd
/doc/docker
# 在宿主目录中新建文件
[root@VM_191_181_centos docker]# echo "this is a docker volumes document" >> vol.md
[root@VM_191_181_centos docker]# ls
vol.md
# 创建容器和数据卷
# --name指定容器名字  -d表示后台运行 -v声明数据卷
[root@VM_191_181_centos docker]# docker run -d -i --name data_volumes_test -v /doc/docker:/web_data ubuntu /bin/bash
ff1e3dffb525bc61eaa1f0e927225934aa6d15960f753d6e7f49fdb2cc8e666e
# 查看容器运行情况
[root@VM_191_181_centos docker]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
ff1e3dffb525        ubuntu              "/bin/bash"         3 seconds ago       Up 2 seconds                            data_volumes_test
# 进入容器
[root@VM_191_181_centos docker]# docker exec -it ff1e3dffb525 /bin/bash
# 查看容器中数据卷中的数据,可以看到与宿主/doc/docker中的文件相同
root@ff1e3dffb525:/# pwd
/
root@ff1e3dffb525:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  web_data
root@ff1e3dffb525:/# cd web_data
root@ff1e3dffb525:/web_data# ls
vol.md
root@ff1e3dffb525:/web_data# cat vol.md
this is a docker volumes document

# 将宿主中的.bash_history挂载到docker的数据卷,在容器中就可以实时查看宿主主机的命令操作
docker run -d -i --name history -v /root/.bash_history:/root/.bash_history ubuntu /bin/bash
--------------------------

数据卷容器(data volumes dontainers)

容器与容器之前的数据交互
新建一个只用来数据交互的容器,其他容器之间的数据交互全都通过这个数据卷容器

数据卷容器操作

--------------------------
# 新建数据卷容器
[root@VM_191_181_centos docker]# docker run -it --name dbdata -v /dbdata ubuntu
root@cd8e0d1da82c:/# ls
bin  boot  dbdata  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
# 新建db1和db2容器
# 并用 --volumes-from 来挂载dbdata容器中的数据卷
[root@VM_191_181_centos docker]# docker run -di --volumes-from dbdata --name db1 ubuntu
a1ef927dc105617bc3a732ce66e389085780c51a91dde40dc0b2e741be614305
[root@VM_191_181_centos docker]# docker run -di --volumes-from dbdata --name db2 ubuntu
02430c33161fe6288fdab8a556c2c90917ad3585ed0a7433c8d73b10ea690954
# 查看后台运行的容器
[root@VM_191_181_centos docker]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
02430c33161f        ubuntu              "/bin/bash"         28 seconds ago      Up 28 seconds                           db2
a1ef927dc105        ubuntu              "/bin/bash"         34 seconds ago      Up 33 seconds                           db1
# 进入db1容器,并查看是否已挂载dbdata
[root@VM_191_181_centos docker]# docker exec -it 02430c33161f /bin/bash
root@02430c33161f:/# ls
bin  boot  dbdata  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
# 进入db2容器,并查看是否已挂载dbdata
[root@VM_191_181_centos docker]# docker exec -it a1ef927dc105 /bin/bash
root@a1ef927dc105:/# ls
bin  boot  dbdata  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
# 在db1的数据卷中新建文件
root@02430c33161f:/# cd dbdata/
root@02430c33161f:/dbdata# ls
root@02430c33161f:/dbdata# echo "create vol-db1.md in db1" >> vol-db1.md
# 在db2的数据卷中查看
root@a1ef927dc105:/dbdata# ls
vol-db1.md
root@a1ef927dc105:/dbdata# cat vol-db1.md
create vol-db1.md in db1
# 删除容器,并在删除最后一个容器是用 -v 参数删除数据卷
[root@VM_191_181_centos docker]# docker rm 02430c33161f
02430c33161f
[root@VM_191_181_centos docker]# docker rm a1ef927dc105
a1ef927dc105
[root@VM_191_181_centos docker]# docker rm -v cd8e0d1da82c
cd8e0d1da82c
--------------------------
原文地址:https://www.cnblogs.com/Mr-Wenyan/p/9555188.html