#删除已有的所有容器
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网络
不通的集群使用不通的网络,保证集群的安全和健康,两个网络互不影响,互相隔离