docker网络的配置
目的
如题,大致记录了解到的docker中关于网络的配置
为什么docker中要有网络
每个container其实就像现实中的计算机,
为了让他们互相通信,有时尤其是为了让他们模拟出在一个局域网下的效果,
需要定义一些连接的方式.
目前我了解的,两个container互相通信的方式
- 都使用
-p
暴露接口,通过接口访问 - 启动c2时使用
-link
参数指定要连接c1 - 使用自定义网络
使用link的方式
1 | docker run -it --rm --name busybox1 busybox sh # 启动c1 |
此处busybox2使用link参数指定了需要链接busybox1.语法: <container~name~>:<alias>
具体表现为在busybox2中可以使用
1 | ping b1 -c 2 # 可以ping通 |
注意link是单方向的,从busybox1无法ping通busybox2,busybox1的arp表也不会出现busybox2
使用自定义网络
docker中网络相关的命令有
1 | docker network ls # 查看网络 |
其中创建网络时通过 -d
指定网络的类型,有 bridge
和 overlay
, 其中常用的是 bridge
.
overlay
则是在 swarm mode
中常用的.
加入同一个网络的两个container可以互相ping通,同时arp表中会出现类似下面的内容
1 | busybox2.my-net (172.27.0.3) at 02:42:ac:1b:00:03 [ether] on eth0 |
配置hostname与DNS
使用 docker run
时可以分别用参数指定hostname与DNS
1 | docker run -it --rm --name busybox1 -h b1 --dns=8.8.8.8 busybox sh |
效果如下(在docker内执行)
1 | hostname # b1 |
如果不指定,则默认hostname为随机字符串,DNS为host机的DNS
同时也可以在docker的daemon配置文件中指定默认的DNS服务器