携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第26天,点击查看活动详情
提供前面三章的学习,相信大家已经对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
2.1.2 查询网桥信息
brctl show
2.1..3 关闭docker服务
systemctl stop docker
2.1.4 停止docker0网桥
ip link set dev docker0 down
2.1.5 删除docker0网桥
brctl delbr docker0
2.1.6 查询所有网桥信息
brctl show
2.2 自定义新网络
2.2.1 创建新网桥bridge0
brctl addbr bridge0
2.2.2 查询创建的bridge0
brctl show
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
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
2.3.3 查看容器的bridge
docker inspect -f {{.NetworkSettings.Networks.bridge}} nginx-net