docker的网络有四种连接方式
- 1、bridge:将网络驾到默认的docker:0桥上,桥再二层转发给宿主机的物理网卡,通过SNAT与DNAT和外部通信
- 2、host :将网络直接驾到宿主机网卡上,直接与外部通信,有风险不推荐使用
开放式容器 - 3、none :驾到none上,封闭式容器,不与外部通信
- 4、联盟式容器:是指使用某个已存在容器的网络接口的容器,接口
被联盟内的各容器共享使用;因此,联盟式容器彼此间完全无
隔离,两个在同一联盟内的容器通过loopback通信
可以使用docker network list查看容器网络
注入,在启动之前就设定好某些属性,例如:
docker run --name bbox1 --rm --net bridge -it --hostname bbox1.lvqing.com --dns 223.5.5.5 --add-host node1.lvqing.com:192.168.31.200 busybox
在启动容器时指定暴露哪些端口,能自动生成iptables的规则
-p选项的使用格式
-p <containerPort>
将指定的容器端口映射至主机所有地址的一个动态端口
-p <hostPort>:<containerPort>
将容器端口<containerPort>映射至指定的主机端口<hostPort>
-p <ip>::<containerPort>
将指定的容器端口<containerPort>映射至主机指定<ip>的动态端口
-p <ip>:<hostPort>:<containerPort>
将指定的容器端口<containerPort>映射至主机指定<ip>的端口<hostPort>
“动态端口”指随机端口,具体的映射结果可使用docker port命令
查看
实验:busybox暴露80端口启动httpd服务
1、创建容器
docker run --name bbox2 --rm --net bridge -it -p 80 busybox
2、 在busybox种启动httpd服务
httpd -h /data/html
3、 查看在宿主机上映射的端口号
docker port bbox2
4、 访问测试
curl http://192.168.31.200:32768
<h1>bbox1 server</h1>
还可以自己创建虚拟网桥
docker network create -d bridge --subnet=172.31.0.0/16 --ip-range=172.31.0.0/16 --gateway=172.31.0.1 mybr0
docker run --name bbox1 --rm -it --net mybr0 busybox
还可以给容器添加或者删除网卡
docker network connect|disconnect bridge bbox1