Docker应用-自定义网络连接

Docker网络

网络的基础配置

大量的互联网应用服务包括多个服务组件,这往往需要多个容器之间通过网络通信进行互相配合。

目前Docker提供了映射容器端口到宿主机主机和容器互联机制来为容器提供网络服务:

  1. 使用端口映射机制来将容器内应用服务提供给外部网络(在之前的博客已经提到过)
  2. 通过容器互联系统让多个容器之间进行快捷的网络通信

对于一个微服务而言,database uri=ip,如果docker容器重启那么ip也会更改,所以我们希望可以通过名字来访问容器

举个例子:

# 启动两个tomcat容器
[root@VM-4-17-centos home]# docker run -d -P --name tomcat01 tomcat
[root@VM-4-17-centos home]# docker run -d -P --name tomcat02 tomcat
# 直接通过ping名称的方式进行测试
[root@VM-4-17-centos home]# docker exec -it tomcat02 ping tomcat01

在这里插入图片描述

如何解决这个问题docker提供了方案。容器的连接(link),它会在源和接受容器直接建立一个隧道。

# 通过link的方式再启动一个容器
[root@VM-4-17-centos home]# docker run -d -P --name tomcat04 --link tomcat02 tomcat
#再尝试ping一下,可以解决
[root@VM-4-17-centos tomcat]# docker exec -it tomcat04 ping tomcat02
PING tomcat02 (172.17.0.3) 56(84) bytes of data.
64 bytes from tomcat02 (172.17.0.3): icmp_seq=1 ttl=64 time=0.117 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=2 ttl=64 time=0.076 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=3 ttl=64 time=0.081 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=4 ttl=64 time=0.064 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=5 ttl=64 time=0.076 ms

上面我们可以看到tomcat04可以ping通tomcat02,但是返回来是不行的,具体原因进入容器查看

[root@VM-4-17-centos tomcat]# docker exec -it tomcat04 cat /etc/hosts

在这里插入图片描述

当我们使用–link时源容器会在hosts文件中绑定目标容器的ip地址,反观tomcat02是没有的

在这里插入图片描述

但是在生产实际中不建议使用–link。

自定义网络

查看所有的docker网络

在这里插入图片描述

网络模式

  1. bridge:桥接模式(默认)
  2. none:不配置网络
  3. host:和宿主机共享网络
  4. container:容器网络连通

自己创建一个docker网络

# --subnet是子网掩码
# --driver是驱动模式,默认是bridge
# --gateway是网关
[root@VM-4-17-centos tomcat]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

# 查看
[root@VM-4-17-centos tomcat]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
a78167e0dd78   bridge    bridge    local
5780db889845   host      host      local
b97d4c33f32a   mynet     bridge    local
b2642377e6c3   none      null      local

# docker network inspect mynet查看具体信息

在这里插入图片描述

不适用–link启动tomcat

#启动两个tomcat容器
[root@VM-4-17-centos tomcat]# docker run -d -P --name tomcat01 --net mynet diytomcat
[root@VM-4-17-centos tomcat]# docker run -d -P --name tomcat02 --net mynet diytomcat

#再次查看网络信息

在这里插入图片描述

启动完之后再尝试ping连接

#通过ip
[root@VM-4-17-centos tomcat]# docker exec -it tomcat01 ping 192.168.0.3
PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=0.107 ms
64 bytes from 192.168.0.3: icmp_seq=2 ttl=64 time=0.079 ms
64 bytes from 192.168.0.3: icmp_seq=3 ttl=64 time=0.080 ms
64 bytes from 192.168.0.3: icmp_seq=4 ttl=64 time=0.078 ms
#通过名称
[root@VM-4-17-centos tomcat]# docker exec -it tomcat01 ping tomcat02
PING tomcat02 (192.168.0.3) 56(84) bytes of data.
64 bytes from tomcat02.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.069 ms
64 bytes from tomcat02.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.078 ms
64 bytes from tomcat02.mynet (192.168.0.3): icmp_seq=3 ttl=64 time=0.082 ms
64 bytes from tomcat02.mynet (192.168.0.3): icmp_seq=4 ttl=64 time=0.078 ms

通过自定义网络docker帮我们维护好了对应的关系,这样做有一个好处就是不同的集群使用不同的网络,保证集群的安全。

网络连通

# 通过docker默认网卡启动两个tomcat容器
[root@VM-4-17-centos tomcat]# docker run -d -P --name tomcatd01 tomcat
[root@VM-4-17-centos tomcat]# docker run -d -P --name tomcatd02 tomcat

如何将tomcatd01和tomcat01连通起来?

在这里插入图片描述

# 使用docker network connect
[root@VM-4-17-centos tomcat]# docker network connect --help

Usage:  docker network connect [OPTIONS] NETWORK CONTAINER

Connect a container to a network

Options:
      --alias strings           Add network-scoped alias for the container
      --driver-opt strings      driver options for the network
      --ip string               IPv4 address (e.g., "172.30.100.104")
      --ip6 string              IPv6 address (e.g., "2001:db8::33")
      --link list               Add link to another container
      --link-local-ip strings   Add a link-local address for the container

打通tomcatd01 --> mynet

# 建立连接
[root@VM-4-17-centos tomcat]# docker network connect mynet tomcatd01
# 查看mynet信息
[root@VM-4-17-centos tomcat]# docker network inspect mynet

在这里插入图片描述

连通的最终效果就是将tomcatd01放到了mynet网络下,这就是所谓的一个容器两个ip。

尝试ping连接tomcat01

[root@VM-4-17-centos tomcat]# docker exec -it tomcatd01 ping tomcat01
PING tomcat01 (192.168.0.2) 56(84) bytes of data.
64 bytes from tomcat01.mynet (192.168.0.2): icmp_seq=1 ttl=64 time=0.095 ms
64 bytes from tomcat01.mynet (192.168.0.2): icmp_seq=2 ttl=64 time=0.077 ms
64 bytes from tomcat01.mynet (192.168.0.2): icmp_seq=3 ttl=64 time=0.077 ms
64 bytes from tomcat01.mynet (192.168.0.2): icmp_seq=4 ttl=64 time=0.077 ms

64 time=0.077 ms
64 bytes from tomcat01.mynet (192.168.0.2): icmp_seq=3 ttl=64 time=0.077 ms
64 bytes from tomcat01.mynet (192.168.0.2): icmp_seq=4 ttl=64 time=0.077 ms


假如我们需要跨网络操作,就需要使用docker connect连通,如上操作即可!
  • 24
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拉霍拉卡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值