Docker学习03

Docker网络


理解Docker0

# 新建容器
[root@ecss6 /]# docker run -d -P --name tomcat01 tomcat
# 查看容器内部网络地址
[root@ecss6 /]# docker exec -it tomcat01 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
78: eth0@if79: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
     
# Linux服务器去ping docker内的网络地址可以成功。
[root@ecss6 /]# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.062 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.051 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.052 ms

# 我们查看服务器的网络地址
[root@ecss6 /]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:16:3e:0e:96:be brd ff:ff:ff:ff:ff:ff
    inet 172.27.218.212/20 brd 172.27.223.255 scope global dynamic eth0
       valid_lft 315099279sec preferred_lft 315099279sec
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:fb:a6:4b:f0 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
79: veth1a75958@if78: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
    link/ether e2:60:2d:5c:65:2a brd ff:ff:ff:ff:ff:ff link-netnsid 0
# 发现容器内和服务器都多了一个网络地址,成对增加
# evth-pair技术就是一对虚拟设备接口,一段连接协议,一段彼此相连。

小结

Docker使用的是Linux的桥接,宿主机中是一个docker容器的网桥 docker0。

Docker中的网络接口都是虚拟的,转发效率高。

容器被删除对应的一对网桥也随之删除!

–link


# 我们启动一个容器tomcat02
[root@ecss6 /]# docker run -d -P --name tomcat02 tomcat
9b47d16918d5ae0e049076425884a5960c3f085589728ba5b6b7e4d5ab6d7430
[root@ecss6 /]# docker ps
CONTAINER ID   IMAGE     COMMAND             CREATED             STATUS             PORTS                     NAMES
9b47d16918d5   tomcat    "catalina.sh run"   3 seconds ago       Up 2 seconds       0.0.0.0:49154->8080/tcp   tomcat02
c0c72fc50e3d   tomcat    "catalina.sh run"   About an hour ago   Up About an hour   0.0.0.0:49153->8080/tcp   tomcat01
# 执行tomcat02 ping tomcat01的命令
[root@ecss6 /]# docker exec -it tomcat02 ping tomcat01
ping: tomcat01: Name or service not known
# 发现无法成功

# 再新建一个容器tomcat03
[root@ecss6 /]# docker run -d -P --name tomcat03 --link tomcat02 tomcat
c209e639bbdc33e93d52cfe5ae8d20bf0946d8d2211236924655b93c61aedee5
# 再次尝试Ping
[root@ecss6 /]# docker exec -it tomcat03 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.083 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=2 ttl=64 time=0.093 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=3 ttl=64 time=0.073 ms
# 发现ping成功了!

# 但是反向,让tomcat02 ping tomcat03发现ping失败:
[root@ecss6 /]# docker exec -it tomcat02 ping tomcat03
ping: tomcat03: Name or service not known

–link其实就是在hosts文件中增加了绑定的地址,但目前已不推荐使用此命令!

自定义网络


查看所有的docker网络

我们可以自定义一个网络:

# 使用如下命令
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

我们在这个网络中新建两个容器

docker run -d -P --name tomcat-net01 --net mynet tomcat
docker run -d -P --name tomcat-net02 --net mynet tomcat
# 然后使用docker network inspect命令查看网络内部信息
docker network inspect mynet

我们使用ping命令去测试与tomcat-net02容器的连接,ping成功!这里使用ip地址。

再使用容器名尝试

同样ping成功!


网络连通


# 测试连通tomcat01和tomcat-net01
docker network connect mynet tomcat01
docker network inspect mynet

可以发现connect命令就是把tomcat01的信息放到了mynet网络下。

结论如果要跨网络操作就需要使用docker network connect连通

结论如果要跨网络操作就需要使用docker network connect连通

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值