13.Docker网络:容器互联之自定义网络

我就是我 2022-12-03 01:36 263阅读 0赞

【目录导览】
1.Docker入门:什么是Docker?如何安装Docker?
2.Docker入门:Docker命令
3.Docker实战:Docker部署Nginx
4.Docker实战:Docker部署Tomcat
5.Docker实战:Docker部署MySQL
6.Docker镜像:什么是Docker镜像?Docker镜像加载原理?
7.Docker容器:什么是Docker容器?
8.Docker数据卷:数据交互、数据卷、数据卷容器
9.Docker镜像制作:Commit和DockerFile
10.Docker入门学习回顾小结
11.Docker网络:基础原理&示例
12.Docker网络:容器互联之–link
13.Docker网络:容器互联之自定义网络
14.Docker网络:容器互联之不同网络间的容器互联

1.如何创建自定义网络

step.1 查看当前环境中的网卡信息

  1. # 查看当前环境中的网卡信息
  2. docker network ls
  3. # 内容如下:
  4. [root@iZ2zefjrz9szlt99tuu23fZ wy]# docker network ls
  5. NETWORK ID NAME DRIVER SCOPE
  6. c5440000e49f bridge bridge local
  7. c115f00b8471 host host local
  8. 4fdfe488370c none null local

其中bridge代表的网卡就是docker0

step.2 创建自定义网络

  1. # 建议先清空一下当前Docker环境中的容器,确保在一个干净的网络环境下测试自定义网络
  2. docker rm -f $(docker ps -aq)
  3. # 可以先查看一下docker网络相关命令
  4. docker network --help
  5. # 内容如下:
  6. [root@iZ2zefjrz9szlt99tuu23fZ wy]# docker network --help
  7. Usage: docker network COMMAND
  8. Manage networks
  9. Commands:
  10. connect Connect a container to a network
  11. create Create a network
  12. disconnect Disconnect a container from a network
  13. inspect Display detailed information on one or more networks
  14. ls List networks
  15. prune Remove all unused networks
  16. rm Remove one or more networks
  17. Run 'docker network COMMAND --help' for more information on a command.
  18. # 再看一下create的操作详情
  19. docker network create --help
  20. # 内容如下:
  21. [root@iZ2zefjrz9szlt99tuu23fZ wy]# docker network create --help
  22. Usage: docker network create [OPTIONS] NETWORK
  23. Create a network
  24. Options:
  25. --attachable Enable manual container attachment
  26. --aux-address map Auxiliary IPv4 or IPv6 addresses used by Network driver (default map[])
  27. --config-from string The network from which copying the configuration
  28. --config-only Create a configuration only network
  29. -d, --driver string Driver to manage the Network (default "bridge")
  30. --gateway strings IPv4 or IPv6 Gateway for the master subnet
  31. --ingress Create swarm routing-mesh network
  32. --internal Restrict external access to the network
  33. --ip-range strings Allocate container ip from a sub-range
  34. --ipam-driver string IP Address Management Driver (default "default")
  35. --ipam-opt map Set IPAM driver specific options (default map[])
  36. --ipv6 Enable IPv6 networking
  37. --label list Set metadata on a network
  38. -o, --opt map Set driver specific options (default map[])
  39. --scope string Control the networks scope
  40. --subnet strings Subnet in CIDR format that represents a network segment
  41. # 创建自定义网络
  42. docker network create --driver bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 my_net
  43. # 参数解释:
  44. # --driver bridge 网络模式设置为桥接模式
  45. # --subnet 192.168.0.0/24 子网划分
  46. # --gateway 192.168.0.1 设置网关
  47. # my_net 设置自定义网络的名字
  48. # 内容如下:
  49. [root@iZ2zefjrz9szlt99tuu23fZ wy]# docker network create --driver bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 my_net
  50. d3f68c147eccd5cfd1b82de45258cd16b6fea5b7ec964903c770ce5abb3b7448
  51. # 查看当前环境的网卡信息
  52. docker network ls
  53. # 内容如下:
  54. [root@iZ2zefjrz9szlt99tuu23fZ wy]# docker network ls
  55. NETWORK ID NAME DRIVER SCOPE
  56. c5440000e49f bridge bridge local
  57. c115f00b8471 host host local
  58. d3f68c147ecc my_net bridge local
  59. 4fdfe488370c none null local

可以看到,多了一个my_net网卡信息。

step.3 使用自定义网络

  1. # 先查看自定义网络详细信息
  2. docker network inspect my_net
  3. # 内容如下:
  4. [root@iZ2zefjrz9szlt99tuu23fZ wy]# docker network inspect my_net
  5. [
  6. {
  7. "Name": "my_net",
  8. "Id": "d3f68c147eccd5cfd1b82de45258cd16b6fea5b7ec964903c770ce5abb3b7448",
  9. "Created": "2020-08-31T18:13:33.323655501+08:00",
  10. "Scope": "local",
  11. "Driver": "bridge",
  12. "EnableIPv6": false,
  13. "IPAM": {
  14. "Driver": "default",
  15. "Options": { },
  16. "Config": [
  17. {
  18. "Subnet": "192.168.0.0/24",
  19. "Gateway": "192.168.0.1"
  20. }
  21. ]
  22. },
  23. "Internal": false,
  24. "Attachable": false,
  25. "Ingress": false,
  26. "ConfigFrom": {
  27. "Network": ""
  28. },
  29. "ConfigOnly": false,
  30. "Containers": { },
  31. "Options": { },
  32. "Labels": { }
  33. }
  34. ]
  35. # 启动两个tomcat容器,并使用--net指定使用my_net网络
  36. docker run -d -P --name tomcat-1 --net my_net tomcat
  37. docker run -d -P --name tomcat-2 --net my_net tomcat
  38. # 测试两个容器的网络联通性
  39. # tomcat-1 ping一下tomcat-2
  40. docker exec -it tomcat-1 ping tomcat-2
  41. # 内容如下:
  42. [root@iZ2zefjrz9szlt99tuu23fZ wy]# docker exec -it tomcat-1 ping tomcat-2
  43. PING tomcat-2 (192.168.0.3) 56(84) bytes of data.
  44. 64 bytes from tomcat-2.my_net (192.168.0.3): icmp_seq=1 ttl=64 time=0.061 ms
  45. 64 bytes from tomcat-2.my_net (192.168.0.3): icmp_seq=2 ttl=64 time=0.059 ms
  46. # tomcat-2 ping一下tomcat-1
  47. docker exec -it tomcat-2 ping tomcat-1
  48. # 内容如下:
  49. [root@iZ2zefjrz9szlt99tuu23fZ wy]# docker exec -it tomcat-2 ping tomcat-1
  50. PING tomcat-1 (192.168.0.2) 56(84) bytes of data.
  51. 64 bytes from tomcat-1.my_net (192.168.0.2): icmp_seq=1 ttl=64 time=0.044 ms
  52. 64 bytes from tomcat-1.my_net (192.168.0.2): icmp_seq=2 ttl=64 time=0.064 ms

可以看到tomcat-1容器与tomcat-2容器之间是可以网络互通的

