Docker 三种网络模式
bridge模式
docker默认网络为桥接模式,创建的也是bridge模式
| Bash |
|---|
| docker network COMMAND
Commands:
connect 将容器连接到网络
create 建立网络
disconnect 断开容器与网络的连接
inspect 显示一个或多个网络的详细信息
ls 网络列表
prune 删除所有未使用的网络
rm 删除一个或多个网络
#创建网络network1
docker network create network1
#创建指定地址的网络
docker network create --subnet=10.100.1.0/24 anyesu_net
#测试
# 创建一个mongo,加入network1网络,不对外映射端口,起名my_mongodb
docker run -d \
--name my_mongodb \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=testmg \
--network network1 \
mongo
# 创建一个mongoweb管理,加入network1,通过name:my_mongodb 访问mongodb
docker run -d \
--name my_mongodb_express \
-p 8081:8081 \
-e ME_CONFIG_MONGODB_ENABLE_ADMIN=true \
-e ME_CONFIG_MONGODB_SERVER=my_mongodb \
-e ME_CONFIG_MONGODB_ADMINUSERNAME=admin \
-e ME_CONFIG_MONGODB_ADMINPASSWORD=testmg \
-e ME_CONFIG_BASICAUTH_USERNAME=adminweb \
-e ME_CONFIG_BASICAUTH_PASSWORD=passweb \
--network network1 \
mongo-express
# 等待一会儿,通过浏览器访问web,查看能否连接mongodb,web账户密码adminweb:passweb
# 同一个网络,容器可以通过名称互相访问而不需要知道具体IP地址
|
host模式
host为本地模式,容器不需要做端口映射
| Bash |
|---|
| #创建host网络的容器
docker run -d --network host nginx
# 浏览器直接访问80端口即可。进入容器查看 IP
docker exec -it 809d96b91693 /bin/bash
#先在容器装一些查看IP工具
apt update
apt install iproute2
ip a # 可以看到完全与宿主机网络一样
|
none模式
完全不联网,做一些内部测试
| Bash |
|---|
| # docker network list
NETWORK ID NAME DRIVER SCOPE
7d5a1998fe9c bridge bridge local
1068a1a991a4 host host local
fa3519ac1dd2 network1 bridge local
f65e0768a4ee none null local
|
注意
默认bridge host none 是不能被删除的
删除自建的子网
| Bash |
|---|
| #查看网络下有哪个容器再使用,删除网络前应该先断开容器的使用
docker network inspect network1
#断开网络,正常操作应该先删除或停止容器
docker network disconnect network1 my_mongodb
docker network disconnect network1 my_mongodb_express
#删除网络
docker network rm network1
|
扩展,网桥工具
| Bash |
|---|
| yum install bridge-utils # 安装包
brctl show # 查看网桥信息
root@pts/0 # brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.0242072be76f no
|
默认情况下,同一个网桥的容器可以互联,如果不希望容器互联,可以修改配置文件,拒绝互联
| Bash |
|---|
| # 添加 "icc": false 禁止互联
root@pts/0 # vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me",
"https://docker.m.daocloud.io",
"https://docker.1panel.live",
"https://hub.rat.dev"
],
"icc": false # 添加这个参数
}
# 需要重启docker 服务
systemctl restart docker
|
icc属于一刀切,一般不建议
可以添加iptables 管理,然后配置 --link 去指定链接哪个容器
| Bash |
|---|
| root@pts/0 # cat /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me",
"https://docker.m.daocloud.io",
"https://docker.1panel.live",
"https://hub.rat.dev"
],
"icc": false,
"iptables": true # 配合iptables参数
}
# 重启
systemctl restart docker
|
当然,通过--link维护也比较麻烦,一般都自定义网络