制作应用镜像

您可以在本地的开发工具中使用命令将应用程序打包为WAR包或JAR包,基于WAR包或JAR包制作镜像,再将镜像上传到阿里云镜像仓库来部署应用。本文介绍如何通过编写Dockerfile文件构建EDAS应用镜像,以及如何将镜像上传到阿里云镜像仓库。

前提条件

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

使用说明

本文涉及的Dockerfile及镜像内容可通过GitHub仓库自行查阅。

使用规范和限制

通过Dockerfile制作EDAS应用镜像时,需要遵循以下规范及限制。

  • 服务信息

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

    表 4. 资源

    资源类型

    资源名称

    描述

    ConfigMap

    edas-envs

    EDAS服务信息。

    表 5. 环境变量

    环境变量Key

    类型

    描述

    EDAS_ADDRESS_SERVER_DOMAIN

    String

    配置中心服务域名或IP。

    EDAS_ADDRESS_SERVER_PORT

    String

    配置中心服务端口。

    EDAS_CONFIGSERVER_CLIENT_PORT

    String

    ConfigServer服务端口。

  • 必需:应用运行时环境变量

    EDAS部署时会提供自有的环境变量Env,保证应用运行正常,请勿覆盖配置,请参见附录:运行时环境变量信息

创建标准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-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应用的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基础镜像说明

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

镜像名称

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相同,最新版本号为: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应用推荐使用此版本,最新版本号为: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应用推荐使用此版本,最新版本号为: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应用推荐使用此版本,最新版本号为: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应用推荐使用此版本,最新版本号为: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应用推荐使用此版本,最新版本号为: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应用推荐使用此版本,最新版本号为:latest

更多镜像请访问aPaaS Docker Hub官方镜像仓库;同时,如果您需要额外的基础镜像,请加入钉群(钉群号:31723701)联系产品技术专家咨询处理;如果您对我们的基础镜像有任何疑问,请参见基础镜像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-registry.cn-hangzhou.cr.aliyuncs.com/apaas/edas:latest
# 设置JVM参数ENV 
    JAVA_OPTS="\
     -Xmx3550m \
     -Xms3550m \
     -Xmn2g \
     -Xss128k" 

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

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

FROM apaas-registry.cn-hangzhou.cr.aliyuncs.com/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中应用(已经创建或尚未创建)所在的地域,在阿里云镜像仓库控制台切换到对应的地域,查看镜像仓库列表,然后选择一个已经存在或者新创建的镜像仓库存放打包好的应用镜像。仓库名称最好是应用名称,便于识别。

执行指定镜像仓库基本信息页面提供的3.将镜像推送到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=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            

阿里云镜像仓库

阿里云镜像仓库网络加速:登录容器镜像服务控制台,在左侧导航栏选择镜像工具>镜像加速器,在镜像加速器页面获取加速器地址

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

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

环境变量Key

类型

描述

POD_IP

String

Pod IP。

EDAS_APP_ID

String

EDAS应用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应用中可见。

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