docker网络
docker网络
| 容器<>容器 | 容器->宿主 | 宿主->容器 | 容器->互联网 | 互联网->容器 | |
|---|---|---|---|---|---|
| Bridge(默认) | 是 | 是 | 是 | 是 | 端口映射/关联 |
| 自定义Bridge (推荐使用,有自动DNS) |
是 | 是 | 是 | 是 | 端口映射/关联 |
| host(liunx) 网络和主机一致 同等于服务在主机下 |
是 | 是 | 是 | 是 | 是 |
| host(其他) 只存在一个 |
* | * | * | * | * |
| none(只有lo的回环网络) | 否 | 否 | 否 | 否 | 否 |
优缺点分析
| Bridge(默认) | 自定义Bridge | host | none | |
|---|---|---|---|---|
| 优点 | 自动加入 | 自动DNS,隔离 | 网络性能佳 | 隔离 |
| 缺点 | 无自动DNS 容器间ping ip可以 主机名不行 |
NAT 容器内容要出来要地址转换 会消耗一定性能 |
安全问题,仅Linux | 不能联网 |
| 场景 | 不建议 | 单宿主多容器 | 单容器多端口,不用端口转换 | 备份,一次性操作 |
参考命令:
ip a
sudo docker network ls
#查看docker网络
sudo docker network inspect bridge | less
#查看docker默认网桥信息
sudo docker run -d --name egg1 --hostname egg1 praqma/network-multitool
#运行一个容器,这个镜像有很多网络工具
sudo docker ps
#查看容器是否在运行
sudo docker network inspect bridge | jq '.[0] | {Name:.Name, Id:.Id, Driber:.Driber, IPAM:.IPAM.Config, Containers:.Containers, Oprions:.Options}'
#输出docker默认网桥的一些信息
ip a
ip -json address show dev veth6ac44d1 | jq ﹒
#使用json格式输出veth6ac44d1的信息
sudo docker exec -it egg1 bash
#进入容器
ip a
ip -json -detail address show dev eth0 | jq '.[0] | {ifindex:.ifindex,link_index :.link_index, ifname:.ifname, linkinfo:.linkinfo,addr_info:.addr_info}'
#输出eth0的一些信息
sudo docker run -d --name egg2--hostname egg2 praqma/network-multitool
#运行另一个容器
#ping测试,ping ip可以ping通,ping主机名无法ping通,无自动DNS
sudo docker run --name egg3 -d -p 8080:80 nginx
#运行另一个容器,端口映射
#ping测试
curl localhost;8080
#使用本机ip可以就可以访问nginx默认页面
/////////////////////////////////////////////////////////////////////////////////////////
sudo docker network create -d bridge naihe-bridge
#创建一个自定义网桥
ip a
sudo docker network ls
#查看docker网路
sudo docker network inspect naihe-bridge | jq '.[0] | {Name:.Name, Id:.Id, Driber:.Driber, IPAM:.IPAM.Config, Containers:.Containers, Oprions:.Options}'
#输出naihe-bridge网桥的一些信息
sudo docker run -d --name naihe1 --hostname naihe1 --network naihe-bridge praqma/network-multitool
#创建一个新的容器
ip a
sudo docker run -d --name naihe2 --hostname naihe2 --network naihe-bridge praqma/network-multitool
#创建另一个新的容器
sudo docker network inspect naihe-bridge | jq '.[0].Containers '
#查看这两个容器的ip地址
#ping测试,ping主机名可以ping通
sudo docker run -d --name naihe33 --network naihe-bridge praqma/network-multitool
sudo docker run -d --name naihe44 --network naihe-bridge praqma/network-multitool
#创建另两个个新的容器,不设置hostname
#ping测试,可以直接ping容器名可以ping通
/////////////////////////////////////////////////////////////////////////////////////////
sudo docker run --name egg11 --network host -d praqma/network-multitool
#使用host网络创建容器,这个镜像有nginx服务
curl localhost
#可以直接看到nginx服务默认页面
sudo doxker exec -it egg11 bash
vi /usr/share/nginx/html/index.html
#可以对默认内容进行修改
curl localhost
#可以直接看到nginx服务被修改后的样子
sudo doxker exec -it egg11 bash
ip a
#可以看到容器网络和宿主机网络完全一致
/////////////////////////////////////////////////////////////////////////////////////////
sudo docker run --name egg21 -it --network none praqma/network-multitool bash
#使用host网络创建容器并进入
ip a
#可以看到只有lo的回环网络,ping测试就是一个没有网络的主机环境参考: