您可以在本地的开发工具中使用命令将应用程序打包为WAR包或JAR包,基于WAR包或JAR包制作镜像,再将镜像上传到阿里云镜像仓库来部署应用。本文介绍如何制作不同框架应用镜像的Dockfile以及如何将镜像上传到阿里云镜像仓库。

前提条件

在制作应用镜像前,请查阅附录:运行时环境变量信息并按照规约,同时参考以下内容制作EDAS应用镜像。

使用规范和限制

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

  • 服务信息

    包含运行时所需连接的EDAS域名、端口等信息。

    表 1. 资源
    资源类型 资源名称 描述
    ConfigMap edas-envs EDAS服务信息
    表 2. 环境变量
    环境变量Key 类型 描述
    EDAS_ADDRESS_SERVER_DOMAIN String 配置中心服务域名或IP
    EDAS_ADDRESS_SERVER_PORT String 配置中心服务端口
    EDAS_CONFIGSERVER_CLIENT_PORT String ConfigServer服务端口
  • 必需:应用运行时环境变量

    EDAS部署时会提供以下环境变量Env,保证应用运行正常,请勿覆盖配置。

    表 3. 环境变量
    环境变量Key 类型 描述
    POD_IP String POD IP地址
    EDAS_APP_ID String EDAS应用ID
    EDAS_ECC_ID String EDAS ECC 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应用中可见。

创建标准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/edas-centos-openjdk8-alitomcat7:latest
MAINTAINER Alibaba Cloud EDAS Team<edas-dev@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 your 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 to 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/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 your 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 to package into /home/admin/app/
ADD ${APP_LOCATION} ${APP_HOME}/
            

EDAS基础镜像说明

您可以根据您应用的运行环境,自由选择以下的基础镜像:

镜像名称 OS版本 Java版本 Tomcat版本 Pandora版本 备注
apaas/edas CentOS 7 OpenJDK 1.8 8.5.42 N/A 与apaas/edas-centos-openjdk8-tomcat8相同,最新版本号为:latest
apaas/edas-centos-openjdk8-tomcat8 CentOS 7 OpenJDK 1.8 8.5.42 N/A 普通SpringCloud或Dubbo应用推荐使用此版本,最新版本号为:latest
apaas/edas-centos-openjdk8-tomcat7 CentOS 7 OpenJDK 1.8 7.0.93 N/A 基于Tomcat 7.x的普通SpringCloud或Dubbo应用推荐使用此版本,最新版本号为:latest
apaas/edas-centos-openjdk8-alitomcat8 CentOS 7 OpenJDK 1.8 8.5.37 3.5.9 基于Tomcat8.x的HSF应用推荐使用此版本,最新版本号为:latest
apaas/edas-centos-openjdk8-alitomcat7 CentOS 7 OpenJDK 1.8 7.0.92 3.5.9 基于Tomcat7.x的HSF应用推荐使用此版本,最新版本号为:latest

更多镜像请访问aPaaS Docker Hub官方镜像仓库;同时,如果您需要额外的基础镜像,请提交工单给我们;如果您对我们的基础镜像有任何疑问,请参见基础镜像Dockerfile的GitHub地址。

自定义镜像:使用新版本的OpenJDK

您可以在创建的标准Dockerfile上根据实际需求进行自定义设置。

升级OpenJDK:在Dockerfile中,可下载和安装新版本的OpenJDK,以下示例为下载安装OpenJDK 9。

# 先卸载之前的JDK,然后再下载安装OpenJDK 9
RUN yum erase -y java; yum -y install java-1.9.0-openjdk-devel            

自定义镜像:升级EDAS Container版本(HSF应用)

对于部署到容器服务K8s集群中的HSF应用,为使用中间件的新特性或修复原有版本的问题,可以升级应用容器版本。升级步骤如下:

  1. 登录EDAS控制台
  2. 在左侧导航栏选择应用列表
  3. 应用列表页面单击创建应用,在应用基本信息页面应用运行环境区域查看、获取Pandora版本Ali-Tomcat版本
  4. 替换Dockerfile中的版本号信息,如3.5.4。
    # 设置 EDAS-Container/Pandora 应用容器版本
    ENV UPGRADED_CONTAINER_VERSION 3.5.4        
    RUN /home/admin/bin/upgradecontainer.sh            
  5. 重新制作并发布应用镜像。

自定义镜像:在镜像中调整JVM启动参数

基于基础镜像中的JVM参数,我们将通过JAVA_OPTS环境变量进行传递,下例中说明了如何修改JVM启动参数的方式:

FROM apaas/edas:latest
# 设置JVM参数ENV 
    JAVA_OPTS="\
     -Xmx3550m \
     -Xms3550m \
     -Xmn2g \
     -Xss128k" 

自定义镜像:SpringBoot类型的应用修改应用配置

基于EDAS基础镜像中的部署FatJar类型的应用,如果需要修改Tomcat的启动配置如:Context Path、启动端口、参数等,将借助APP_ARGS环境变量进行传递,举例如下:

FROM 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"

在本地构建镜像

  1. 从本地命令行进入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 .            
  2. 然后使用docker images | grep<镜像标签名称> 命令查看本地打包好的镜像。

上传镜像到镜像仓库

您在本地生成构建好的应用镜像就可以上传到阿里云提供的容器镜像仓库(需要您提前登录容器镜像仓库控制台,并根据您EDAS中已经创建或尚未创建的应用所在的地域,在阿里云镜像仓库控制台切换到对应的地域,查看镜像仓库列表,选择一个已经存在或者新创建的镜像仓库来存放您打包好的应用镜像,仓库名称最好是应用名称,便于识别)。

执行指定镜像仓库基本信息页面提供的 “ 将镜像推送到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=tdy218@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            
阿里云镜像仓库

阿里云镜像仓库网络加速:https://cr.console.aliyun.com/#/accelerator

附录:运行时环境变量信息

通过Dockerfile制作自定义镜像时,有一些环境变量是EDAS在运行时会自动注入的环境信息,这些信息如下表:

环境变量Key 描述
POD_IP POD IP
EDAS_APP_ID EDAS应用ID
EDAS_ECC_ID EDAS 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启动参数
CATALINA_HOME 所安装的TOMCAT路径
PANDORA_LOCATION 所安装的Pandora路径,HSF应用中可见

同时,请勿使用/home/admin/.spas_key/default文件,此文件会在POD运行时被覆盖。