Spring Cloud或Dubbo框架下开发并编译的应用WAR包或JAR包,如果需要在SAE上以镜像方式部署,需要将WAR包或JAR包制作为应用镜像,以便部署时使用。本文介绍制作应用镜像的使用规范、制作过程以及将镜像上传至镜像仓库的操作步骤。

使用规范

通过Dockerfile制作自定义镜像时,SAE在运行时会自动注入以下环境变量信息。

注意
  • 为保证应用正常运行,请勿覆盖以下配置。
  • 请勿使用/home/admin/.spas_key/default文件,该文件在POD运行时将会被覆盖。
环境变量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应用中可见。

创建标准Dockerfile

Dockerfile是以文本格式来快速创建自定义镜像的配置文件,Dockerfile的详细说明请参见Dockerfile

标准的Dockerfile描述了SAE创建应用运行环境所需的所有指令,包括下载、安装和启动OpenJDK、Tomcat、WAR包和JAR包等。您还可以通过修改Dockerfile内容,完成如OpenJDK版本替换、Tomcat配置修改、改变运行时环境等操作,详情请参见Dockerfile

您可以通过Dockerfile分别制作HSF、Spring Cloud或Dubbo应用镜像,创建不同框架应用的Dockerfile示例如下:

注意 制作应用镜像时请勿使用VOLUMESUSER root字段,否则应用运行时可能会导致文件丢失。

HSF应用的Dockerfile示例(基于WAR包)

FROM centos:7
MAINTAINER:SAE研发团队

#安装打包必备软件。
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://edas.oss-cn-hangzhou.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"]           

HSF应用的Dockerfile示例(基于JAR包)

FROM centos:7
MAINTAINER:SAE研发团队

#安装打包必备软件。
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 exec java -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"]            

Spring Cloud或Dubbo应用的Dockerfile示例(基于WAR包)

FROM centos:7
MAINTAINER:SAE研发团队

#安装打包必备软件。
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://edas-hz.oss-cn-hangzhou.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"]            

Spring Cloud或Dubbo应用的Dockerfile示例(基于JAR包)

FROM centos:7
MAINTAINER:SAE研发团队 

#安装打包必备软件。
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://edas-hz.oss-cn-hangzhou.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 exec java -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"]            

自定义设置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 \
         -Xss128k"                            

在本地制作镜像

从本地命令行进入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.[region_id].aliyuncs.com     #输入的密码为阿里云容器镜像服务默认实例访问凭证页面设置的固定或者临时密码,并非阿里云账号密码。
docker tag [本地应用镜像ID] registry.[region_id].aliyuncs.com/[命令空间名称]/[镜像仓库名称]:[镜像版本号]
docker push registry.[region_id].aliyuncs.com/[命令空间名称]/[镜像仓库名称]:[镜像版本号]            

例如:

docker login --username=aaa111@gmail.com 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,具体请参见在SAE控制台使用镜像部署PHP应用

问题反馈

如果您在使用SAE过程中有任何疑问,欢迎您扫描下面的二维码加入钉钉群进行反馈。SAE钉钉群2