网络
网络驱动汇总 | 描述 |
---|---|
none | 无网络 |
bridge | 桥接 多个容器之间通过桥接网络交互 |
Host | 主机网络 容器应用使用主机的网络 |
overlay | 叠加网络 应用在多台机器之间通过叠加网络交互 |
ipvlan | 虚拟ip |
macvlan | Mac的虚拟ip网络 |
Third-party network plugins | 三方网络插件 |
容器网络
2个容器之间共享同一个网络 ip 端口等,除去网络外其他的2个容器之间是相互隔离的 比如文件系统 主机名等
docker container run -d --name mynginx1 -P nginx
95132de6a078
docker container run -d --network container:95132de6a078 --name myredis -P redis
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5eff2b7c0866 redis "docker-entrypoint.s…" 14 seconds ago Up 13 seconds myredis
95132de6a078 nginx "/docker-entrypoint.…" 22 minutes ago Up 22 minutes 0.0.0.0:32768->80/tcp, :::32768->80/tcp mynginx
docker inspect 5eff2b7c0866
[
{
"Id": "5eff2b7c0866749c28eeba80453fe163fdc9de6b3702084cd5b561346fdf606d",
...
"HostConfig": {
...
"NetworkMode": "container:95132de6a0783684dd208328247f96194609d7ebec58465271f7b36906f786d0",
...
},
...
"NetworkSettings": {
"Bridge": "",
"SandboxID": "",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "",
"Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"MacAddress": "",
"Networks": {}
}
}
]
*Note 容器模式下不允许指定端口等信息 这些全部由绑定的那个容器的网络决定,否则会错误 docker: Error response from daemon: conflicting options: port publishing and the container type network mode.
Host主机
容器启动共享主机网络,但其他仍然是隔离的,比如文件系统等. 使用主机网络时-p,–publish -P,–publish-all 这些参数会被忽略,容器使用的端口会占用主机端口
bridge桥接
docker规定允许容器连接到同一个桥接网络上,连接到不同桥接网络的不能进行交互,docker启动后会在宿主机上默认创建一个名为docker0的虚拟桥接网络(可以理解为交换机)默认情况下 多个启动的容器都是通过docker0连接 相互可以访问。运行一个容器时会在容器中和容器外虚拟出一对网卡 一端连接到容器中一段连接到虚拟网桥上。docker0会为容器分配ip 构成以docker0为网桥的二层网络
# 创建2个容器在同一个网桥上(未指定时默认docker0)容器之间可通过主机名相互访问
docker container run --name nginx2 --rm -d -p 9091:80 nginx
docker container run --name nginx1 --rm -d -p 9092:80 nginx
#不同网络之间相互访问 一个在docker0 桥 一个在docker1
docker container run --name nginx1 --rm -d -p 9091:80 --network docker0 nginx
docker container run --name nginx2 --rm -d -p 9092:80 --network docker1 nginx
docker network connect docker1 nginx1
docker network connect docker0 nginx2
通过daemon.json的配置可以修改默认docker0网桥的网络信息
{
"bip" : "192.168.2.1/24",
"fixed-cidr" : "10.20.0.0/16",
"fixed-cidr-v6" : "2001:db8::/64",
"mtu" : "1500",
"default-getway" : "192.168.2.1",
"default-getway-v6" : "2001:db8:abcd::89",
"dns" : ["8.8.8.8","1.1.1.1"]
}