制作應(yīng)用鏡像
您可以在本地的開發(fā)工具中使用命令將應(yīng)用程序打包為WAR包或JAR包,基于WAR包或JAR包制作鏡像,再將鏡像上傳到阿里云鏡像倉(cāng)庫(kù)來部署應(yīng)用。本文介紹如何通過編寫Dockerfile文件構(gòu)建EDAS應(yīng)用鏡像,以及如何將鏡像上傳到阿里云鏡像倉(cāng)庫(kù)。
前提條件
在制作應(yīng)用鏡像前,請(qǐng)查閱附錄:運(yùn)行時(shí)環(huán)境變量信息,同時(shí)參考以下內(nèi)容制作EDAS應(yīng)用鏡像。
使用說明
本文涉及的Dockerfile及鏡像內(nèi)容可通過GitHub倉(cāng)庫(kù)自行查閱。
使用規(guī)范和限制
通過Dockerfile制作EDAS應(yīng)用鏡像時(shí),需要遵循以下規(guī)范及限制。
服務(wù)信息
包含運(yùn)行時(shí)所需連接的EDAS域名、端口等信息。
表 4. 資源
資源類型
資源名稱
描述
ConfigMap
edas-envs
EDAS服務(wù)信息。
表 5. 環(huán)境變量
環(huán)境變量Key
類型
描述
EDAS_ADDRESS_SERVER_DOMAIN
String
配置中心服務(wù)域名或IP。
EDAS_ADDRESS_SERVER_PORT
String
配置中心服務(wù)端口。
EDAS_CONFIGSERVER_CLIENT_PORT
String
ConfigServer服務(wù)端口。
必需:應(yīng)用運(yùn)行時(shí)環(huán)境變量
EDAS部署時(shí)會(huì)提供自有的環(huán)境變量Env,保證應(yīng)用運(yùn)行正常,請(qǐng)勿覆蓋配置,請(qǐng)參見附錄:運(yùn)行時(shí)環(huán)境變量信息。
創(chuàng)建標(biāo)準(zhǔn)Dockerfile
Dockerfile是一個(gè)文本格式的配置文件,您可以使用Dockerfile快速創(chuàng)建鏡像。
您可以根據(jù)實(shí)際應(yīng)用框架,通過Dockerfile分別制作HSF、Spring Cloud或Dubbo應(yīng)用鏡像。下面將通過示例分別介紹如何創(chuàng)建這些不同框架應(yīng)用的Dockerfile。
一個(gè)EDAS標(biāo)準(zhǔn)Dockerfile描述了EDAS創(chuàng)建應(yīng)用運(yùn)行環(huán)境的所有指令,包括下載、安裝和啟動(dòng)OpenJDK、Tomcat、WAR包和JAR包等。 您還可以通過改變Dockerfile內(nèi)容,完成如OpenJDK版本替換、Tomcat配置修改、改變運(yùn)行時(shí)環(huán)境等操作。關(guān)于OpenJDK的使用指導(dǎo),請(qǐng)參見自定義鏡像:使用新版本的OpenJDK。
關(guān)于Dockerfile的使用可參考如下文檔:
HSF應(yīng)用的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應(yīng)用的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基礎(chǔ)鏡像說明
您可以根據(jù)您應(yīng)用的運(yùn)行環(huán)境,自由選擇以下的基礎(chǔ)鏡像:
鏡像名稱 | 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相同,最新版本號(hào)為: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應(yīng)用推薦使用此版本,最新版本號(hào)為: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應(yīng)用推薦使用此版本,最新版本號(hào)為: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應(yīng)用推薦使用此版本,最新版本號(hào)為: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應(yīng)用推薦使用此版本,最新版本號(hào)為: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應(yīng)用推薦使用此版本,最新版本號(hào)為: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應(yīng)用推薦使用此版本,最新版本號(hào)為:latest |
更多鏡像請(qǐng)?jiān)L問aPaaS Docker Hub官方鏡像倉(cāng)庫(kù);同時(shí),如果您需要額外的基礎(chǔ)鏡像,請(qǐng)加入釘群(釘群號(hào):31723701)聯(lián)系產(chǎn)品技術(shù)專家咨詢處理;如果您對(duì)我們的基礎(chǔ)鏡像有任何疑問,請(qǐng)參見基礎(chǔ)鏡像Dockerfile的GitHub地址。
自定義鏡像:使用新版本的OpenJDK
您可以在創(chuàng)建的標(biāo)準(zhǔn)Dockerfile上根據(jù)實(shí)際需求進(jìn)行自定義設(shè)置。
升級(jí)OpenJDK:在Dockerfile中,可下載和安裝新版本的OpenJDK,以下示例為下載安裝OpenJDK 9。
# 先卸載之前的JDK,然后再下載安裝OpenJDK 9
RUN yum erase -y java; yum -y install java-1.9.0-openjdk-devel
自定義鏡像:升級(jí)EDAS Container版本(HSF應(yīng)用)
對(duì)于部署到容器服務(wù)K8s集群中的HSF應(yīng)用,為使用中間件的新特性或修復(fù)原有版本的問題,可以升級(jí)應(yīng)用容器版本。升級(jí)步驟如下:
登錄EDAS控制臺(tái)。
在左側(cè)導(dǎo)航欄,選擇 。
在應(yīng)用列表頁面,單擊創(chuàng)建應(yīng)用,在應(yīng)用基本信息頁面應(yīng)用運(yùn)行環(huán)境區(qū)域,查看并獲取Pandora版本和Ali-Tomcat版本。
替換Dockerfile中的版本號(hào)信息,如3.5.4。
# 設(shè)置 EDAS-Container/Pandora 應(yīng)用容器版本 ENV UPGRADED_CONTAINER_VERSION 3.5.4 RUN /home/admin/bin/upgradecontainer.sh
重新制作并發(fā)布應(yīng)用鏡像。
自定義鏡像:在鏡像中調(diào)整JVM啟動(dòng)參數(shù)
基于基礎(chǔ)鏡像中的JVM參數(shù),我們將通過JAVA_OPTS環(huán)境變量進(jìn)行傳遞,下例中說明了如何修改JVM啟動(dòng)參數(shù)的方式:
FROM apaas-registry.cn-hangzhou.cr.aliyuncs.com/apaas/edas:latest
# 設(shè)置JVM參數(shù)ENV
JAVA_OPTS="\
-Xmx3550m \
-Xms3550m \
-Xmn2g \
-Xss128k"
自定義鏡像:SpringBoot類型的應(yīng)用修改應(yīng)用配置
基于EDAS基礎(chǔ)鏡像中的部署FatJar類型的應(yīng)用,如果需要修改Tomcat的啟動(dòng)配置如:Context Path、啟動(dòng)端口、參數(shù)等,將借助APP_ARGS環(huán)境變量進(jìn)行傳遞,舉例如下。
FROM apaas-registry.cn-hangzhou.cr.aliyuncs.com/apaas/edas:latest
# 基礎(chǔ)鏡像中的默認(rèn)配置為:
# - context path為 "/" ,
# - uri編碼為ISO-8859-1
# - 應(yīng)用啟動(dòng)端口為8080,
# - tomcat處理線程池?cái)?shù)量為400
# 您也可以通過復(fù)寫APP_ARGS這個(gè)環(huán)境變量來修改默認(rèn)配置,如下:
ENV APP_ARGS="--server.context-path=/ \
--server.tomcat.uri-encoding=ISO-8859-1 \
--server.port=8080 \
--server.tomcat.max-threads=400"
在本地構(gòu)建鏡像
從本地命令行進(jìn)入Dockerfile所在的目錄,執(zhí)行docker build命令構(gòu)建鏡像。
docker build -t [標(biāo)簽名稱,最好取應(yīng)用名]:[版本號(hào)] . 或docker build -t [標(biāo)簽名稱,最好取應(yīng)用名]:[版本號(hào)] -f /path/to/custom_dockerfile_name . # 假如您創(chuàng)建好的Dockerfile在其他位置或名稱不為Dockerfile時(shí)適用。
例如:
docker build -t hsf-provider:1.0.0 .
然后使用
docker images | grep<鏡像標(biāo)簽名稱>
命令查看本地打包好的鏡像。
上傳鏡像到鏡像倉(cāng)庫(kù)
您在本地生成構(gòu)建好的應(yīng)用鏡像后,便可上傳到阿里云提供的容器鏡像倉(cāng)庫(kù)。
需提前登錄容器鏡像倉(cāng)庫(kù)控制臺(tái),根據(jù)您EDAS中應(yīng)用(已經(jīng)創(chuàng)建或尚未創(chuàng)建)所在的地域,在阿里云鏡像倉(cāng)庫(kù)控制臺(tái)切換到對(duì)應(yīng)的地域,查看鏡像倉(cāng)庫(kù)列表,然后選擇一個(gè)已經(jīng)存在或者新創(chuàng)建的鏡像倉(cāng)庫(kù)存放打包好的應(yīng)用鏡像。倉(cāng)庫(kù)名稱最好是應(yīng)用名稱,便于識(shí)別。
執(zhí)行指定鏡像倉(cāng)庫(kù)基本信息頁面提供的3.將鏡像推送到Registry相關(guān)命令,將本地鏡像上傳到該鏡像倉(cāng)庫(kù)。
docker login --username=[當(dāng)前登錄的賬號(hào)名] registry.[region_id].aliyuncs.com # 這一步輸入的密碼為阿里云容器鏡像服務(wù)默認(rèn)實(shí)例 -> 訪問憑證頁面設(shè)置的固定或者臨時(shí)密碼,并非阿里云賬號(hào)密碼。docker tag [本地應(yīng)用鏡像ID] registry.[region_id].aliyuncs.com/[命令空間名稱]/[鏡像倉(cāng)庫(kù)名稱]:[鏡像版本號(hào)]
docker push registry.[region_id].aliyuncs.com/[命令空間名稱]/[鏡像倉(cāng)庫(kù)名稱]:[鏡像版本號(hào)]
例如:
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
阿里云鏡像倉(cāng)庫(kù)網(wǎng)絡(luò)加速:登錄容器鏡像服務(wù)控制臺(tái),在左側(cè)導(dǎo)航欄選擇鏡像工具>鏡像加速器,在鏡像加速器頁面獲取加速器地址。
附錄:運(yùn)行時(shí)環(huán)境變量信息
通過Dockerfile制作自定義鏡像時(shí),有些環(huán)境變量是EDAS在運(yùn)行時(shí)會(huì)自動(dòng)注入的環(huán)境信息,這些信息如下表。
環(huán)境變量Key | 類型 | 描述 |
POD_IP | String | Pod IP。 |
EDAS_APP_ID | String | EDAS應(yīng)用ID。 |
EDAS_PROJECT_NAME | String | 同EDAS_APP_ID,用于調(diào)用鏈解析。 |
EDAS_JM_CONTAINER_ID | String | 同EDAS_ECC_ID,用于調(diào)用鏈解析。 |
EDAS_CATALINA_OPTS | String | 中間件運(yùn)行時(shí)所需CATALINA_OPTS參數(shù)。 |
CATALINA_OPTS | String | 同EDAS_CATALINA_OPTS,默認(rèn)Tomcat啟動(dòng)參數(shù)。 |
CATALINA_HOME | String | 所安裝的Tomcat路徑。 |
PANDORA_LOCATION | String | 所安裝的Pandora路徑,HSF應(yīng)用中可見。 |
同時(shí),請(qǐng)勿使用/home/admin/.spas_key/default文件,此文件會(huì)在Pod運(yùn)行時(shí)被覆蓋。