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

Docker网络模式实战

docker的镜像是令人称道的地方,但网络功能还是相对薄弱的部分

docker安装后会自动创建3种网络:bridge、host、none

docker原生bridge网路

docker安装时会创建一个名为 docker0 的Linux bridge,新建的容器会自动桥接到这个接口

docker安装时会创建一个名为 docker0 的Linux bridge,新建的容器会自动桥接到这个接口

  • bridge模式下容器没有一个公有ip,只有宿主机可以直接访问,外部主机是不可见的。

  • 容器通过宿主机的NAT规则后可以访问外网

docker原生网络host

host网络模式需要在容器创建时指定 --network=host host模式

可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少 隔离性

 docker run -it --name test  --network host busybox
#如果公用一个网络,那么所有的网络资源都是公用的,比如启动了nginx容器那么真实主机的80端口被占
用,在启动第二个nginx容器就会失败

docker 原生网络none

none模式是指禁用网络功能,只有lo接口,在容器创建时使用--network=none指定。

docker的自定义网络

docker提供了三种自定义网络驱动:

  • bridge

  • overlay

  • macvlan

bridge驱动类似默认的bridge网络模式,但增加了一些新的功能,

overlay和macvlan是用于创建跨主机网络

自定义桥接网络

[root@k8s-master ~]#  docker network create my_net1
f40b3816e3871d65cd52db8720c5912faf5a2929e56455db4f2ae0b606ae6d2f
[root@k8s-master ~]#  docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
e8c1c59371c7   bridge    bridge    local
7172dc5dc9d3   host      host      local
f40b3816e387   my_net1   bridge    local
5451367be09b   none      null      local

桥接默认是单调递增

桥接也支持自定义子网和网关 

[root@k8s-master ~]#  docker network create my_net2 --subnet 192.168.0.0/24 --gateway  192.168.0.100
aee5e62af64a74d6b4c4dcf38b01b8f94932d2d8966560c8706bed82b33d41bf
[root@k8s-master ~]#  docker network  inspect my_net2
[
    {
        "Name": "my_net2",
        "Id": "aee5e62af64a74d6b4c4dcf38b01b8f94932d2d8966560c8706bed82b33d41bf",
        "Created": "2025-03-02T05:23:21.965532026-05:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "192.168.0.0/24",
                    "Gateway": "192.168.0.100"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

 为什么要自定义桥接?

 docker引擎在分配ip时时根据容器启动顺序分配到,谁先启动谁用,是动态变更的

多容器互访用ip很显然不是很靠谱,那么多容器访问一般使用容器的名字访问更加稳定

docker原生网络是不支持dns解析的,自定义网络中内嵌了dns

web1:

web2:

 

 #关闭容器后重启容器,启动顺序调换
[root@docker ~]# docker stop web1 web2
 web1
 web2
 [root@docker ~]# docker start web2
 web2
 [root@docker ~]# docker start web1
 web1
 #我们会发容器ip颠倒

如何让不同的自定义网络互通?

[root@k8s-master ~]#  docker run -d  --name web1 --network my_net1 nginx
[root@k8s-master ~]#  docker run  -it --name test --network my_net2 busybox
[root@k8s-master ~]#  docker run  -it --name test --network my_net2 busybox
/ # ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:C0:A8:00:01  
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

/ # ping 172.18.0.2
PING 172.18.0.2 (172.18.0.2): 56 data bytes
#可见ping不通,接下来连接网络
[root@k8s-master ~]#  docker network connect my_net1 test
/ # ping 172.18.0.2
PING 172.18.0.2 (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.362 ms
64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.164 ms

 

joined容器网络

Joined容器一种较为特别的网络模式,•在容器创建时使用--network=container:vm1指定。

处于这个模式下的 Docker 容器会共享一个网络栈,这样两个容器之间可以使用localhost高效快速通 信。

[root@k8s-master ~]#  docker run  -it --rm  --network container:web1 busybox

[root@k8s-master ~]#  docker run  -it --rm  --network container:web1 centos:7
Unable to find image 'centos:7' locally
7: Pulling from library/centos
2d473b07cdd5: Pull complete 
Digest: sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Status: Downloaded newer image for centos:7
[root@7dd2aec1b01b /]#  curl localhost
<!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>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

joined网络示例演示

利用容器部署phpmyadmin管理mysql

[root@k8s-master ~]# docker run -d --name mysqladmin --network my_net1 -e PMA_ARBITRARY=1 -p 80:80 phpmyadmin:latest
[root@k8s-master ~]#  docker run  -d --name mysql -e MYSQL_ROOT_PASSWORD='lee'  --network container:mysqladmin mysql:5.7

 

相关文章:

  • 大白话css第六章深入探索前沿技术、性能极致优化以及参与社区与知识沉淀
  • 6-1JVM的执行引擎处理
  • keil5模块化编程
  • JavaScript 变量概述
  • 第二十六天:Scrapy 框架-下载中间件Middleware
  • EL表达式和JSTL标签
  • Python 如何实现 Markdown 记账记录转 Excel 存储
  • RabbitMQ 常见问题
  • PostgreSQL 生产环境升级指南:pg_upgrade 快速完成版本升级!
  • 计算机毕业设计SpringBoot+Vue.js智能无人仓库管理系统(源码+文档+PPT+讲解)
  • 如何安装配置Goland并使用固定公网地址SSH远程连接本地服务器
  • MagicArticulate: Make Your 3D Models Articulation-Ready 论文解读
  • Spring项目-抽奖系统(实操项目-用户管理接口)(THREE)
  • Linux中读写锁详细介绍
  • 数学建模:MATLAB极限学习机解决回归问题
  • 整流桥选型关注参数
  • 卫星网络仿真平台:IPLOOK赋能空天地一体化通信新生态​
  • 排序大合集之冒泡
  • Hive-04之存储格式、SerDe、企业级调优
  • 记录一次FastDFS内部文件迁移过程
  • 烟台做网站打电话话术/短视频培训机构
  • 仿历史网站模板下载/网络推广网站程序
  • 网站建设实训主要收获及体会/ seo won
  • 免费ppt模板在线下载/seo内容优化方法
  • 江油网站制作/磁力蜘蛛搜索引擎
  • 重庆綦江网站制作公司哪家专业/佛山百度seo代理