Spring Cloud、Dubbo、HSF框架下開發并編譯的應用WAR包或JAR包,如果需要在Serverless 應用引擎 SAE(Serverless App Engine)上以鏡像方式部署,需要將WAR包或JAR包制作為應用鏡像,以便部署時使用。本文介紹鏡像制作的使用規范、以不同代碼包編譯的Java應用的鏡像制作過程、以及將鏡像上傳至鏡像倉庫的操作步驟。
使用規范
通過Dockerfile制作自定義鏡像時,SAE在運行時會自動注入以下環境變量信息。
為保證應用正常運行,請勿覆蓋以下配置。
請勿使用/home/admin/.spas_key/default文件,該文件在POD運行時將會被覆蓋。
請勿使用VOLUMES或USER root字段,否則應用運行時可能會導致文件丟失。
環境變量Key | 描述 |
POD_IP | POD的IP地址。 |
EDAS_APP_ID | 部署在SAE上應用的ID。 |
EDAS_ECC_ID | 導入集群的ECS在應用中部署后的ID。 |
EDAS_PROJECT_NAME | 與EDAS_ECC_ID類似,用于調用鏈解析。 |
EDAS_JM_CONTAINER_ID | 與EDAS_ECC_ID類似,用于調用鏈解析。 |
EDAS_CATALINA_OPTS | 中間件運行時所需的CATALINA_OPTS參數。 |
CATALINA_OPTS | 與EDAS_CATALINA_OPTS類似,默認Tomcat啟動參數。 |
CATALINA_HOME | 安裝的Tomcat路徑。 |
PANDORA_LOCATION | 安裝的Pandora路徑,僅HSF應用中可見。 |
Spring Cloud或Dubbo應用的Dockerfile示例(基于JAR包)
FROM centos:7
LABEL maintainer="SAE R&D team"
# 安裝打包必備軟件。
RUN yum -y install wget unzip telnet
# 準備JDK以及Tomcat系統變量。
ENV JAVA_HOME /usr/java/latest
ENV PATH $PATH:$JAVA_HOME/bin
ENV ADMIN_HOME /home/admin
# 下載安裝OpenJDK。
RUN yum -y install java-1.8.0-openjdk-devel
# 下載部署SAE演示JAR包。
RUN mkdir -p /home/admin/app/ && \
wget http://sae-demo-cn-shenzhen.oss-cn-shenzhen.aliyuncs.com/demo/1.0/hello-edas-0.0.1-SNAPSHOT.jar -O /home/admin/app/hello-edas-0.0.1-SNAPSHOT.jar
# 增加容器內中?支持。
ENV LANG="en_US.UTF-8"
# 增強Webshell使?體驗。
ENV TERM=xterm
# 將啟動命令寫入啟動腳本start.sh。
RUN mkdir -p /home/admin
RUN echo 'eval execjava -jar $CATALINA_OPTS /home/admin/app/hello-edas-0.0.1-SNAPSHOT.jar'> /home/admin/start.sh && chmod +x /home/admin/start.sh
WORKDIR $ADMIN_HOME
CMD ["/bin/bash", "/home/admin/start.sh"]
如果您需要使用微服務能力,則在設置啟動命令時,需添加
$CATALINA_OPTS
啟動參數。具體操作,請參見設置啟動命令。如果您需要使用自建的注冊中心或MSE的注冊中心,則需配置啟動參數
-Dnacos.use.endpoint.parsing.rule=false
和-Dnacos.use.cloud.namespace.parsing=false
。參數需要放在-jar
之前,否則可能會導致無法使用非SAE自帶的注冊中心。
Spring Cloud或Dubbo應用的Dockerfile示例(基于WAR包)
FROM centos:7
LABEL maintainer="SAE R&D team"
# 安裝打包必備軟件。
RUN yum -y install wget unzip telnet
# 準備JDK以及Tomcat系統變量。
ENV JAVA_HOME /usr/java/latest
ENV CATALINA_HOME /home/admin/apache-tomcat-7.0.91
ENV ADMIN_HOME /home/admin
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
RUN mkdir -p /home/admin
# 下載安裝OpenJDK。
RUN yum -y install java-1.8.0-openjdk-devel
# 下載安裝Tomcat。
RUN wget http://edas-hz.oss-cn-hangzhou.aliyuncs.com/apache-tomcat-7.0.91.tar.gz -O /tmp/apache-tomcat-7.0.91.tar.gz && \
tar -xvf /tmp/apache-tomcat-7.0.91.tar.gz -C /home/admin && \
rm /tmp/apache-tomcat-7.0.91.tar.gz && \
chmod +x ${CATALINA_HOME}/bin/*sh
RUN mkdir -p ${CATALINA_HOME}/deploy/
# 增加容器內中文支持。
ENV LANG="en_US.UTF-8"
# 增強Webshell使?體驗。
ENV TERM=xterm
# 下載部署SAE演示WAR包。
RUN wget http://sae-demo-cn-shenzhen.oss-cn-shenzhen.aliyuncs.com/demo/1.0/hello-edas.war -O /tmp/ROOT.war && \
rm -rf ${CATALINA_HOME}/webapps/ROOT &&\
unzip /tmp/ROOT.war -d ${CATALINA_HOME}/deploy/ROOT/ && \
rm -rf /tmp/ROOT.war
# 設定Tomcat安裝目錄為容器啟動目錄,并采用run方式啟動Tomcat,在標準命令行輸出catalina日志。
WORKDIR $ADMIN_HOME
CMD ["catalina.sh", "run"]
HSF應用的Dockerfile示例(基于JAR包)
FROM centos:7
LABEL maintainer="SAE R&D team"
# 安裝打包必備軟件。
RUN yum install -y wget unzip telnet lsof net-tools bind-utils
# 準備JDK及Tomcat系統變量與路徑。
ENV JAVA_HOME /usr/java/latest
ENV CATALINA_HOME /home/admin/taobao-tomcat
ENV PATH ${JAVA_HOME}/bin:${PATH}
ENV ADMIN_HOME /home/admin
# 設置EDAS-Container以及Pandora應用容器版本。
ENV EDAS_CONTAINER_VERSION V3.5.4
LABEL pandora V3.5.4
# 下載安裝OpenJDK。
RUN yum -y install java-1.8.0-openjdk-devel
# 創建JAVA_HOME軟鏈接。
RUN if [ ! -L "${JAVA_HOME}" ]; then mkdir -p `dirname ${JAVA_HOME}` && ln -s `readlink -f /usr/lib/jvm/java` ${JAVA_HOME}; fi
# 根據環境變量,下載安裝EDAS-Container以及Pandora應用容器版本。
RUN mkdir -p ${CATALINA_HOME}/deploy
RUN wget http://edas-hz.oss-cn-hangzhou.aliyuncs.com/edas-plugins/edas.sar.${EDAS_CONTAINER_VERSION}/taobao-hsf.tgz -O /tmp/taobao-hsf.tgz && \
tar -xvf /tmp/taobao-hsf.tgz -C ${CATALINA_HOME}/deploy/ && \
rm -rf /tmp/taobao-hsf.tgz
# 下載部署SAE演示JAR包。
RUN mkdir -p ${ADMIN_HOME}/app && wget http://edas.oss-cn-hangzhou.aliyuncs.com/demoapp/fatjar-test-case-provider-0.0.1-SNAPSHOT.jar -O ${ADMIN_HOME}/app/provider.jar
# 將啟動命令寫入啟動腳本start.sh。
RUN echo 'eval execjava -jar $CATALINA_OPTS /home/admin/app/hello-edas-0.0.1-SNAPSHOT.jar'> /home/admin/start.sh && chmod +x /home/admin/start.sh
WORKDIR $CATALINA_HOME
CMD ["/bin/bash", "/home/admin/start.sh"]
如果您需要使用微服務能力,則在設置啟動命令時,需添加
$CATALINA_OPTS
啟動參數。具體操作,請參見設置啟動命令。如果您需要使用自建的注冊中心或MSE的注冊中心,則需配置啟動參數
-Dnacos.use.endpoint.parsing.rule=false
和-Dnacos.use.cloud.namespace.parsing=false
。參數需要放在-jar
之前,否則可能會導致無法使用非SAE自帶的注冊中心。
HSF應用的Dockerfile示例(基于WAR包)
FROM centos:7
LABEL maintainer="SAE R&D team"
# 安裝打包必備軟件。
RUN yum install -y wget unzip telnet lsof net-tools bind-utils
# 準備JDK以及Tomcat系統變量與路徑。
ENV JAVA_HOME /usr/java/latest
ENV CATALINA_HOME /home/admin/taobao-tomcat
ENV PATH ${JAVA_HOME}/bin:${CATALINA_HOME}/bin:${PATH}
# 設置EDAS-Container以及Pandora應用容器版本。
ENV EDAS_CONTAINER_VERSION V3.5.4
LABEL pandora V3.5.4
# 下載安裝OpenJDK。
RUN yum -y install java-1.8.0-openjdk-devel
# 創建JAVA_HOME軟鏈接。
RUN if [ ! -L "${JAVA_HOME}" ]; then mkdir -p `dirname ${JAVA_HOME}` && ln -s `readlink -f /usr/lib/jvm/java` ${JAVA_HOME}; fi
# 下載安裝Ali-Tomcat 7.0.92到/home/admin/taobao-tomcat目錄。
RUN wget http://edas-hz.oss-cn-hangzhou.aliyuncs.com/edas-container/7.0.92/taobao-tomcat-production-7.0.92.tar.gz -O /tmp/taobao-tomcat.tar.gz && \
mkdir -p ${CATALINA_HOME} && \
tar -xvf /tmp/taobao-tomcat.tar.gz -C ${CATALINA_HOME} && \
mv ${CATALINA_HOME}/taobao-tomcat-production-7.0.59.3/* ${CATALINA_HOME}/ && \
rm -rf /tmp/taobao-tomcat.tar.gz ${CATALINA_HOME}/taobao-tomcat-production-7.0.59.3 && \
chmod +x ${CATALINA_HOME}/bin/*sh
# 根據環境變量,下載安裝EDAS-Container以及Pandora應用容器版本。
RUN wget http://edas-hz.oss-cn-hangzhou.aliyuncs.com/edas-plugins/edas.sar.${EDAS_CONTAINER_VERSION}/taobao-hsf.tgz -O /tmp/taobao-hsf.tgz && \
tar -xvf /tmp/taobao-hsf.tgz -C ${CATALINA_HOME}/deploy && \
rm -rf /tmp/taobao-hsf.tgz
# 下載部署SAE演示WAR包。
RUN wget http://sae-demo-cn-shenzhen.oss-cn-shenzhen.aliyuncs.com/demo/hello-edas.war -O /tmp/ROOT.war && \
unzip /tmp/ROOT.war -d ${CATALINA_HOME}/deploy/ROOT && \
rm -rf /tmp/ROOT.war
# 設定Tomcat安裝目錄為容器啟動目錄,并采用run方式啟動Tomcat,在標準命令行輸出catalina日志。
WORKDIR ${CATALINA_HOME}
CMD ["catalina.sh", "run"]
自定義設置Dockerfile
通過編輯Dockerfile文件修改運行環境配置,如更換JDK版本、Tomcat修改配置和更改運行時環境等操作。
更換JDK版本
在標準Dockerfile中,請參見以下示例更換其他版本的JDK。
# 下載安裝JDK 8。 RUN wget http://edas-hz.oss-cn-hangzhou.aliyuncs.com/agent/prod/files/jdk-8u65-linux-x64.rpm -O /tmp/jdk-8u65-linux-x64.rpm && \ yum -y install /tmp/jdk-8u65-linux-x64.rpm && \ rm -rf /tmp/jdk-8u65-linux-x64.rpm
在Tomcat啟動參數中添加SAE運行環境
SAE提供了JVM環境變量EDAS_CATALINA_OPTS,包含了運行所需的基本參數。此外Ali-Tomcat提供了自定義JVM參數配置選項JAVA_OPTS,可以設置Xmx、Xms等參數。
# 設置SAE應用JVM參數。 ENV CATALINA_OPTS ${EDAS_CATALINA_OPTS} # 設置JVM參數。 ENV JAVA_OPTS="\ -Xmx3550m \ -Xms3550m \ -Xmn2g"
使用獨立注冊中心
如果您希望在微服務應用中使用獨立的注冊中心,請在Java命令后增加以下兩個參數。
-Dnacos.use.endpoint.parsing.rule=false
-Dnacos.use.cloud.namespace.parsing=false
示例代碼如下:
RUN echo 'eval exec java -Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false -jar $CATALINA_OPTS /home/admin/app/hello-edas-0.0.1-SNAPSHOT.jar'> /home/admin/start.sh && chmod +x /home/admin/start.sh
構建鏡像
從本地命令行進入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 <鏡像標簽名稱>
命令查看本地編譯完成的鏡像。
上傳鏡像到鏡像倉庫
您可以將本地生成的應用鏡像上傳到阿里云提供的容器鏡像倉庫。詳細步驟,請參見管理鏡像。
執行指定鏡像倉庫基本信息頁面提供的將鏡像推送到Registry相關命令,將本地鏡像上傳到該鏡像倉庫。
docker login --username=<當前登錄的賬號名> registry.<regionId>.aliyuncs.com # 輸入的密碼為阿里云容器鏡像服務默認實例訪問憑證頁面設置的固定或者臨時密碼,并非阿里云賬號密碼。
docker tag <本地應用鏡像ID> registry.<regionId>.aliyuncs.com/<命令空間名稱>/<鏡像倉庫名稱>:<鏡像版本號>
docker push registry.<regionId>.aliyuncs.com/<命令空間名稱>/<鏡像倉庫名稱>:<鏡像版本號>
例如:
docker login --username=****@188077086902**** registry.cn-hangzhou.aliyuncs.com
docker tag <ImageId> registry.cn-hangzhou.aliyuncs.com/webapps/hsf-provider:1.0.0
docker push registry.cn-hangzhou.aliyuncs.com/webapps/hsf-provider:1.0.0
更多信息
鏡像制作完成后,您可以將其以鏡像的方式部署在SAE。