【docker】- docker自定义网络

上期我们说了docker数据卷解决宿主机与容器数据挂载问题:上期文章:
【docker】- docker数据卷技术

前言

我们在项目部署时,往往会部署多台容器,例如:java项目的上线,肯定会有数据库吧(举个例子,数据库并不会容器化),那多台容器之间要怎样通信呢

正常的思路来说呢,tomcat暴露8080端口,mysql暴露3306,tomcat通过127.0.0.1:3306与mysql进行连接

完全可以实现,但是有个问题哈,127.0.0.1:3306这样也就意味着3306端口开放了,公网ip+端口也可以连接你的数据库,数据库很可能遭到攻击,被暴力破解

那有没有一种方式,数据库只能让tomcat进行访问,公网无法访问,答案是有的

在实际部署中,服务端只会暴露网关,各服务、组件之间均是内网访问

docker容器也是有ip的,安装docker后会有一个docker0网卡,每启动一个docker容器,docker就会给docker容器分配一个ip,都是桥接在这个网卡上面

命令:docker inspect 容器id

在这里插入图片描述

言归正传

首先说说我们的实验期望

  1. 启动两个容器,假设第一个的ip是172.12.0.2,第二个的ip是172.12.0.3,在未指定网卡的前提下,默认桥接到docker0网卡,那他们的ip之间是可以互通的
  2. 那么如果ip发生了变化,就会导致容器之间无法通信,我们使用自定义网络实现容器名网络互通,使用容器名进行通信

下面我们先执行两条命令,创建一个centos(tomcat容器中无ping命令,需要自行安装),一个mysql

docker run -d -p 5022:22 --privileged --name docker-network-centos centos:8 /usr/sbin/init
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name docker-network-mysql mysql:5.7

在这里插入图片描述

查看mysql的容器ip

docker inspect docker-network-mysql  # 172.17.0.2

进入docker-network-centos容器,使用ping命令测试容器ip通信是否正常

在这里插入图片描述

那我们试试容器名呢?答案是不可以的

在这里插入图片描述

常用命令

  • docker network create 网络名称 创建自定义网络
  • docker network connect 网络名称 容器名称 连通网络与容器
  • docker network ls 查看网络列表

创建一个网卡名为 docker-network

在这里插入图片描述
连通docker-network-centos、docker-network-mysql

在这里插入图片描述

进入docker-network-centos容器,使用ping命令ping docker-network-mysql

在这里插入图片描述

看到了吗,是通的,分配的ip为172.19.0.3,简单分析一下,看下图

在这里插入图片描述

使用inspect查看容器详情,绑定了两块网卡,因为我们使用的是连通,刚才的通信实际是第二块网卡在通信

大伙会有疑问哈,这有什么用?

我给大家举两个例子

1、下面这个配置熟悉吗,mysql的配置文件呗,ip写死明显不,如果部署了,ip有变化,重新改呗

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://120.3.34.134:10086/cxs_currency_sys?useUnicode=true&useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    username: cxs_currency_sys
    password: cxs2022
    database: cxs_currency_sys
    type: com.alibaba.druid.pool.DruidDataSource

那自定义网络之后,就可以这样写,一下子就高大上了

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://docker-network-mysql:3306/cxs_currency_sys?useUnicode=true&useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    username: cxs_currency_sys
    password: cxs2022
    database: cxs_currency_sys
    type: com.alibaba.druid.pool.DruidDataSource

2、假设我这个mysql不想暴露端口,那我可以这样启动
在这里插入图片描述

发现了没有,没有-p参数,意味着这台mysql没有对外暴露端口,你通过10.10.10.10无法连接(端口都没有暴露)

但是我告诉你,在docker-network-mysql容器中(选择它是因为里面有mysql环境),我可以连接到,它的端口就是3306,默认的
在这里插入图片描述
那有些小伙伴还会有个问题,那我通过10.10.10.10:3306可以吗,答案是不可以,3306端口已经分配给docker-network-mysql了,docker-network-mysql-2压根就没有绑定宿主机端口,既然没暴露,就不存在外网攻击了

关于后续
  • 关于docker的内容,后续还会持续更新
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈小白.

感谢老板,祝老板今年发大财!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值