您可以在本地的開發工具中使用命令將應用程式打包為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-registry.cn-hangzhou.cr.aliyuncs.com/apaas/edas-centos7-openjdk17-tomcat9 | CentOS 7 | OpenJDK 17 | 9.0.70 | N/A | 基於OpenJDK 17,Tomcat 9.0.70構建的基礎鏡像,最新版本號碼為:latest |
apaas-registry.cn-hangzhou.cr.aliyuncs.com/apaas/edas-centos7-openjdk17-tomcat10 | CentOS 7 | OpenJDK 17 | 10.1.41 | N/A | 基於OpenJDK 17,Tomcat 10.1.41構建的基礎鏡像,最新版本號碼為:latest |
更多鏡像請訪問aPaaS Docker Hub官方鏡像倉庫;同時,如果您需要額外的基礎鏡像,請加入釘群(釘群號:31723701)聯絡產品技術專家諮詢處理;如果您對我們的基礎鏡像有任何疑問,請參見基礎鏡像Dockerfile的GitHub地址。
自訂鏡像:使用新版本的OpenJDK
您可以在建立的標準Dockerfile上根據實際需求進行自訂設定。
升級OpenJDK:在Dockerfile中,可下載和安裝新版本的OpenJDK,以下樣本為下載安裝OpenJDK 9。
使用自訂構建鏡像時,EDAS支援的JDK版本可支援OpenJDK 21。
# 先卸載之前的JDK,然後再下載安裝OpenJDK 9
RUN yum erase -y java; yum -y install java-1.9.0-openjdk-devel 自訂鏡像:升級EDAS Container版本(HSF應用)
對於部署到Container ServiceK8s叢集中的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 # 這一步輸入的密碼為阿里雲Container Registry預設執行個體 -> 訪問憑證版面設定的固定或者臨時密碼,並非阿里雲帳號密碼。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 阿里雲鏡像倉庫網路加速:登入Container Registry控制台,在左側導覽列選擇鏡像工具>鏡像加速器,在鏡像加速器頁面擷取加速器地址。
附錄:運行時環境變數資訊
通過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運行時被覆蓋。