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

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"
        }
    }
]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值