当前位置: 首页 > 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# 查看网桥和容器的关

总结

在这里插入图片描述

http://www.xdnf.cn/news/1002547.html

相关文章:

  • 【MV】key_moments 与 continuous_timeline的编排权衡
  • Git 清理指南:如何从版本库中移除误提交的文件(保留本地文件)
  • 解决数字超出不会自动换行问题
  • HNCTF部分总结复现
  • 力扣刷题——二分查找
  • Android 开发中,Intent 和 Bundle 组件间传递数据的几种方式
  • 基于Node.js的线上教学系统的设计与实现(源码+论文+调试+安装+售后)
  • 如何“下载安转Allure”?
  • #pragma pack的作用
  • 海外广告投放|FB IG 速推帖子有效吗?
  • 2.倒排索引
  • Mitsubishi GX Works3 / GOT3 的惡意工程混淆邏輯注入攻擊
  • Parasoft C++Test软件集成测试(部件测试)_实例讲解
  • C++的学习路径
  • 第一个简单的爬虫
  • 一起了解--CAST函数
  • C++上学抄近路 动态规划算法实现 CCF信息学奥赛C++ 中小学普及组 CSP-J C++算法案例学习
  • Spring Boot 项目中如何划分事务边界,避免长事务?
  • yolo11学习笔记
  • ajax访问阿里云天气接口,获取7天天气
  • C++ 引用
  • get_attribute的使用方法
  • 【小根堆】P9557 [SDCPC 2023] Building Company|普及+
  • Spring Cloud Gateway + OAuth2 + JWT 单点登录(SSO)实现方案
  • Java八股文——MySQL「SQL 基础篇」
  • 随记:sw2urdf插件导出urdf模型在ROS2-rviz2显示
  • 在Vue2项目中引入ElementUI详细步骤
  • Linux系统下安装elasticsearch6.8并配置ik分词
  • 【Java】浅谈ScheduledThreadPoolExecutor
  • Python实战应用-Python实现Web请求与响应