ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Docker学习-------Docker和Dokcer-compose的网络

2021-08-01 12:02:31  阅读:405  来源: 互联网

标签:容器 compose 网络 ------- 虚拟 Docker docker louyu


Docker网络

理解Docker0

测试,进入一个docker容器中,查看其网络环境

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QYPcIA49-1627788936873)(C:\Users\Think\AppData\Roaming\Typora\typora-user-images\image-20210527215829993.png)]

三个网络

#问题: docker是如何处理容器网络访问的?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zbfkzdZF-1627788936878)(C:\Users\Think\AppData\Roaming\Typora\typora-user-images\image-20210527215958403.png)]

#查看容器的内部网络地址 ip addr

#docker exec -it tomcat01 ip addr
#linux可以ping通docker容器内部

原理

#每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,就会又一个网卡docker0桥接模式,使用的技术是veth-pair技术! veth-pair充当一个桥梁,连接各种虚拟网络设备的协议 
# veth virtual ethernet 虚拟网卡

介绍一些网络知识

在我们使用虚拟机的时候,经常会有桥接模式和NAT模式去配置
bridged networking(桥接模式):虚拟出来的容器就像局域网中的一个独立的主机,它可以访问网内的任意一台机器。如果使用的VMWare,在这种模式下还需要自己手动的配置IP地址、子网掩码,并且还要和宿主机处于同一网段,这样虚拟系统才能和宿主机进行通讯
NAT模式:Network address translation,使用NAT模式,就是让虚拟系统借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网。NAT模式下的虚拟系统的TCP/IP配置信息有VMnet(NAT)虚拟网络的DHCPserver提供,无法手动修改,因此虚拟系统也就无法和本局域网中的其他真实主机进行通讯。采用NAT模式最大的优势就是接入互联网很easy。
因此使用docker-compose 去进行容器间通讯的网络,默认是桥接模式。

3、我们来测试一下tomcat01和tomcat02

# 容器和容器之间是可以相互ping通的!

在这里插入图片描述

结论:tomcat01和tomcat02是共用一个路由器,docker0

所有的容器不指定网络的情况下,都是docker0路由的,docker会给我们的容器分配一个默认的可用ip

–link

思考一个场景,我们编写了一个微服务,database url=ip; 项目不重启,数据库ip换掉了,我们希望处理这个问题,可以名字来进行访问容器?

使用docker-compose去部署,可以在同个网络下去通过域名去访问

小结

Docker使用的是Linux的桥接,宿主机中是一个Docker容器的网桥 docker0

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jfE4QcmW-1627788936882)(C:\Users\Think\AppData\Roaming\Typora\typora-user-images\image-20210528113428316.png)]

Docker中的所有的网络接口都是虚拟的。虚拟的转发效率高!

只要容器删除,对应网桥一对就没了!

Docker Compose 网络规则

网络规则:

查看网络

[root@VM-16-12-centos louyu_pure]# docker network ls
NETWORK ID          NAME                  DRIVER              SCOPE
4428d4d0c09e        bridge                bridge              local
16ee19ed647f        host                  host                local
5fd188828ce6        louyu_pure_app_net    bridge              local
3d93dd81bd1b        none                  null                local
5064e48e1778        old_louyu_2_app_net   bridge              local

一个项目中如果有10个服务(项目中的服务都在通过网络域名访问去进行访问)

类似去连接数据区 ,不再通过IP:3306去连接数据库。

url: jdbc:mysql://louyu_mysql:3306/louyu?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8

通过域名连接数据库可以避免了IP改变后,自己还要去维护修改程序中的数据连接。

查看网络细节:

查看docker-compose的内部网络中,发现各个容器都在一个网段下,都有自己的域名
因此通过docker-compose打包的项目,可以通过网络域名去进行访问

docker network insepct xxx

[root@VM-16-12-centos louyu_pure]# docker network inspect louyu_pure_app_net
[
    {
        "Name": "louyu_pure_app_net",
        "Id": "5fd188828ce6531dcf77e201fc5710986c0c00d1c6426dfd4a7f3b59e8a1e795",
        "Created": "2021-07-31T11:05:15.330757936+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Containers": {
            "17d5dddb14c24f2c18bb283c234da26beea5c1547116f635fff1d6563d051205": {
                "Name": "louyu_show",
                "EndpointID": "9c461ce70f814283511d5ecfc170473224e9457539beb9819d8aa5fa40fdca19",
                "MacAddress": "02:42:ac:13:00:05",
                "IPv4Address": "172.19.0.5/16",
                "IPv6Address": ""
            },
            "66375ae1816a7b41bfb59622224fc40360f36faef314bb5eaf9070c97ad5627e": {
                "Name": "louyu_mysql",
                "EndpointID": "ea666cf12dbb7b5d01237e32a62febc77432812ecdc438d3eb4b24b15149c3ba",
                "MacAddress": "02:42:ac:13:00:03",
                "IPv4Address": "172.19.0.3/16",
                "IPv6Address": ""
            },
            "d8f1e4fa521fb2661f357d758709a81187739dfd59d73e65fce691d7bac62678": {
                "Name": "louyu_serv",
                "EndpointID": "4b158585d7a61f26945369f841d2fc4cc48a4e2cf135bfba39661147139cbfe9",
                "MacAddress": "02:42:ac:13:00:04",
                "IPv4Address": "172.19.0.4/16",
                "IPv6Address": ""
            },
            "f609b22ac59bbf071c8ce73315d40271d832654930f6817c8a30386cdcc30509": {
                "Name": "louyu_redis",
                "EndpointID": "0865d8ecef37a9f9450376aadde4cfdee22ebc513cbcb7377809a1af64d06dd1",
                "MacAddress": "02:42:ac:13:00:02",
                "IPv4Address": "172.19.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "app_net",
            "com.docker.compose.project": "louyu_pure",
            "com.docker.compose.version": "1.21.2"
        }
    }
]

标签:容器,compose,网络,-------,虚拟,Docker,docker,louyu
来源: https://blog.csdn.net/ohwang/article/details/119296159

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有