盘Docker吗?Docker数据卷管理 +容器互联+端口映射

前言

使用容器时会产生一些日志或其他文件,或是我们需要把容器内的数据进行备份,甚至多个容器之间进行数据共享,这样就会涉及容器的数据管理操作。

容器中管理数据主要有两种方式: **1. 数据卷 ** 2. 数据卷容器

数据卷:挂载宿主系统的存储空间

数据卷容器:挂载容器的存储空间

如果用户需要在容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器,数据卷容器其实是一个普通的容器,专门用来提供数据卷供其它容器挂载

一:数据卷与容器操作

mark

1.1:挂载宿主系统

  • docker run -it -v /宿主机绝对路径:/容器内目录:权限 镜像名

    权限: ro (容器只能查看)

  • 宿主机目录/opt/test 挂载容器中的/data

    [root@docker ~]# docker run -v /opt/test:/data1 --name web1 -it centos /bin/bash
    '//挂载时候,-v 指定的宿主机目录是会自动创建的'
    
  • 测试:

    容器/data目录创建文件test.txt

    [root@019f72a54143 /]# cd data1/
    [root@019f72a54143 data]# echo "this is test" > test.txt
    [root@019f72a54143 data]# exit
    exit
    

    宿主机查看是否同步了文件

    [root@docker ~]# cat /opt/test/test.txt 
    this is test
    

1.2:数据卷容器操作

  • 创建数据卷容器test100

    [root@docker ~]# docker run --name test100 -v /data1 -v /data2 -it centos /bin/bash
    [root@dc17da399a27 /]# exit
    exit
    
    
  • 创建新容器test200并挂载数据卷容器目录

    [root@docker ~]# docker run -it --volumes-from test100 --name test200 centos:7 /bin/bash
    [root@bb8ac2d5b929 /]#
    
  • 测试

    创建测试文件

    [root@bb8ac2d5b929 /]# ls  
    anaconda-post.log  data1  dev  home  lib64  mnt  proc  run   srv  tmp  var
    bin                data2  etc  lib   media  opt  root  sbin  sys  usr
    [root@bb8ac2d5b929 /]# echo "this is test1" > /data1/test1
    [root@bb8ac2d5b929 /]# echo "this is test2" > /data2/test2
    [root@bb8ac2d5b929 /]# exit
    exit
    

    进入数据卷容器test100测试

    [root@docker ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
    bb8ac2d5b929        centos:7            "/bin/bash"              3 minutes ago       Exited (0) 29 seconds ago                       test200
    dc17da399a27        centos              "/bin/bash"              7 minutes ago       Exited (0) 6 minutes ago                        test100
    019f72a54143        centos              "/bin/bash"              21 minutes ago      Exited (0) 20 minutes ago                       web1
    [root@docker ~]# docker start dc17da399a27
    dc17da399a27
    [root@docker ~]# docker exec -it dc17da399a27 /bin/bash
    [root@dc17da399a27 /]# ls
    bin    data2  etc   lib    lost+found  mnt  proc  run	srv  tmp  var
    data1  dev    home  lib64  media       opt  root  sbin	sys  usr
    [root@dc17da399a27 /]# cat /data1/test1 
    this is test1
    [root@dc17da399a27 /]# cat /data2/test2 
    this is test2
    [root@dc17da399a27 /]# 
    
    

二:端口映射

  • 在启动容器时,如果不配置宿主机器与虚拟机的端口映射,外部程序是无法访问虚拟机的,因此我们需要手动进行设置端口映射

  • -p(小p):手动设置端口号

    [root@docker ~]# docker run -d -p 1111:80 httpd:centos
    1e07c582c28d5bf4d19d58a22231e27722649dfb80eb4698487bc11db8d85ade
    
    [root@docker ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                   NAMES
    1e07c582c28d        httpd:centos        "/run.sh"                14 seconds ago      Up 14 seconds               0.0.0.0:1111->80/tcp    youthful_poitras
    
    
  • -P(大p):随机指定端口号

    [root@docker ~]# docker run -d -P httpd:centos
    6d56706835008e43c7aafdfa5a6c3d9eaab99ad2f565287731979c2ccb91e3a2
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                   NAMES
    6d5670683500        httpd:centos        "/run.sh"                5 seconds ago       Up 4 seconds                0.0.0.0:32768->80/tcp   pensive_chaum
    

三:容器互联

  • 创建并运行test001容器,端口号自动映射

    [root@docker ~]# docker run -itd -P --name test001 centos /bin/bash
    3a144d2a670cdecd8e1045d8dc051dfb5fb1c841216258a9fc113c7cbcb20032
    
    
  • 创建并运行test002容器,连接到test001和其通信,端口号自动映射

    [root@docker ~]# docker run -itd -P --name test002 --link test001:test001 centos /bin/bash
    d5a07b81b323edf619e9526f1828c8af560eef626dc550cef1a18d6daaa9b6b0
    
    
  • 测试,进入test002,ping test001

    [root@docker ~]# docker exec -it test002 /bin/bash
    [root@d5a07b81b323 /]# ping test001
    PING test001 (172.17.0.5) 56(84) bytes of data.
    64 bytes from test001 (172.17.0.5): icmp_seq=1 ttl=64 time=0.177 ms
    64 bytes from test001 (172.17.0.5): icmp_seq=2 ttl=64 time=0.147 ms
    64 bytes from test001 (172.17.0.5): icmp_seq=3 ttl=64 time=0.157 ms
    64 bytes from test001 (172.17.0.5): icmp_seq=4 ttl=64 time=0.202 ms
    ^C
    --- test001 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 8ms
    rtt min/avg/max/mdev = 0.147/0.170/0.202/0.026 ms
    
    

谢谢赏阅!如有疑问可评论区交流!

原创文章 172 获赞 97 访问量 5万+

猜你喜欢

转载自blog.csdn.net/CN_TangZheng/article/details/105695613