提供前面三章的学习,相信大家已经对docker有了初步了解,那么今天就玩点进阶操作,对Docker的网络进行管理
1.容器网络
1.1.映射网络
**容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射。\
当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。\
使用 docker ps 可以看到,本地主机的 49153 被映射到了容器的 80 端口。此时访问本机的 49153 端口即可访问容器 内 web 应用提供的界面。**
# 指定映射
docker run -dit --name nginxweb1 -p 8081:80 nginx
# 随机映射
docker run -dit --name nginxweb4 -P nginx
# 查看所有容器
docker ps -a
1.2.主机网络
可以使用 --network=host
参数来直接使用宿主机网络
docker run -dit --network=host --name nginx-host nginx
1.3.容器互联
1.3.1 新建网桥
-d 参数指定 Docker 网络类型,有 bridge overlay 。其中 overlay 网络 类型用于 Swarm mode,在本小节中你可以忽略它。
docker network create -d bridge new-net
1.3.2 容器互联创建容器
docker run -dit --name box1 --network new-net busybox
docker run -dit --name box2 --network new-net busybox
1.3.3 容器互联测试
# 进入box1容器
docker exec -it box1 sh
# ping测试
ping box2
2.自定义docker0网络
当 Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是 Linux 的一个 bridge,可以理解为一个软件交 换机。它会在挂载到它的网口之间进行转发。 同时,Docker 随机分配一个本地未占用的私有网段(在 RFC1918 中定义)中的一个地址给 docker0 接口。比如典型的 172.17.42.1 ,掩码为 255.255.0.0 。此后启动的容器内的网口也会自动分配一个同一网段( 172.17.0.0/16 )的 地址。 当创建一个 Docker 容器的时候,同时会创建了一对 veth pair 接口(当数据包发送到一个接口时,另外一个接口也可以 收到相同的数据包)。这对接口一端在容器内,即 eth0 ;另一端在本地并被挂载到 docker0 网桥,名称以 veth 开 头(例如 vethAQI2QT )。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。Docker 就创建了在主机和所 有容器之间一个虚拟共享网络。
2.1 移除原有网络
2.1.1 安装btctl命令
yum install -y bridge-utils
[](https://link.juejin.cn?target=)
2.1.2 查询网桥信息
brctl show
[](https://link.juejin.cn?target=)
2.1..3 关闭docker服务
systemctl stop docker
[](https://link.juejin.cn?target=)
2.1.4 停止docker0网桥
ip link set dev docker0 down
[](https://link.juejin.cn?target=)
2.1.5 删除docker0网桥
brctl delbr docker0
[](https://link.juejin.cn?target=)
2.1.6 查询所有网桥信息
brctl show
2.2 自定义新网络
2.2.1 创建新网桥bridge0
brctl addbr bridge0
[](https://link.juejin.cn?target=)
2.2.2 查询创建的bridge0
brctl show
[](https://link.juejin.cn?target=)
2.2.3 设置新网桥的网络段地址
ip addr add 192.168.0.1/24 dev bridge0
2.2.4 启动bridge0网桥
ip link set dev bridge0 up
2.2.5 查询bridge0网桥信息
ifconfig bridge0
[](https://link.juejin.cn?target=)
7.4.2.6、添加新网桥到配置文件
vi /etc/sysconfig/docker
# 添加 -b=bridge0 到 OPTIONS 中
OPTIONS='-b=bridge0'
2.2.7 加载配置文件,重启docker服务
systemctl daemon-reload
systemctl restart docker
2.3 使用新网络部署应用测试docker0网络
2.3.1 创建一个nginx容器
docker run -dit --name nginx-net nginx
2.3.2 查看容器的状态
docker ps -a
[](https://link.juejin.cn?target=)
2.3.3 查看容器的bridge
docker inspect -f {{.NetworkSettings.Networks.bridge}} nginx-net