Spring Cloud或Dubbo框架下开发并编译的应用WAR包或JAR包,如果需要在SAE上以镜像方式部署,请参见本文将应用的WAR包或JAR包制作为应用镜像,以便部署时使用。

注意事项

在制作应用镜像前,请查阅镜像创建规约并按照规约制作镜像。

创建标准 Dockerfile

Dockerfile是以文本格式来快速创建自定义镜像的配置文件。

标准的Dockerfile描述了SAE创建应用运行环境所需的所有指令。
  • 针对WAR包应用,该指令定义了对JDK、Tomcat、WAR包的下载、安装和启动等操作。
  • 针对JAR包应用,该指令定义了对JDK、JAR包的下载、安装和启动等操作。

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

FROM centos:7
MAINTAINER Serverless 应用引擎 SAE研发团队<edas-dev@list.alibaba-inc.com>

# 安装打包必备软件
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 Contaienr/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 Serverless 应用引擎 SAE研发团队<edas-dev@list.alibaba-inc.com>

# 安装打包必备软件
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 Contaienr/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 Serverless 应用引擎 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或 Dubb 应用的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环境变量DEAS_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 <镜像标签名称>命令查看本地编译完成的镜像。

上传镜像到镜像仓库

上传编译好的镜像到镜像仓库,并在SAE中部署时选择该镜像进行部署。
例如:推送镜像registry.cn-hangzhou.aliyuncs.com/edas/demo-frontend-service:20181111镜像到镜像仓库。
docker push registry.cn-hangzhou.aliyuncs.com/edas/demo-frontend-service:20181111                

镜像创建规约

通过Dockerfile制作自定义镜像时,须遵循以下规范及限制。

  • 租户/加密信息
    SAE应用用户鉴权与加密凭证的信息。
    表 1. 环境变量
    环境变量 Key 类型 描述
    tenantId String SAE 租户 ID
    accessKey String 鉴权 Access Key ID
    secretKey String 鉴权 Access Key Secret
    表 2. 本地文件
    路径 类型 描述
    /home/admin/.spas_key/default File SAE 租户鉴权信息,包含上述 ENV 信息
  • 服务信息
    包含运行时所需连接的SAE域名、端口等信息。
    表 3. 环境变量
    环境变量 Key 描述
    EDAS_ADDRESS_SERVER_DOMAIN 配置中心服务域名或IP地址
    EDAS_ADDRESS_SERVER_PORT 配置中心服务端口
    EDAS_CONFIGSERVER_CLIENT_PORT CS服务端口
  • 应用运行时环境变量(强制)
    在SAE上部署应用时提供了以下环境变量,为保证应用运行正常,请勿覆盖配置。
    环境变量Key 描述
    POD_IP POD的IP地址
    EDAS_APP_ID 部署在SAE上应用的ID
    EDAS_ECC_ID SAE ECC ID
    EDAS_PROJECT_NAME 同EDAS_APP_ID,用于调用链解析
    EDAS_JM_CONTAINER_ID 同EDAS_ECC_ID,用于调用链解析
    EDAS_CATALINA_OPTS 中间件运行时所需CATALINA_OPTS参数
    CATALINA_OPTS 同EDAS_CATALINA_OPTS,默认TOMCAT启动参数

更多信息

镜像制作完成后,您可以将其以镜像的方式部署在SAE,具体请参见在SAE控制台使用镜像部署应用

问题反馈

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