• 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
    --------------------------
  • 相关阅读:
    C++ Stream(串流)迭代器
    C++ deque const_iterator const_reverse_iterator运用实例
    C++ iter_swap()运用实例
    C++ distance()处理迭代器之间的距离
    数据库历险记(二) | Redis 和 Mecached 到底哪个好?
    数据库历险记(一) | MySQL这么好,为什么还有人用Oracle?
    面对海量请求,缓存设计还应该考虑哪些问题?
    90后小伙利用支付宝漏洞被抓, 我为什么拍手叫好?
    从抖音关闭评论,看服务治理的重要性
    优秀程序员具备的高效习惯,你具备吗?
  • 原文地址:https://www.cnblogs.com/Mr-Wenyan/p/9555188.html
Copyright © 2020-2023  润新知