14-Docker网络

#删除已有的所有容器
docker rm -f $(docker ps -aq)
#删除已有的所有镜像
docker rmi -f $(docker images -aq)
docker run -d -P --name tomcat01 tomcat
#进入这个容器并执行ip addr
[root@iZuf6bqi9d493xdldgnd5eZ ~]# 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
4: eth0@if5: <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

#在虚拟机中ping 容器内部ip
[root@iZuf6bqi9d493xdldgnd5eZ ~]# 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.121 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.049 ms
linux可以ping通容器内部ip

linux中docker0表示为路由器地址,只要安装了docker,就会有一个网卡docker0,桥接模式
[root@iZuf6bqi9d493xdldgnd5eZ ~]# ip a
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:43:3a:61:53 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

#新运行一个容器tomcat02       
[root@iZuf6bqi9d493xdldgnd5eZ ~]# docker run -d -P --name tomcat02 tomcat
239aaf1ac9e99540ae081a52d92b0910355acc0c0a21509763f6f19d134ac2af
[root@iZuf6bqi9d493xdldgnd5eZ ~]# 
[root@iZuf6bqi9d493xdldgnd5eZ ~]# docker exec -it tomcat02 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
6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
[root@iZuf6bqi9d493xdldgnd5eZ ~]# ping 172.17.0.3
PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.124 ms
64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.050 ms

#容器内ping是互通的
[root@iZuf6bqi9d493xdldgnd5eZ ~]# docker exec -it tomcat01 bash
root@7b37eb244e27:/usr/local/tomcat# 
root@7b37eb244e27:/usr/local/tomcat# ip a
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
4: eth0@if5: <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
       
ping 172.17.0.3
PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.102 ms
64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.081 ms
64 bytes from 172.17.0.3: icmp_seq=3 ttl=64 time=0.066 ms

#tomcat01和tomcat02是公用的一个路由器docker0
#所有的容器在不指定网络的情况下都是默认docker0路由的
veth-pair技术
在这里插入图片描述
在这里插入图片描述

docker exec -it tomcat01 bash
docker exec -it tomcat02 bash

#直接pingdocker02容器名网络不通
ping docker02
ping: docker02: Name or service not known

#--link 将tomcat02的网络与tomcat01的网络连接起来
docker run -d -P --name tomcat02 --link tomcat01 tomcat
9f7b64ea4325eb6a3e755228ebe12ddbefd819db0c2b82393caa68f422749176

#直接ping docker01容器名,网络已经通了
ping tomcat01
PING tomcat01 (172.17.0.2) 56(84) bytes of data.
64 bytes from tomcat01 (172.17.0.2): icmp_seq=1 ttl=64 time=0.060 ms
64 bytes from tomcat01 (172.17.0.2): icmp_seq=2 ttl=64 time=0.081 ms
#这里会发现 --link其实是修改了容器的hosts文件的域名解析
cat /etc/hosts 
127.0.0.1       localhost
172.17.0.2      tomcat01 ac4c109b3095
172.17.0.3      9f7b64ea4325
#自定义网络,容器互联
docker network ls
 
NETWORK ID     NAME      DRIVER    SCOPE
19e2a544812b   bridge    bridge    local
184095e16a61   host      host      local
30c80cd33a8a   none      null      local
bridge:桥接网络 默认
none:不配置网络
host:和宿主机共享网络
container:容器网络联通(用得少)
#测试
#这是我们默认启动容器的方式
docker run -d -P --name tomcat03 tomcat
实际上是默认bridge
docker run -d -P --name tomcat03 --net bridge tomcat
#自定义一个网络
docker network --help

Manage networks
Commands:
  connect     Connect a container to a network
  create      Create a network
  disconnect  Disconnect a container from a network
  inspect     Display detailed information on one or more networks
  ls          List networks
  prune       Remove all unused networks
  rm          Remove one or more networks

Run 'docker network COMMAND --help' for more information on a command.
[root@iZuf6bqi9d493xdldgnd5eZ ~]# docker network create --help

Options:
      --attachable           Enable manual container attachment
      --aux-address map      Auxiliary IPv4 or IPv6 addresses used by Network
                             driver (default map[])
      --config-from string   The network from which to copy the configuration
      --config-only          Create a configuration only network
  -d, --driver string        Driver to manage the Network (default "bridge")
      --gateway strings      IPv4 or IPv6 Gateway for the master subnet
      --ingress              Create swarm routing-mesh network
      --internal             Restrict external access to the network
      --ip-range strings     Allocate container ip from a sub-range
      --ipam-driver string   IP Address Management Driver (default "default")
      --ipam-opt map         Set IPAM driver specific options (default map[])
      --ipv6                 Enable IPv6 networking
      --label list           Set metadata on a network
  -o, --opt map              Set driver specific options (default map[])
      --scope string         Control the network's scope
      --subnet strings       Subnet in CIDR form
      at that represents a network segment
#自定义一个网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
928dfd9da62cce6d5d1ab7977d

docker network ls

NETWORK ID     NAME      DRIVER    SCOPE
19e2a544812b   bridge    bridge    local
184095e16a61   host      host      local
928dfd9da62c   mynet     bridge    local
30c80cd33a8a   none      null      local

docker run -d -P --name tomcat-mynet --net mynet tomcat 
f1b88f951721a1e53c1df79bfa51790bcc779d867d4c6fb529e8ab0d1b4930a4

docker run -d -P --name tomcat-mynet01 --net mynet tomcat 
07ac0e694a1617dd34c662a85a821b405d5fc0d76956ffa4e51af6ebefb8c2bd

 docker network inspect mynet
 

在这里插入图片描述

#再次测试ping连接,自定义的网络可以直接ping连接名
docker exec -it tomcat-mynet ping tomcat-mynet01
PING tomcat-mynet01 (192.168.0.3) 56(84) bytes of data.
64 bytes from tomcat-mynet01.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.079 ms
64 bytes from tomcat-mynet01.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.087 ms

自定义的网络docker都已经帮我们维护好了对应的关系,推荐使用自定义网络

好处:
redis集群使用一个redis网络
mysql集群使用mysql网络
不通的集群使用不通的网络,保证集群的安全和健康,两个网络互不影响,互相隔离

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值