docker 02网络
docker 02网络
# 查看本地机器的网桥
[root@docker-110 ~]# brctl show
bridge name bridge id STP enabled interfaces
br-b3ca5dd162d9 8000.0242525c43ca no
br-e5c6866dbfd1 8000.0242be6263df no
docker0 8000.0242f21d91d9 no # 用本地的一个网桥跑一个nginxdocker run -d -p 18877:80 --network=b3ca5dd162d9 nginx
说明了这个容器在用这该网桥
# 看看默认的网桥,docker0的网段是多少
[root@docker-110 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
4de4dc2e2ec4 bridge bridge local
0db7cc002f15 host host local
e5c6866dbfd1 linux0224-net1 bridge local
b3ca5dd162d9 linux0224-net2 bridge local
2038547e0c41 none null localdocker inspect bridge"Config": [{"Subnet": "172.17.0.0/16", # 子网"Gateway": "172.17.0.1" # 网关}]
使用默认的docker0去创建容器
# busybox简单调试网络信息
# 快速创建容器,查看网络信息
# 进入容器内看看,docker0的网络信息
==============================================
[root@docker-200 ~]#docker run -it busybox/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02 inet addr:172.17.0.2 Bcast:172.17.255.255 Mask:255.255.0.0
如何证明这个使用率docker0这个网桥,口说无凭?
# 如何证明容器用来什么网桥
brctl show
[root@docker-110 ~]# brctl show
bridge name bridge id STP enabled interfaces
br-b3ca5dd162d9 8000.0242525c43ca no vethb14f45b
br-e5c6866dbfd1 8000.0242be6263df no
docker0 8000.0242f21d91d9 no veth14afd59ifconfig 也看到了多个,veth虚拟网络接口命令
brctl show ip addr show # 更加简便的办法,查看网桥,和容器的关系
# 基于容器信息看到关系
# 修改docker0网桥之间,容器记录 a99 172.17.0.2 zheg IP[root@docker-200 ~]#docker inspect a99d78d85464 |grep -i networks -A 2"NetworkSettings": {"Bridge": "","SandboxID": "dfb497ddf3c426252b3267aeb312b07469107462bd04528b01a8b59177a27504",
--"Networks": {"bridge": {"IPAMConfig": null,# 查看网桥详细信息,有哪些容器再用它[root@docker-200 ~]#docker inspect bridge
# 公司对容器的网络环境有要求,网络部门给了其他网段的ip,说你们的容器环境,只能用和这个
# 192.168.15.0/24# 你默认的docker0,得使用这个网段下的ip,容器创建的ip是这个局域网内的
# docker0作为默认网桥,得修改docker配置文件
[root@docker-110 ~]# cat /etc/docker/daemon.json
{"bip":"192.168.15.1/24","registry-mirrors": ["https://ms9glx6x.mirror.aliyuncs.com"],"insecure-registries":["http://10.0.0.110","http://10.0.0.110:5000"]}[root@docker-110 ~]# systemctl daemon-reload
# 重载docker配置
# 重启# 创建一个新的nginx容器
[root@docker-110 ~]# docker run -d -p18999:80 nginx
fb086c522529d76eeaa83951ccdcc53f74f1c5625681d6806ead8fadb2a0f9df# 可以看看他的网络地址
docker inspect id
5aa88aafb2b7a6338fb","Gateway": "192.168.15.1","IPAddress": "192.168.15.2","IPPrefixLen": 24,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"DriverOpts": null,"DNSNames": null}}}# 访问看看
[root@docker-110 ~]# curl 192.168.15.2:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>ok
host模式,原理,背诵
1. hosts启动的容器,没有自己的网卡,ip信息,直接用宿主机的
2. 但是除了network网络空间,其他如进程,文件系统,还是容器自己的
3. 通过参数 --network host 开启
4. host模式,没有端口映射功能
5. 直接使用宿主机的网络环境,因此网络性能更高一筹。
直接使用主机的环境。也就少了一层数据包的转发
创建容器,使用host网络模式
[root@docker-200 ~]#docker run -d --network=host nginx
063d3e5dbc563d71f396fff608f3240fc83feac49406166e57e1e3aecb7904d4
# 这个走的是宿主的网络,
[root@docker-110 ~]# curl 10.0.0.110:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
container 模式
1. container模式的容器是
容器A使用另一个已存在的容器B,共享它的网络空间# 1.先准备好一个容器A
# 容器A用的是默认的 bridge网桥[root@docker-200 ~]#docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8742c0eda899 nginx "/docker-entrypoint.…" 6 minutes ago Up 6 minutes 0.0.0.0:18777->80/tcp, :::18777->80/tcp happy_boyd2.创建新容器,制定用容器A的网络环境
None 模式
1.None模式是不创建任何网络信息,这个模式几乎不用。2.若是给none模式的容器创建网络环境,得自己基于ip命令去创建网络名称空间,操作较为复杂。创建一个容器,有独立的文件系统,进程空间,用户空间,完全没有网络空间
如果要自己定制网络环境1. 先创建网络名称空间
2. 再创建网络接口
3. 再创建ip信息等