Docker下dubbo開發,三部曲之二:本地環境搭建
在上一篇文章《Docker下dubbo開發,三部曲之一:極速體驗》中,我們快速體驗了dubbo服務的註冊、發現、呼叫,今天我們一起在本地製作一套這樣的環境,經過這次實戰,大家就可以根據實際需求對自己的環境量身定製了。
基礎架構
整個環境由四個容器組成,梳理後相互之間的關係如下圖:
接下來我們按照下面的表格來設計和製作對應的映象:
容器 | 作用 | 映象 | 功能 | link連線 |
---|---|---|---|---|
zk_server | 註冊中心 | zookeeper:3.3.6 | 官方映象 | 無 |
dubbo_admin | 管理平臺 | bolingcavalry/dubbo_admin_tomcat | 定製映象,用tomcat官方映象加dubbo_admin.war生成 | 用別名zkhost連線zk_server |
dubbo_provider | 服務提供者 | bolingcavalry/dubbo_provider_tomcat | 定製映象,用tomcat官方映象加dubboserviceprovider.war檔案生成 | 用別名zkhost連線zk_server |
dubbo_consumer | 服務消費者 | bolingcavalry/online_deploy_tomcat | 定製映象,是個支援線上部署的tomcat | 無 |
特別關注
dubbo_provider和dubbo_consumer是分別用來提供服務和消費服務的,其實是兩個web應用被部署在不同的容器中,一般來說把web應用在docker的tomcat容器中執行起來有兩種方式:
1. 寫Dockerfile檔案做一個定製映象,用tomcat官方映象做基礎映象,在Dockerfile中將war包複製到tomcat的webapps目錄下,dubbo_admin和dubbo_provider都是用這種方式;
2. 執行一個支援線上部署的tomcat容器,然後線上部署war包,具體細節請看《實戰docker,編寫Dockerfile定製tomcat映象,實現web應用線上部署》,dubbo_consumer用的就是這種方式;
很明顯,第一種方式用起來更簡單,在docker-compose.yml中把映象指定了就行,而第二種方式略為麻煩,要自己動手去部署war包;
讀者們可能會有疑問:既然第一種方式簡單,為什麼dubbo_consumer不用這種方式部署呢?其實我之前是用過的,只是在啟動應用的時候會失敗才改成了第二種,詳細原因請看《Docker下部署dubbo,消費者應用無法使用link引數的問題》
下面我們開始本地搭建dubbo體驗環境的過程,首先把所有步驟列出來,然後逐個實現:
1. 映象zk_server不用製作,pull即可;
2. 製作映象dubbo_admin;
3. 製作映象dubbo_provider;
4. 映象dubbo_consumer不用製作,pull即可;
5. 製作docker-compose.yml檔案;
6. 啟動所有容器;
7. 下載、編譯dubbo_consumer對應的原始碼,線上部署到dubbo_consumer容器;
8. 開始體驗;
開始啦:
映象:zk_server
zk_server的作用是註冊中心,其他幾個容器都會用到,自身是個普通的zookeeper,這裡我們用官方映象,啟動一個單機例項即可;
映象:dubbo_admin
這是dubbbo的管理平臺,是個web應用,部署在tomcat下,需要我們手工定製;
首先我們要準備war包,有兩種方式得到war包:
1. 我已經編譯好了,在我的github下載,地址是:https://github.com/zq2599/docker_dubbo_all_in_one,裡面有三個資料夾,dubbo_tomcat目錄下的dubbo-admin.war檔案就是我們需要的war包;
2. 去dubbo的github倉庫下載官方原始碼,然後自己動手編譯,一共需要四步完成,如下:
2.1 執行git clone [email protected]:alibaba/dubbo.git,下載dubbo原始碼;
2.2 下載後,開啟dubbo/dubbo-admin/src/main/webapp/WEB-INF/dubbo.properties這個檔案,修改dubbo.registry.address這個引數的值,修改後dubbo.registry.address=zookeeper://zkhost:2181
2.3 進入dubbo-admin子目錄,執行命令mvn clean package -U -Dmaven.test.skip=true
2.4 mvn執行完成後,在dubbo/dubbo-admin/target目錄下找到dubbo-admin-2.5.4-SNAPSHOT.war檔案,重新命名為dubbo-admin.war;
得到war包後,我們開始製作Dockerfile檔案,內容很簡單,就是以tomcat官方映象為基礎,複製dubbo-admin.war檔案到映象中,另外為了讓訪問url更短,我們把tomcat映象的server.xml替換掉,新的server.xml中把webapps/dubbo-admin目錄配製成了url的根目錄,這樣只要輸入localhost:8080就能訪問dubbo-admin的目錄了;
先看server.xml,內容如下:
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="" docBase="/usr/local/tomcat/webapps/dubbo-admin" debug="0" reloadable="true" crossContext="true"/>
</Host>
</Engine>
</Service>
</Server>
Dockerfile內容如下:
# Docker image of dubbo-admin webapp tomcat
# VERSION 0.0.1
# Author: bolingcavalry
#基礎映象使用tomcat:7.0.77-jre8
FROM tomcat:7.0.77-jre8
#作者
MAINTAINER BolingCavalry <[email protected]>
#定義工作目錄
ENV TOMCAT_BASE /usr/local/tomcat
#複製配置檔案
COPY ./server.xml $TOMCAT_BASE/conf/
#複製war包
COPY ./dubbo-admin.war $TOMCAT_BASE/webapps/
#給配置檔案增加讀許可權
RUN chmod a+xr $TOMCAT_BASE/conf/server.xml
#刪除預設的ROOT檔案件
RUN rm -rf $TOMCAT_BASE/webapps/ROOT
把Dockerfile,server.xml,dubbo-admin.war三個檔案放在同一個目錄下,然後開啟控制檯進入這個目錄,執行以下命令構建映象:
docker build -t bolingcavalry/dubbo_admin_tomcat:0.0.1 .
執行完畢後構建dubbo_admin映象成功,通過docker images命令可以看到;
映象:dubbo_provider
這個映象是個tomcat容器,裡面運行了一個war包,功能是提供服務並註冊到dubbo註冊中心,具體的程式碼我們會在下一章詳細介紹;
和dubbo_admin一樣,我們也配置了server.xml:
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="" docBase="/usr/local/tomcat/webapps/dubboserviceprovider" debug="0" reloadable="true" crossContext="true"/>
</Host>
</Engine>
</Service>
</Server>
接下來是Dockerfile檔案,內容也很簡單,複製war,替換server.xml,刪除原有的root目錄:
# Docker image of dubbo-admin webapp tomcat
# VERSION 0.0.1
# Author: bolingcavalry
#基礎映象使用tomcat:7.0.77-jre8
FROM tomcat:7.0.77-jre8
#作者
MAINTAINER BolingCavalry <[email protected]>
#定義工作目錄
ENV TOMCAT_BASE /usr/local/tomcat
#複製配置檔案
COPY ./server.xml $TOMCAT_BASE/conf/
#複製war包
COPY ./dubboserviceprovider.war $TOMCAT_BASE/webapps/
#給配置檔案增加讀許可權
RUN chmod a+xr $TOMCAT_BASE/conf/server.xml
#刪除預設的ROOT檔案件
RUN rm -rf $TOMCAT_BASE/webapps/ROOT
把Dockerfile,server.xml,dubboserviceprovider.war三個檔案放在同一個目錄下,然後開啟控制檯進入這個目錄,執行以下命令構建映象:
docker build -t bolingcavalry/dubbo_provider_tomcat:0.0.1 .
執行完畢後構建dubbo_provider映象成功,通過docker images命令可以看到;
映象:dubbo_consumer
dubbo_consumer也是web應用,前面已說過此應用的部署方式和dubbo_provider不同,是線上部署,所以映象檔案用bolingcavalry/online_deploy_tomcat:0.0.1,此映象已釋出到hub.docker.com,可以直接使用,它裡面有個tomcat,支援提過maven外掛線上部署,有關此映象的詳情請看《實戰docker,編寫Dockerfile定製tomcat映象,實現web應用線上部署》,請記得修改maven的配置檔案,否則線上部署的鑑權無法通過;
dubbo_consumer對應的war包需要下載對應的原始碼,然後編譯部署,這個我們後面會講到;
製作docker-compose.yml
docker-compose.yml內容如下:
version: '2'
services:
zk_server:
image: daocloud.io/library/zookeeper:3.3.6
restart: always
dubbo_admin:
image: bolingcavalry/dubbo_admin_tomcat:0.0.1
links:
- zk_server:zkhost
depends_on:
- "zk_server"
ports:
- "8080:8080"
restart: always
dubbo_provider:
image: bolingcavalry/dubbo_provider_tomcat:0.0.1
links:
- zk_server:zkhost
depends_on:
- "dubbo_admin"
environment:
TOMCAT_SERVER_ID: dubbo_provider_tomcat
restart: always
dubbo_consumer:
image: bolingcavalry/online_deploy_tomcat:0.0.1
ports:
- "8082:8080"
environment:
TOMCAT_SERVER_ID: dubbo_consumer_tomcat
restart: always
這裡面使用了depends_on引數,是為了保證啟動順序;
啟動所有容器
執行命令:
docker-compose up -d
多個容器啟動成功,如下圖:
dubbo_consumer對應的原始碼編譯和線上部署
編譯程式碼前,要先確定zookeeper的ip,前面執行docker-compose up -d的時候,控制檯提示zookeeper容器的名稱是16_zk_server_1,因此執行以下命令可看zookeeper容器ip:
docker exec -it 16_zk_server_1 ip a
如下圖紅框,ip是172.28.0.3
現在開始下載和編譯原始碼了,dubbo消費者的webapp原始碼地址是:[email protected]:zq2599/blog_demos.git,裡面有多個工程,本次實戰用到的工程是dubbo_service_consumer,如下圖紅框所示:
程式碼下載後,在dubbo_service_consumer/src/main/resources目錄下,開啟spring-extends.xml檔案,修改下圖紅框中的ip,改成zookeeper的ip:172.28.0.3:
執行命令mvn clean package -U -Dmaven.test.skip=true tomcat7:redeploy
mvn執行完成後,web應用已經部署到dubbo_consumer的tomcat上;
開始體驗
以上就是docker下dubbo本地搭建的整個過程,經過本章的實戰,我們已經能夠根據自己的需求訂製dubbo環境了,下一章是dubbo學習的終章,我們一起實戰編碼,學會開發dubbo環境下的服務提供者和消費者;
相關推薦
Docker下dubbo開發,三部曲之二:本地環境搭建
在上一篇文章《Docker下dubbo開發,三部曲之一:極速體驗》中,我們快速體驗了dubbo服務的註冊、發現、呼叫,今天我們一起在本地製作一套這樣的環境,經過這次實戰,大家就可以根據實際需求對自己的環境量身定製了。 基礎架構 整個環境由四個容器組成,梳
Docker下的Spring Cloud三部曲之二:細說Spring Cloud開發
本文是《Docker下的Spring Cloud三部曲》系列的第二篇,詳細講解上一篇例項中用到的eureka、provider、consumer等三個應用的開發過程; 環境資訊 回顧一下實戰環境,如下圖: 原始碼地址 上圖的eureka、
Docker下Java檔案上傳服務三部曲之二:服務端開發
本章是《Docker下Java檔案上傳服務三部曲》的第二篇,上一章《Docker下Java檔案上傳服務三部曲之一:準備環境》我們把客戶端準備好了,Tomcat容器也部署好了,今天就來開發和部署檔案服務的後臺應用吧; 本章實戰內容概要 本章要建立三個w
kubernetes下的Nginx加Tomcat三部曲之二:細說開發
本文是《kubernetes下的Nginx加Tomcat三部曲》的第二章,在《kubernetes下的Nginx加Tomcat三部曲之一:極速體驗》一文我們快速部署了Nginx和Tomcat,達到以下效果: 本文我會詳細說明在kubernetes部署上述網
Docker下實戰zabbix三部曲之二:監控其他機器
在上一章《Docker下實戰zabbix三部曲之一:極速體驗》中,我們快速安裝了zabbix server,並登入管理頁面查看了zabbix server所在機器的監控資訊,但是在實際場景中,應該是對應用伺服器做監控,所以今天我們來實戰將應用伺服器的監控加入到zabbix server中。 全系列文章連結:
自定義spring boot starter三部曲之二:實戰開發
本文是《自定義spring boot starter三部曲》的第二篇,上一篇中我們通過學習spring cloud的starter,對spring boot的starter有了初步瞭解,也設計好了實戰內容,今天就來一起實現; 三部曲文章連結 《自定義spring boot
maven構建docker映象三部曲之二:編碼和構建映象
在《maven構建docker映象三部曲之一:準備環境》中,我們在vmware上準備好了ubuntu16虛擬機器,並且裝好了docker、jdk8、maven等必備工具,現在我們來開發一個java web工程,再用docker-maven-plugin外掛來
Docker搭建disconf環境,三部曲之三:細說搭建過程
Docker下的disconf實戰全文連結 《Docker搭建disconf環境,三部曲之一:極速搭建disconf》; 《Docker搭建disconf環境,三部曲之二:本地快速構建disconf映象》; 《Docker搭建disconf環境,三部曲之三:細說搭建過程》; 《Docker下使用discon
spring4.1.8初始化原始碼學習三部曲之二:setConfigLocations方法
本章是學習spring4.1.8初始化原始碼的第二篇,前一章《spring4.1.8初始化原始碼學習三部曲之一:AbstractApplicationContext構造方法》對AbstractApplicationContext的初始化做了分析,本章我們聚焦
【U3D系統架構教程——開發篇】之二:Log日誌系統2.0
這篇文章由唐三胖ヾ(•ω•`)o網路整理總結,將告訴你如何開發一個高效率的日誌系統。 通過這篇文章,你可以知道 1)C#特性Condtional 2)開發2.0版的日誌系統 開篇介紹 通過上一章節的介紹,我們已經實現了重寫的日誌
elasticsearch實戰三部曲之二:文件操作
本文是《elasticsearch實戰三部曲》系列的第二篇,上一篇文章我們動手熟悉了索引相關的基本操作,現在一起來熟悉文件相關的操作; 系列文章連結 《elasticsearch實戰三部曲之一:索引操作》; 《elasticsearch實戰三部曲之二:文件操作》;
實戰maven私有倉庫三部曲之二:上傳到私有倉庫
在上一章《實戰maven私有倉庫三部曲之一:搭建和使用》我們搭建了maven私有倉庫,並體驗了私有倉庫快取jar包的能力,避免了局域網內開發人員去遠端中央倉庫下載的痛苦等待,本章我們再來體驗私有倉庫的另一個功能:儲存二方庫; 使用場景 mvndemos
docker容器自動化部署落地實踐之二:搭建gitlab(上)
在自動化部署工程的時候 version control這裡會起到一個很重要的作用 當我們完成一段程式碼需要部署的時候 那麼push到version control 讓他幫我們去告訴持續整合工具 說需要構建部署了 那麼持續整合工具才會去弄 本篇文章的gitlab版本非最新版本
CDH5部署三部曲之二:部署和設定
### 歡迎訪問我的GitHub [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) 內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等; ### 本
Flink on Yarn三部曲之二:部署和設定
### 歡迎訪問我的GitHub [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) 內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等; 本文是《
CDH+Kylin三部曲之二:部署和設定
### 歡迎訪問我的GitHub [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) 內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等; ###
CoProcessFunction實戰三部曲之二:狀態處理
### 歡迎訪問我的GitHub [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) 內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等; ###
LVS負載均衡之二:LVS-NAT搭建web群集
ice 其余 連接方式 rest show MF Oz service 高可用 實現LVS的NAT模式 其原理及特點詳細介紹請看LVS負載均衡之一:LVS-NAT、LVS-DR模式的原理詳細介紹 1.實驗環境 IP地址規劃 客戶端訪問服務的請求IP地址:VIP 12.0.0
MQTT研究之mosquitto:【環境搭建】
環境資訊: 1. Linux Centos7.2 環境,CPU 2核,記憶體8G. 2. mosquitto版本:mosquitto-1.5.4 官網:http://mosquitto.org/download/libwebsockets官網: https://libwebsockets.org/ 本
Docker下RabbitMQ延時佇列實戰兩部曲之二:細說開發
本章是《Docker下RabbitMQ延時佇列實戰兩部曲》的終篇,上一章《Docker下RabbitMQ延時佇列實戰兩部曲之一:極速體驗》我們快速體驗了延時佇列的生產和消費,今天來實戰整個開發過程; SpringBoot框架下進行RabbitMQ開發,相關