docker network
管理docker 网络
#创建docker network(网络类型有bridge、host、none,默认bridge)
docker network create [OPTIONS] NETWORK
#使用--driver指定创建时使用的驱动,Overlay
#查看docker network
docker network ls [OPTIONS]
#删除network
docker network rm NETWORK [NETWORK...]
#删除所有没用的network
docker network prune [OPTIONS]
#将一个容器连接到一个network
docker network connect [OPTIONS] NETWORK CONTAINER
#将一个容器和一个network的连接断开
docker network disconnect [OPTIONS] NETWORK CONTAINER
#查看网络详细信息
docker network inspect [OPTIONS] NETWORK [NETWORK...]
#查看桥接网络详细信息
docker network inspect bridge
关于Overlay
在docker swarm 中,manager节点创建一个overlay网络,该网络只对swarm中的中的节点生效,当使用该网络创建service时,manager将自动拓展overlay网络到所有分配工作的节点。
docker network create \
--driver overlay \
--subnet 10.0.0.0/24 \
--gateway 10.0.0.1 \
test-overlay
除了在docker swarm中使用overlay,能够通过Consul, Etcd, and ZooKeeper 管理
关于docker_gwbridge
docker_gwbridge是docker自动创建的bridge网络,当docker swarm init或docker swarm join的时候,docker 就会自动生成这样一个网络用于通信。或者当某个容器和外部进行通信时,将使用docker_gwbridge。docker_gwbridge使用的是overlay网络驱动。
容器端口暴露到宿主机
#运行docker run是使用-p将容器端口暴露到宿主机端口(不指定宿主机端口将随机分配一个端口)
docker run -it -d -p 80 nginx
#可以指定容器暴露到宿主机的具体端口,8080是宿主机端口
docker run -it -d -p 8080:80 nginx
使用proxy server
详情见:https://docs.docker.com/engine/userguide/networking/#use-a-proxy-server-with-containers
创建~/.config.json
添加
{
"proxies":
{
"default":
{
"httpProxy": "http://127.0.0.1:3001",
"noProxy": "*.test.example.com,.example2.com"
}
}
}
在/etc/docker/daemon.json中定义也是可以的
docker与iptables
详见:https://docs.docker.com/engine/userguide/networking/#docker-and-iptables
#查看规则
iptables -t nat -L
#docker DNS
docker中有内嵌的DNS,因此在同一docker网络中的容器之间能够使用容器名互相通信。
在不同的网络(即使使用相同的驱动)中的容器无法使用容器名通信。
一个容器可以添加到多个网络中。
--link可以实现同一驱动下不同网络之间的通信。
docker swarm集群之间通信需要为每个节点开启以下端口
Port 7946 TCP/UDP for container network discovery.
Port 4789 UDP for the container overlay network.
转载于:https://blog.51cto.com/13323775/2060895