docker 网络
docker 网络
我们是用容器,不是运行单机程序,当然是需要运行网络服务在容器中,那么如何配置docker的容器网络,基础的网络配置,网桥配置,端口映射,还是很重要的。
[root@docker-200 ~]#docker inspect linux0224_registry
本地的机器的所有容器的ip
[root@docker-200 ~]#docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq) | column -t
/sleepy_poincare -
/linux0224_registry - 172.17.0.2
/distracted_mendel -
/nginx -
/harbor-jobservice - 172.22.0.3
/harbor-core - 172.22.0.8
/redis - 172.22.0.7
/registry - 172.22.0.5
/harbor-db - 172.22.0.2
/harbor-portal - 172.22.0.6
/registryctl - 172.22.0.9
/harbor-log - 172.22.0.4
docker 网络功能
docker 的网络功能就是利用linux的network , namespace ,network bridge 虚拟的网络设备实现,默认情况下docker安装完毕后会生成网桥,docker0 ,可以理解为一个交换机,对两端的数据转发,docker的网络接口默认都是虚拟网络接口。
2个桥, =======DRIVE=====bridge==========网络驱动类型====bridge查看容器有几座桥(容器网络,创建网桥)?docker network ls[root@docker-200 ~]#docker network ls
NETWORK ID NAME DRIVER SCOPE
d759d6afc28e bridge bridge local
a22b66f2f0c0 dockergitlab_default bridge local
e94e1740135d harbor_harbor bridge local
7f0ac5ca9cd1 host host local
15fee521bd3c none null local
5f10a2922758 root_default bridge local
859d85bb6186 tmp_default bridge local几个容器网桥? 5个如何知道这5个网桥用的网段是?docker查看资源信息的命令docker inspect image xxdocker inspect container xxdocker inspect network xx# 补充一点
第一个网桥是docker生成的docker0
在定制一个网桥去运行容器
网桥的作用就是容器和docker0进行连接,就是为了数据包的收发
关于docker网桥的学习
指定现有网桥运行新的容器
查看运行后的容器,虚拟网络接口和宿主机网桥的关系。
查看现有的网桥的信息
增
删
改
查
docker inspect 网络驱动的id
基于宿主机的brctl ,网络管理命令去查看网桥信息
yum install bridge-utils -y
[root@docker-200 ~]#docker network rm 859d85bb6186 5f10a2922758
859d85bb6186
5f10a2922758
[root@docker-200 ~]#
[root@docker-200 ~]#docker network rm 859d85bb6186 5f10a2922758
Error: No such network: 859d85bb6186
Error: No such network: 5f10a2922758
[root@docker-200 ~]#
[root@docker-200 ~]#docker network prune
WARNING! This will remove all custom networks not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Networks:
harbor_harbor
dockergitlab_default# 查看剩下的默认的docker网络环境信息[root@docker-200 ~]#ip addr 4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:ad:e8:ba:38 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft foreverinet6 fe80::42:adff:fee8:ba38/64 scope link valid_lft forever preferred_lft forever
[root@docker-200 ~]##查看宿主机的网桥信息[root@docker-200 ~]#brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.0242ade8ba38 no
删除无用的网桥、
docker network prune 清理没有容器在用的的网桥
容器之间访问
走同一个网桥下,链接同一个网桥,就可以实现容器的网络通信这个虚拟网桥172.16.0.0 172.16.2.2
172.16.2.3
container 模式
container 模式是容器使用另一个存在的容器,共享他的网络空间
container模式下的网络空间,和宿主机是完全隔离的
(面试题)docker网络模式4种
–net=bridge 这个是默认的模式,连接到默认的网桥docker0,这个模式给容器自动的分配ip,且通过iptables的net表和宿主机实现数据通信。
–net=host 告诉Docker不要将容器网络放到隔离的命名空间,即不要容器化容器内的网络,此时容器内使用本地主机的网络,它完全拥有本地主机接口访问权限
–net=container:NAME_or_ID 让DOCKER 将新建的进程放到一个已经存在的网络栈种,新容器进程拥有自己的文件系统,进程列表,和已经存在的容器共享ip地址,网络端口等资源,
–net=none 让Docker 将新的容器放到隔离的网络栈中,但是不进行网络配置,用户可以自行配置
2.1 创建容器,用自带的网桥,brdige,基于docker network 查看
[root@docker-110 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
fca76ebba6d5 bridge bridge local
0db7cc002f15 host host local
2038547e0c41 none null local
[root@docker-200 ~]#docker run --name docker --network=fca76ebba6d5 -it busybox sh-----
[root@docker-200 ~]#docker run --name bride-net --network=bridge -it busybox sh
/ #
/ #
/ #
# br-linux0225 192.168.56.0/24 同理如上# 创建自建网桥docker network create --driver bridge --subnet 192.168.55.0/24 --gateway 192.168.55.1 linux0224-net1[root@docker-200 ~]#docker network ls
NETWORK ID NAME DRIVER SCOPE
00dafdbf4726 bridge bridge local
7f0ac5ca9cd1 host host local
5ab8b0856f15 linux0224-net1 bridge local
15fee521bd3c none null local[root@docker-200 ~]#brctl show
bridge name bridge id STP enabled interfaces
br-5ab8b0856f15 8000.024247e06d14 no
docker0 8000.0242ade8ba38 no
[root@docker-200 ~]#
[root@docker-200 ~]#ifconfig
br-5ab8b0856f15: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500inet 192.168.55.1 netmask 255.255.255.0 broadcast 192.168.55.255ether 02:42:47:e0:6d:14 txqueuelen 0 (Ethernet)RX packets 18 bytes 1080 (1.0 KiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 14 bytes 1008 (1008.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0# 使用该网桥,运行容器了docker run -it --network=linux0224-net1 busybox sh
1.网桥 名字 linux0224-net2 子网是 172.14.0.0/16 网关是 172.14.0.1docker network create --driver bridge --subnet 172.14.0.0/16 --gateway 172.14.0.1 linux0224-net2如何查看有那些网桥
docker network ls
ifconfig
brctl show
ip addr 2. 使用该网桥,运行容器
运行一个nginx容器,且对外11155访问,使用自建网桥,日志挂到宿主机的/tmp/nginx_log/docker run --network=linux0224-net2 -d -p 11155:80 -v /tmp/nginx_log/:/var/log/nginx/ nginx3. 查看容器的详细信息
docker inspect 容器id
Destination 挂载点
source 挂载的设备
3. 查看容器的详细信息数据卷信息 -v 的信息,显示到 docker inspect 的 mounts里面端口信息"Ports": {"80/tcp": [{"HostIp": "0.0.0.0","HostPort": "11155"},
[root@docker-200 ~]#
[root@docker-110 ~]# docker exec c66 bash -c "echo hello haohao do i wish you > /usr/share/ng
# 命令修改页面
小结
1.为什么要学习docker网络管理,容器是要提供访问的,以及容器所处的网络环境,ip从哪里获取
2.docker network命令。brctl 命令
3.如何理解docker网桥,虚拟的网络接口veth
4.自建的docker 网桥,设置子网,网关。
```
加强说,ifconfig ,br-自己建网桥id查出2个网桥接口
[root@docker-200 ~]#ifconfig |grep br-
br-5ab8b0856f15: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
br-a0412ee1f5e5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500# 基于过滤器参数,查找网桥相关的接口
[root@docker-200 ~]#docker network ls --filter driver=bridge
NETWORK ID NAME DRIVER SCOPE
00dafdbf4726 bridge bridge local # 是默认的docker0
5ab8b0856f15 linux0224-net1 bridge local
a0412ee1f5e5 linux0224-net2 bridge local#brctl命令[root@docker-200 ~]#brctl show | column -t
bridge name bridge id STP enabled interfaces
br-5ab8b0856f15 8000.024247e06d14 no
br-a0412ee1f5e5 8000.0242ed1d23c5 no vethffee987
docker0 8000.0242ade8ba38 no
[root@docker-200 ~]## 分析,为何 br-a04xxxx 这个网桥,只有它有一个 interfaces网络接口,vethffee9871。查看当前容器进程
[root@docker-200 ~]#docker ps -q
26f8ce3088592.查看该容器的网络信息
[root@docker-200 ~]#docker inspect 26f8ce308859 --format="{{.NetworkSettings.Networks}}"
map[linux0224-net2:0xc00065e000]
=========================================================
也就是如下信息"Networks": {"linux0224-net2": {"IPAMConfig": null,"Links": null,"Aliases": ["26f8ce308859"],"NetworkID": "a0412ee1f5e57a69262c1619625a4de1b04e1e212c016cead532260620913a32","EndpointID": "485d438d855e7bc7b1e5c719b27b1672819c10edec43b58e4c42d2336ce26b26","Gateway": "172.14.0.1","IPAddress": "172.14.0.2","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "02:42:ac:0e:00:02","DriverOpts": null================================================当前运行中的容器,使用网络配置是 ,名字为 linux0224-net2 的网桥
a0412ee1f5e5 linux0224-net2 bridge local[root@docker-200 ~]#docker network ls --filter name=linux0224-net2
NETWORK ID NAME DRIVER SCOPE
a0412ee1f5e5 linux0224-net2 bridge local# 查看网桥和容器的关系[root@docker-110 ~]# docker network ls --filter driver=bridge
NETWORK ID NAME DRIVER SCOPE
fca76ebba6d5 bridge bridge local
e5c6866dbfd1 linux0224-net1 bridge local
b3ca5dd162d9 linux0224-net2 bridge local#brctl命令[root@docker-200 ~]#brctl show | column -t
bridge name bridge id STP enabled interfaces
br-5ab8b0856f15 8000.024247e06d14 no
br-a0412ee1f5e5 8000.0242ed1d23c5 no vethffee987
docker0 8000.0242ade8ba38 no
[root@docker-200 ~]## 分析,为何 br-a04xxxx 这个网桥,只有它有一个 interfaces网络接口,vethffee9871。查看当前容器进程
[root@docker-200 ~]#docker ps -q
26f8ce3088592.查看该容器的网络信息
[root@docker-200 ~]#docker inspect 26f8ce308859 --format="{{.NetworkSettings.Networks}}"
map[linux0224-net2:0xc00065e000]也就是如下信息"Networks": {"linux0224-net2": {"IPAMConfig": null,"Links": null,"Aliases": ["26f8ce308859"],"NetworkID": "a0412ee1f5e57a69262c1619625a4de1b04e1e212c016cead532260620913a32","EndpointID": "485d438d855e7bc7b1e5c719b27b1672819c10edec43b58e4c42d2336ce26b26","Gateway": "172.14.0.1","IPAddress": "172.14.0.2","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "02:42:ac:0e:00:02","DriverOpts": null当前运行中的容器,使用网络配置是 ,名字为 linux0224-net2 的网桥
a0412ee1f5e5 linux0224-net2 bridge local[root@docker-200 ~]#docker network ls --filter name=linux0224-net2
NETWORK ID NAME DRIVER SCOPE
a0412ee1f5e5 linux0224-net2 bridge local# 查看网桥和容器的关