当前位置: 首页 > news >正文

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# 查看网桥和容器的关

总结

在这里插入图片描述

相关文章:

  • Ubuntu apt-get安装-报错:尝试“apt --fix-broken install”有未能满足的依赖关系,几种解决办法
  • 中间件是微服务架构的支撑工具,微服务是中间件的应用场景之一。
  • AI大模型竞赛升温:百度发布文心大模型4.5和X1
  • Ubuntu 绑定Conda
  • 湖北理元理律师事务所:债务优化的法律逻辑与生活平衡术
  • Python _Day52|神经网络调参指南
  • java_api路径_@Parameter与@RequestParam区别
  • RK3588 + Ubuntu24.04 部署 rknn 模型——不用[特殊字符]版全流程教程
  • R语言缓释制剂QBD解决方案之五
  • 机器学习 [白板推导](六)[核方法、指数族分布]
  • Local All-Pair Correspondence for Point Tracking
  • Rollup vs Webpack 深度对比:前端构建工具终极指南
  • WWDC 2025 开发者特辑 | 肘子的 Swift 周报 #088
  • 蓝桥杯国赛训练 day4
  • 【ffmpeg】windows端安装ffmpeg
  • gRPC 与 JSON 之间的类型映射规则
  • 使用MetaGPT 创建智能体(3)常用操作和晋级
  • AI的“GPT时刻”已过,真正的“电网时刻”正在到来
  • Doris与DS结合实现MySQL侧的Upsert功能
  • 洞察分享 | 工业自动化的未来已来:边缘计算如何成为新增长引擎?
  • 中国被墙的网站/搜易网服务介绍
  • wordpress显示评论数/上海网站建设优化
  • 兰州网络公司网站/seo广告
  • zencart 一个产品网站下单/百度的广告
  • 武汉云时代网站建设公司怎么样/重庆seo网络优化咨询热线
  • 做图片祝福的网站/衡阳seo优化首选