走进Dubbo——使用Docker部署运行

前言

从这里开始,我们讲如何将dubbo部署在docker内,docker-compose的demo也已经上传

我们为什么要使用Docker?当我告诉你,只需要安装好docker,然后解压demo,敲入一个命令,dubbo就能跑起来,不需要额外下载zookeeper,甚至我在mac下打包的,win下也能跑,linux下也能跑,心动吗(当然这和java的跨平台特性也分不开)?

其实我自己就没有下zookeeper,而是直接用docker跑的,因为我厌倦了电脑上多出一堆乱七八糟的图标,跑代码之前还要进入乱七八糟的目录运行乱七八糟的依赖。

如果非要简单地说docker是什么,那我觉得docker可以看做是虚拟机。但是它和虚拟机动轨几十G的镜像大小不同,它是轻量级的(不仅空间占用小,还有“云电脑的感觉”,运行所需资源也小于虚拟机)。我认为它做到轻量级的重要原因有两个

  • 复用了系统的内核等资源,而不是从最底层构建“虚拟机”,因此不需要包含一个完整的操作系统,自然占用的空间就小了
  • 应用本身和用户数据是相互分离的。应用程序=应用+数据,数据是应用在运行过程中产生的,比如MySQL刚安装完需要1G空间,这些空间就是用于容纳MySQL应用的;而数据表这些内容则是在服务器运行过程中不停地CRUD产生的。我们部署应用的时候,希望应用可以自动安装,而数据只要拷贝到指定的位置,让应用自动读取,这样就能完全恢复应用之前的状态。而docker就可以将应用通过镜像的机制进行配置、下载和运行,并且在运行时进行目录挂载。拿我们的dubbo部署来说,我们需要zookeeper镜像和jdk镜像(jre也够用了,但是没有新版本的jre),启动zookeeper之后,把包含我们duboo jar包的目录挂载到jdk镜像的环境中运行即可。别说zookeeper,甚至jdk都不用配置!

相信大家应该看得很明白了,docker就像一个百宝箱,里面啥环境都有(实在没有就自己创造新的环境),我们只要带着数据进去运行程序就好了,甚至不用考虑平台(前提是数据没有平台差异,非要带着dll这样的动态链接库可就没办法了),期间也不用安装任何别的软件,很绿色,不用担心开发个程序把自己的电脑搞得乱七八糟了!

首先,请安装Docker!Docker的下载和安装都比较简单,也不需要注册账号(和某O的jdk不一样)。如果很想全面一些地学习Docker,可以参考官方教程

docker安装好的标准是,在终端输入docker并回车,有反应。设置了环境变量之后记得开一个新的终端(甚至重启)再试。

如果是跑demo,可以直接跳到后面的docker-compose部分执行命令,前面的只是进行引导和说明。

Docker的基本概念

虽然刚刚略有提及,但是还是要强调一下这里需要使用到的docker的一些基本术语。

  • 镜像:可以认为是包含某个特定应用的环境,我们可以带着自己的数据进去直接运行程序
  • Tags:其实它和镜像有很大关系。比方说同样是jdk镜像,有的人需要使用jdk8,有的人喜欢jdk11等,因此在使用镜像的时候通常还要指定tag,可以认为是指定了镜像的版本。如果不指定,默认为最新版。
  • 卷:存放数据的地方,可以是一个docker管理的卷,也可以是我们本地的一个目录,还可以是nfs等方式挂载的网络卷(远比vmware等虚拟机共享文件设置来得方便)
  • 网络:每个docker的节点都相当于一个独立的计算机,拥有一个独立的ip地址和全部的端口资源。既然我们的应用会在多个docker实例中运行,那说明我们的应用是多个部分可解耦的,比如后端是个java程序,前端是通过nginx部署,数据库是个mysql,缓存是个redis——它们之间显然,使用网络进行通信。我不想解释什么同一网段、子网掩码之类的概念,只想简单地说,起码这些应用都得在同一个网络下吧?两台没有网线相连的机器是不可能通过网络相互通信的!所以我们简单地认为,网络功能就是创建了个虚拟的路由器,把这些应用所在的计算机都连在了一起

使用docker跑zookeeper

这个很简单,一句话解决

docker run -dp 2181:2181 zookeeper

这里解释一下这条命令:

  • -dp是-d和-p的缩写,d表示detached,“分离的”,也就是在后台运行;p表示端口映射,
  • 2181:2181表示将本地的2181端口映射到容器内部的2181.前面的表示本机端口——如果不和本机的端口建立联系,那我们的应用怎么相互通信?

如果你是第一次运行,应该会看到docker先会从远端拉取zookeeper镜像,然后运行起来。

这时敲入

docker ps

应该能看到刚刚运行的镜像

使用docker跑provider&provider

猜猜这一步我们要用什么镜像?对的,jdk!这里引入一个概念,叫做docker hub。就像我们使用github拉取代码一样,可以从docker的仓库拉取镜像。

docker hub的网址是https://hub.docker.com/。在左上方检索java,进入openjdk的

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值