网络
- 安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host
- None:该模式关闭了容器的网络功能,对外界完全隔离
- host:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
- bridge 桥接网络,此模式会为每一个容器分配IP
- 可以使用该
--network
标志来指定容器应连接到哪些网络
1 bridge(桥接)
- bridge网络代表所有Docker安装中存在的网络
- 除非你使用该
docker run --network=<NETWORK>
选项指定,否则Docker守护程序默认将容器连接到此网络 - bridge模式使用
--net=bridge
指定,默认设置
docker network ls #列出当前的网络
docker inspect bridge #查看当前的桥连网络
docker run -d --name nginx1 nginx
docker run -d --name nginx2 --link nginx1 nginx
docker exec -it nginx2 bash
ping nginx1
# nginx1 ip - 172.18.0.2
# nginx2 ip - 172.18.0.3
ifconfig查看网卡:docker0 --> 172.18.0.1
cat /etc/hosts:查看ip映射
2 none
- none模式使用
--net=none
指定
# --net 指定无网络
docker run -d --name nginx_none --net none nginx
docker inspect none
docker exec -it nginx_none bash
ip addr
3 host
- host模式使用
--net=host
指定
docker run -d --name nginx_host --net host nginx
docker inspect host
docker exec -it nginx_host bash
ip addr
docker network inspect none/host : ip和mac地址都为空,none不能联网,host使用主机网络
4 端口映射
# 查看镜像里暴露出的端口号
docker image inspect nginx
"ExposedPorts": {"80/tcp": {}}
# 让宿主机的8080端口映射到docker容器的80端口
docker run -d --name port_nginx -p 8080:80 nginx
# 查看主机绑定的端口
docker container port port_nginx
5 指向主机的随机端口
docker run -d --name random_nginx --publish 80 nginx
docker port random_nginx
docker run -d --name randomall_nginx --publish-all nginx
docker run -d --name randomall_nginx --P nginx
6 创建自定义网络
- 可以创建多个网络,每个网络IP范围均不相同
- docker的自定义网络里面有一个DNS服务,可以通过容器名称访问主机
# 创建自定义网络
docker network create --driver bridge myweb
# 查看自定义网络中的主机
docker network inspect myweb
# 创建容器的时候指定网络
docker run -d --name mynginx1 --net myweb nginx
docker run -d --name mynginx2 --net myweb nginx
docker inspect myweb # 可以看到containers包含了以上两项
docker exec -it mynginx2 bash
ping mynginx1
7 连接到指定网络
docker run -d --name mynginx3 nginx
docker network connect myweb mynginx3
docker network disconnect myweb mynginx3
# mynginx3可以ping myweb网络下的ip,也可以ping其原本的网段的ip
8 移除网络
docker network rm myweb