step.4 验证自定义网络是否支持ip变更后,仍能通过容器名通信

  1. # 查看tomcat-2的网络信息
  2. docker exec -it tomcat-2 ip addr
  3. # 内容如下:
  4. [root@iZ2zefjrz9szlt99tuu23fZ wy]# docker exec -it tomcat-2 ip addr
  5. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
  6. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  7. inet 127.0.0.1/8 scope host lo
  8. valid_lft forever preferred_lft forever
  9. 13: eth0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
  10. link/ether 02:42:c0:a8:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
  11. inet 192.168.0.3/24 brd 192.168.0.255 scope global eth0
  12. valid_lft forever preferred_lft forever
  13. # 可以看到tomcat-2容器的ip自动分配的是192.168.0.2
  14. # 查看容器信息
  15. docker ps
  16. # 内容如下:
  17. [root@iZ2zefjrz9szlt99tuu23fZ wy]# docker ps
  18. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  19. dbeccb2f7468 tomcat "catalina.sh run" 20 minutes ago Up 20 minutes 0.0.0.0:32772->8080/tcp tomcat-2
  20. 38a4932d7692 tomcat "catalina.sh run" 20 minutes ago Up 20 minutes 0.0.0.0:32771->8080/tcp tomcat-1
  21. # 清除tomcat-2容器
  22. docker rm -f dbeccb2f7468
  23. # 查看容器信息
  24. docker ps
  25. # 内容如下:
  26. [root@iZ2zefjrz9szlt99tuu23fZ wy]# docker ps
  27. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  28. 38a4932d7692 tomcat "catalina.sh run" 21 minutes ago Up 21 minutes 0.0.0.0:32771->8080/tcp tomcat-1
  29. # 启动一个tomcat-3容器
  30. docker run -d -P --name tomcat-3 --net my_net tomcat
  31. # 查看容器信息
  32. docker ps
  33. # 内容如下:
  34. [root@iZ2zefjrz9szlt99tuu23fZ wy]# docker ps
  35. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  36. 28aabfacad76 tomcat "catalina.sh run" 11 seconds ago Up 10 seconds 0.0.0.0:32773->8080/tcp tomcat-3
  37. 38a4932d7692 tomcat "catalina.sh run" 22 minutes ago Up 22 minutes 0.0.0.0:32771->8080/tcp tomcat-1
  38. # 查看tomcat-3容器的网络信息
  39. docker exec -it tomcat-3 ip addr
  40. # 内容如下:
  41. [root@iZ2zefjrz9szlt99tuu23fZ wy]# docker exec -it tomcat-3 ip addr
  42. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
  43. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  44. inet 127.0.0.1/8 scope host lo
  45. valid_lft forever preferred_lft forever
  46. 15: eth0@if16: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
  47. link/ether 02:42:c0:a8:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
  48. inet 192.168.0.3/24 brd 192.168.0.255 scope global eth0
  49. valid_lft forever preferred_lft forever
  50. # 再重新启动tomcat-2容器
  51. docker run -d -P --name tomcat-2 --net my_net tomcat
  52. # 查看容器信息
  53. docker ps
  54. # 内容如下:
  55. [root@iZ2zefjrz9szlt99tuu23fZ wy]# docker ps
  56. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  57. e6538d8bb4a0 tomcat "catalina.sh run" 3 seconds ago Up 2 seconds 0.0.0.0:32774->8080/tcp tomcat-2
  58. 28aabfacad76 tomcat "catalina.sh run" 3 minutes ago Up 3 minutes 0.0.0.0:32773->8080/tcp tomcat-3
  59. 38a4932d7692 tomcat "catalina.sh run" 25 minutes ago Up 25 minutes 0.0.0.0:32771->8080/tcp tomcat-1
  60. # 查看tomcat-2容器的网络信息
  61. docker exec -it tomcat-2 ip addr
  62. # 内容如下:
  63. [root@iZ2zefjrz9szlt99tuu23fZ wy]# docker exec -it tomcat-2 ip addr
  64. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
  65. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  66. inet 127.0.0.1/8 scope host lo
  67. valid_lft forever preferred_lft forever
  68. 17: eth0@if18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
  69. link/ether 02:42:c0:a8:00:04 brd ff:ff:ff:ff:ff:ff link-netnsid 0
  70. inet 192.168.0.4/24 brd 192.168.0.255 scope global eth0
  71. valid_lft forever preferred_lft forever
  72. # 可以看到tomcat-2容器的ip已经变成192.168.0.4了
  73. # 此时再用tomcat-1 ping一下tomcat-2
  74. docker exec -it tomcat-1 ping tomcat-2
  75. # 内容如下:
  76. [root@iZ2zefjrz9szlt99tuu23fZ wy]# docker exec -it tomcat-1 ping tomcat-2
  77. PING tomcat-2 (192.168.0.4) 56(84) bytes of data.
  78. 64 bytes from tomcat-2.my_net (192.168.0.4): icmp_seq=1 ttl=64 time=0.067 ms
  79. 64 bytes from tomcat-2.my_net (192.168.0.4): icmp_seq=2 ttl=64 time=0.060 ms

至此,可以验证,自定义网络是支持ip变化后,仍然可以通过容器名进行网络互通的。

2.自定义网络与–link的区别































区别点 自定义网络 –link
容器间通信方式 容器名、ip 容器名、ip
通信方向 双向 单向
是否支持ip动态变化 支持 不支持
是否具备网络隔离性 具备 不具备

3.自定义网络适用场景

  • 自定义网络可以理解为构建了一个局域网,适用于一个集群
  • 不同的集群使用不同的(自定义)网络,保证集群的网络隔离性,更安全

eg: redis集群和mysql集群可以使用各自的自定义网络,互不干扰。

发表评论

表情:
评论列表 (有 0 条评论,263人围观)

还没有评论,来说两句吧...

相关阅读