Docker进阶
470字约2分钟
2025-05-28
Docker会给每个容器分配一个IP(桥接模式)
[root@hadoop01 dockerDemo]# docker ps
CONTAINER ID IMAGE ... NAMES
638d5152610b tomcat:latest ... tomcat
[root@hadoop01 dockerDemo]# ip add
# docker网卡
5: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:84:af:4f:9b 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
inet6 fe80::42:84ff:feaf:4f9b/64 scope link
valid_lft forever preferred_lft forever
# 每个容器对应的网卡
107: veth8e05dcb@if106: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether 2e:68:5c:07:aa:b6 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::2c68:5cff:fe07:aab6/64 scope link
valid_lft forever preferred_lft forever
容器之间相互通信
docker run -d -it --name tomcat1 --link 对应访问的容器 镜像名
[root@hadoop01 dockerDemo]# docker ps
CONTAINER ID IMAGE ... NAMES
638d5152610b tomcat:latest ... tomcat1
# 运行一个叫 tomcat2 的容器,并且链接一个名为 tomcat1 容器
docker run -d -it --name tomcat2 --link tomcat1 tomcat
原理:修改Linux中的hosts文件,进行ip绑定
注意:tomcat2
访问tomcat1
可以访问,但是tomcat1
访问tomcat2
就不可以访问,因为tomcat1
没有指定tomcat2
,为了解决这个问题,推荐使用 自定义网络 解决
自定义网络
自定义网络就不需要定义 --link
,可以直接通过容器名访问
docker network create --driver bridge --subnet 自定义ip段 --gateway 自定义网关 该网络配置名称
docker network create
:基础命令,用于创建新的 Docker 网络。
使用自定义网络配置
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
docker run -d -it -P --name tomcat-nat-1 --net mynet tomcat
docker run -d -it -P --name tomcat-nat-2 --net mynet tomcat
当容器之间使用的不是同一个网络配置,如下图,
tomcat1
访问tomcat-net-1
docker network connect mynet tomcat1
将tomcat1
链接到mynet
中,这样tomcat1
就可以访问mynet
中所有的容器了