企业级容器技术Docker 20250919总结
接上:企业级容器技术Docker 20250917总结-CSDN博客
八、Docker网络管理
1.Docker的默认的网络通信(学习)
Docker服务安装完成之后,默认在每个宿主机会生成一个名称为docker0的网卡其IP地址都是
172.17.0.1/16
[root@ubuntu1804 ~]#apt -y install bridge-utils
[root@ubuntu1804 ~]#brctl show
2.创建容器后的网络配置
veth(Virtual Ethernet)是Linux内核中的一种虚拟网络设备,通常用于连接两个网络命名空间。veth 设备总是成对出现,当在一个网络命名空间中创建veth设备时,会同时创建两个端点。veth设备的两个端点可以被看作是一个虚拟的以太网电缆,任何发送到其中一个端点的数据包都会被立即从另一个端点传出。
3.容器间的通信
默认情况下
同一个宿主机的不同容器可相互通信,不同宿主机之间的容器IP地址重复,默认不能相互通信
dockerd --icc Enable inter-container communication (default true)
--icc=false #此配置可以禁止同一个宿主机的容器之间通信
范例: 同一个宿主机不同容器间禁止通信
[root@ubuntu1804 ~]#vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
--icc=false
[root@ubuntu1804 ~]#systemctl daemon-reload
[root@ubuntu1804 ~]#systemctl restart docker
#创建两个容器,测试无法通信
[root@ubuntu1804 ~]#docker run -it --name test1 --rm alpine sh
/ # hostname -i
172.17.0.2
[root@ubuntu1804 ~]#docker run -it --name test2 --rm alpine sh
/ # hostname -i
172.17.0.3
/ # ping 172.17.0.2
#添加--icc选项,本质上就是修改iptables规则 -A FORWARD -i docker0 -o docker0 -j
ACCEPT修改为DROP
[root@ubuntu2204 ~]#iptables -S > icc.txt
[root@ubuntu2204 ~]#diff icc.txt no_icc.txt
13c13
< -A FORWARD -i docker0 -o docker0 -j DROP
---
> -A FORWARD -i docker0 -o docker0 -j ACCEPT
4.修改默认docker0网桥的网络配置
范例: 将docker0的IP修改为指定IP
#方法1 daemon.json 配置修改
[root@ubuntu1804 ~]#vim /etc/docker/daemon.json
[root@ubuntu1804 ~]#cat /etc/docker/daemon.json
{
"bip": "192.168.100.1/24",
"registry-mirrors": ["https://si7y70hh.mirror.aliyuncs.com"] }
[root@ubuntu1804 ~]#systemctl restart docker.service
[root@ubuntu1804 ~]#cat /etc/docker/daemon.json
{
"bip": "192.168.100.1/24",
"registry-mirrors": ["https://si7y70hh.mirror.aliyuncs.com"] }
[root@ubuntu1804 ~]#systemctl restart docker.service
#方法2 docker.service 配置修改
[root@ubuntu1804 ~]#vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
--bip=192.168.100.1/24
[root@ubuntu1804 ~]#systemctl daemon-reload
[root@ubuntu1804 ~]#systemctl restart docker.service
#注意两种方法不可混用,否则将无法启动docker服务
5.修改默认网络设置使用自定义网桥
[root@ubuntu1804 ~]#apt -y install bridge-utils
[root@ubuntu1804 ~]#brctl addbr br0
#给网桥添加IP,用于给容器分配置IP,如果不指定IP,会自动向后续网段,默认是172.18.0.0/16
[root@ubuntu1804 ~]#ip a a 192.168.100.1/24 dev br0

[root@ubuntu1804 ~]#vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -b br0
[root@ubuntu1804 ~]#systemctl daemon-reload
[root@ubuntu1804 ~]#systemctl restart docker

九、容器名称互联(了解)
docker run 创建容器,可使用--link选项实现容器名称的引用,其本质就是在容器内的/etc/hosts中添加--link后指定的容器的IP和主机名的对应关系,从而实现名称解析
--link list #Add link to another container
格式:
docker run --name <容器名称> #先创建指定名称的容器
docker run --link <目标通信的容器ID或容器名称> #再创建容器时引用上面容器的名称
实战案例1: 使用容器名称进行容器间通信
[root@ubuntu1804 ~]#docker run -it --name server1 --rm alpine:3.11 sh
/ # cat /etc/hosts
172.17.0.2 cdb5173003f5 #假设有此ip name
/ # ping cdb5173003f5 #结果显示可以ping通
新建第二个容器时引用第一个容器的名称
会自动将第一个主机的名称加入/etc/hosts文件,从而可以利用第一个容器名称进行访问
[root@ubuntu1804 ~]#docker run -it --rm --name server2 --link server1 alpine:3.11 sh
/ # env
/ # cat /etc/hosts
172.17.0.2 server1 cdb5173003f5
172.17.0.3 7ca466320980
/ # ping server1 可以ping通
实战案例2: 实现 wordpress 和 MySQL 两个容器互连
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=123456 -e
MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=123456
registry.cn-beijing.aliyuncs.com/xiaoming/mysql:8.0.29-oracle
#方式1
docker run -p 80:80 --name wordpress --link mysql -d registry.cn-beijing.aliyuncs.com/xiaoming/wordpress:php8.2-apache
#方式2
docker run -p 80:80 --name wordpress --link mysql -e WORDPRESS_DB_HOST=mysql -e
WORDPRESS_DB_NAME=wordpress -e WORDPRESS_DB_USER=wordpress -e
WORDPRESS_DB_PASSWORD=123456 -d registry.cn-
beijing.aliyuncs.com/xiaoming/wordpress:php8.2-apache
[root@centos7 ~]#tree lamp_docker/
lamp_docker/
├── env_mysql.list
├── env_wordpress.list
└── mysql
└── mysql_test.cnf
1 directory, 3 files
[root@centos7 ~]#cat lamp_docker/env_mysql.list
MYSQL_ROOT_PASSWORD=123456
MYSQL_DATABASE=wordpress
MYSQL_USER=wpuser
MYSQL_PASSWORD=wppass
[root@centos7 ~]#cat lamp_docker/env_wordpress.list
WORDPRESS_DB_HOST=mysql:3306
WORDPRESS_DB_NAME=wordpress
WORDPRESS_DB_USER=wpuser
WORDPRESS_DB_PASSWORD=wppass
WORDPRESS_TABLE_PREFIX=wp_
[root@centos7 ~]#cat lamp_docker/mysql/mysql_test.cnf
[mysqld]
server-id=100
log-bin=mysql-bin
[root@centos7 ~]#docker run --name mysql -v /root/lamp_docker/mysql/:/etc/mysql/conf.d -v /data/mysql:/var/lib/mysql --env-file=/root/lamp_docker/env_mysql.list -d -p 3306:3306 registry.cn-beijing.aliyuncs.com/xiaoming/mysql:8.0.29-oracle
[root@centos7 ~]#docker run -d --name wordpress --link mysql -v
/data/wordpress:/var/www/html/wp-content --env-file=/root/lamp_docker/env_wordpress.list -p 80:80 registry.cn-beijing.aliyuncs.com/wangxiaochun/wordpress:php8.2-apache

十、Docker 网络连接模式(重点)
Docker 的网络支持 5 种网络模式:
292