您可以在本地的開發工具中使用命令將應用程序打包為WAR包或JAR包,基于WAR包或JAR包制作鏡像,再將鏡像上傳到阿里云鏡像倉庫來部署應用。本文介紹如何通過編寫Dockerfile文件構建EDAS應用鏡像,以及如何將鏡像上傳到阿里云鏡像倉庫。
前提條件
在制作應用鏡像前,請查閱附錄:運行時環境變量信息,同時參考以下內容制作EDAS應用鏡像。
使用說明
本文涉及的Dockerfile及鏡像內容可通過GitHub倉庫自行查閱。
使用規范和限制
通過Dockerfile制作EDAS應用鏡像時,需要遵循以下規范及限制。
服務信息
包含運行時所需連接的EDAS域名、端口等信息。
表 4. 資源
資源類型
資源名稱
描述
ConfigMap
edas-envs
EDAS服務信息。
表 5. 環境變量
環境變量Key
類型
描述
EDAS_ADDRESS_SERVER_DOMAIN
String
配置中心服務域名或IP。
EDAS_ADDRESS_SERVER_PORT
String
配置中心服務端口。
EDAS_CONFIGSERVER_CLIENT_PORT
String
ConfigServer服務端口。
必需:應用運行時環境變量
EDAS部署時會提供自有的環境變量Env,保證應用運行正常,請勿覆蓋配置,請參見附錄:運行時環境變量信息。
創建標準Dockerfile
Dockerfile是一個文本格式的配置文件,您可以使用Dockerfile快速創建鏡像。
您可以根據實際應用框架,通過Dockerfile分別制作HSF、Spring Cloud或Dubbo應用鏡像。下面將通過示例分別介紹如何創建這些不同框架應用的Dockerfile。
一個EDAS標準Dockerfile描述了EDAS創建應用運行環境的所有指令,包括下載、安裝和啟動OpenJDK、Tomcat、WAR包和JAR包等。 您還可以通過改變Dockerfile內容,完成如OpenJDK版本替換、Tomcat配置修改、改變運行時環境等操作。關于OpenJDK的使用指導,請參見自定義鏡像:使用新版本的OpenJDK。
關于Dockerfile的使用可參考如下文檔:
HSF應用的Dockerfile示例
# Using the centos7 + openjdk8 + ali tomcat7 + pandora 3.5.9 for the base
FROM apaas-registry.cn-hangzhou.cr.aliyuncs.com/apaas/edas-centos-openjdk8-alitomcat7:latest
MAINTAINER Alibaba Cloud EDAS Team<edas-**@list.alibaba-inc.com>
ENV TZ="Asia/Shanghai"
# Default put your application package into /home/admin/app/
ENV APP_HOME /home/admin/app/
#####----> First case: deploy a fat-jar file
ARG APP_LOCATION=https://edas-hz.oss-cn-hangzhou.aliyuncs.com/prod/demo/HSF_PROVIDER.jar
#####----> Second case: deploy a war file, simply change the file name you wanted.
#ARG APP_LOCATION=https://edas-hz.oss-cn-hangzhou.aliyuncs.com/prod/demo/HSF_PROVIDER.war
#####----> Third case: deploy a local storage file.
#ARG APP_LOCATION=/Users/yanliang.lyl/workspace/java/demo/HSF_PROVIDER.war
# Then download the package into /home/admin/app/
ADD ${APP_LOCATION} ${APP_HOME}/
# Default working dir is set to /home/admin
# WORKDIR /home/admin
# Entry point set to /home/admin/bin/start.sh,
# which including inside basic image (apaas/edas-centos-openjdk8-alitomcat8)
# CMD ["/home/admin/bin/start.sh"]
Spring Cloud或Dubbo應用的Dockerfile示例
# Using centos7 + openjdk8 + tomcat8 for the base
FROM apaas-registry.cn-hangzhou.cr.aliyuncs.com/apaas/edas:latest
# Default put your application package into /home/admin/app/
ENV APP_HOME /home/admin/app/
##### SIMPLE REPLACE YOUR PACKAGE FILE
#####----> First case: deploy a fat-jar file
ARG APP_LOCATION=https://edas-hz.oss-cn-hangzhou.aliyuncs.com/prod/demo/DUBBO_PROVIDER.jar
#####----> Second case: deploy a war file, simply change the file name you wanted.
#ARG APP_LOCATION=https://edas-hz.oss-cn-hangzhou.aliyuncs.com/prod/demo/DUBBO_PROVIDER.war
#####----> Third case: deploy a local storage file.
#ARG APP_LOCATION=/Users/yanliang.lyl/workspace/java/demo/SPRINT_CLOUD_PROVIDER.war
# Then download the package into /home/admin/app/
ADD ${APP_LOCATION} ${APP_HOME}/
EDAS基礎鏡像說明
您可以根據您應用的運行環境,自由選擇以下的基礎鏡像:
鏡像名稱 | OS版本 | Java版本 | Tomcat版本 | Pandora版本 | 備注 |
apaas-registry.cn-hangzhou.cr.aliyuncs.com/apaas/edas | CentOS 7 | OpenJDK 1.8 | 8.5.78 | N/A | 與apaas/edas-centos-openjdk8-tomcat8相同,最新版本號為:latest |
apaas-registry.cn-hangzhou.cr.aliyuncs.com/apaas/edas-centos-openjdk8-tomcat8 | CentOS 7 | OpenJDK 1.8 | 8.5.78 | N/A | 普通SpringCloud或Dubbo應用推薦使用此版本,最新版本號為:latest |
apaas-registry.cn-hangzhou.cr.aliyuncs.com/apaas/edas-centos-openjdk8-tomcat7 | CentOS 7 | OpenJDK 1.8 | 7.0.93 | N/A | 基于Tomcat 7.x的普通SpringCloud或Dubbo應用推薦使用此版本,最新版本號為:latest |
apaas-registry.cn-hangzhou.cr.aliyuncs.com/apaas/edas-centos-openjdk8-alitomcat8 | CentOS 7 | OpenJDK 1.8 | 8.5.37 | 3.5.9 | 基于Tomcat8.x的HSF應用推薦使用此版本,最新版本號為:latest |
apaas-registry.cn-hangzhou.cr.aliyuncs.com/apaas/edas-centos-openjdk8-alitomcat7 | CentOS 7 | OpenJDK 1.8 | 7.0.92 | 3.5.9 | 基于Tomcat7.x的HSF應用推薦使用此版本,最新版本號為:latest |
apaas-registry.cn-hangzhou.cr.aliyuncs.com/apaas/edas-centos-openjdk8-alitomcat8-v4 | CentOS 7 | OpenJDK 1.8 | 8.5.37 | 4.0.2 | 基于Tomcat8.x的HSF 4.0應用推薦使用此版本,最新版本號為:latest |
apaas-registry.cn-hangzhou.cr.aliyuncs.com/apaas/edas-centos-openjdk8-alitomcat7-v4 | CentOS 7 | OpenJDK 1.8 | 7.0.92 | 4.0.2 | 基于Tomcat7.x的HSF 4.0應用推薦使用此版本,最新版本號為:latest |
更多鏡像請訪問aPaaS Docker Hub官方鏡像倉庫;同時,如果您需要額外的基礎鏡像,請加入釘群(釘群號:31723701)聯系產品技術專家咨詢處理;如果您對我們的基礎鏡像有任何疑問,請參見基礎鏡像Dockerfile的GitHub地址。
自定義鏡像:使用新版本的OpenJDK
您可以在創建的標準Dockerfile上根據實際需求進行自定義設置。
升級OpenJDK:在Dockerfile中,可下載和安裝新版本的OpenJDK,以下示例為下載安裝OpenJDK 9。
# 先卸載之前的JDK,然后再下載安裝OpenJDK 9
RUN yum erase -y java; yum -y install java-1.9.0-openjdk-devel
自定義鏡像:升級EDAS Container版本(HSF應用)
對于部署到容器服務K8s集群中的HSF應用,為使用中間件的新特性或修復原有版本的問題,可以升級應用容器版本。升級步驟如下:
登錄EDAS控制臺。
在左側導航欄,選擇 。
在應用列表頁面,單擊創建應用,在應用基本信息頁面應用運行環境區域,查看并獲取Pandora版本和Ali-Tomcat版本。
替換Dockerfile中的版本號信息,如3.5.4。
# 設置 EDAS-Container/Pandora 應用容器版本 ENV UPGRADED_CONTAINER_VERSION 3.5.4 RUN /home/admin/bin/upgradecontainer.sh
重新制作并發布應用鏡像。
自定義鏡像:在鏡像中調整JVM啟動參數
基于基礎鏡像中的JVM參數,我們將通過JAVA_OPTS環境變量進行傳遞,下例中說明了如何修改JVM啟動參數的方式:
FROM apaas-registry.cn-hangzhou.cr.aliyuncs.com/apaas/edas:latest
# 設置JVM參數ENV
JAVA_OPTS="\
-Xmx3550m \
-Xms3550m \
-Xmn2g \
-Xss128k"
自定義鏡像:SpringBoot類型的應用修改應用配置
基于EDAS基礎鏡像中的部署FatJar類型的應用,如果需要修改Tomcat的啟動配置如:Context Path、啟動端口、參數等,將借助APP_ARGS環境變量進行傳遞,舉例如下。
FROM apaas-registry.cn-hangzhou.cr.aliyuncs.com/apaas/edas:latest
# 基礎鏡像中的默認配置為:
# - context path為 "/" ,
# - uri編碼為ISO-8859-1
# - 應用啟動端口為8080,
# - tomcat處理線程池數量為400
# 您也可以通過復寫APP_ARGS這個環境變量來修改默認配置,如下:
ENV APP_ARGS="--server.context-path=/ \
--server.tomcat.uri-encoding=ISO-8859-1 \
--server.port=8080 \
--server.tomcat.max-threads=400"
在本地構建鏡像
從本地命令行進入Dockerfile所在的目錄,執行docker build命令構建鏡像。
docker build -t [標簽名稱,最好取應用名]:[版本號] . 或docker build -t [標簽名稱,最好取應用名]:[版本號] -f /path/to/custom_dockerfile_name . # 假如您創建好的Dockerfile在其他位置或名稱不為Dockerfile時適用。
例如:
docker build -t hsf-provider:1.0.0 .
然后使用
docker images | grep<鏡像標簽名稱>
命令查看本地打包好的鏡像。
上傳鏡像到鏡像倉庫
您在本地生成構建好的應用鏡像后,便可上傳到阿里云提供的容器鏡像倉庫。
需提前登錄容器鏡像倉庫控制臺,根據您EDAS中應用(已經創建或尚未創建)所在的地域,在阿里云鏡像倉庫控制臺切換到對應的地域,查看鏡像倉庫列表,然后選擇一個已經存在或者新創建的鏡像倉庫存放打包好的應用鏡像。倉庫名稱最好是應用名稱,便于識別。
執行指定鏡像倉庫基本信息頁面提供的3.將鏡像推送到Registry相關命令,將本地鏡像上傳到該鏡像倉庫。
docker login --username=[當前登錄的賬號名] registry.[region_id].aliyuncs.com # 這一步輸入的密碼為阿里云容器鏡像服務默認實例 -> 訪問憑證頁面設置的固定或者臨時密碼,并非阿里云賬號密碼。docker tag [本地應用鏡像ID] registry.[region_id].aliyuncs.com/[命令空間名稱]/[鏡像倉庫名稱]:[鏡像版本號]
docker push registry.[region_id].aliyuncs.com/[命令空間名稱]/[鏡像倉庫名稱]:[鏡像版本號]
例如:
docker login --username=td****@gmail.com registry.cn-hangzhou.aliyuncs.com
docker tag 2b64f63601a7 registry.cn-hangzhou.aliyuncs.com/webapps/hsf-provider:1.0.0
docker push registry.cn-hangzhou.aliyuncs.com/webapps/hsf-provider:1.0.0
阿里云鏡像倉庫網絡加速:登錄容器鏡像服務控制臺,在左側導航欄選擇鏡像工具>鏡像加速器,在鏡像加速器頁面獲取加速器地址。
附錄:運行時環境變量信息
通過Dockerfile制作自定義鏡像時,有些環境變量是EDAS在運行時會自動注入的環境信息,這些信息如下表。
環境變量Key | 類型 | 描述 |
POD_IP | String | Pod IP。 |
EDAS_APP_ID | String | EDAS應用ID。 |
EDAS_PROJECT_NAME | String | 同EDAS_APP_ID,用于調用鏈解析。 |
EDAS_JM_CONTAINER_ID | String | 同EDAS_ECC_ID,用于調用鏈解析。 |
EDAS_CATALINA_OPTS | String | 中間件運行時所需CATALINA_OPTS參數。 |
CATALINA_OPTS | String | 同EDAS_CATALINA_OPTS,默認Tomcat啟動參數。 |
CATALINA_HOME | String | 所安裝的Tomcat路徑。 |
PANDORA_LOCATION | String | 所安裝的Pandora路徑,HSF應用中可見。 |
同時,請勿使用/home/admin/.spas_key/default文件,此文件會在Pod運行時被覆蓋。