制作容器镜像

最近更新时间:2019-11-04 17:51:10

操作场景

该任务指导您通过 Spring Cloud 和 Mesh 两种方式制作容器镜像。

操作步骤

准备构建材料

Spring Cloud 应用构建材料

  1. 下载使用了 TSF SDK 的 Spring Cloud 应用 Demo JAR 包,参考 Demo 工程介绍 和用于文件配置功能的 tsf-consul-template-docker.tar.gz下载地址)。
  2. 在该 JAR 包同级目录下,编写 Dockerfile 文件:
    FROM centos:7
    RUN echo "ip_resolve=4" >> /etc/yum.conf
    RUN yum update -y && yum install -y java-1.8.0-openjdk
    # 设置时区。这对于日志、调用链等功能能否在 TSF 控制台被检索到非常重要。
    RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    RUN echo "Asia/Shanghai" > /etc/timezone
    ENV workdir /app/
    # 其中 provider-demo-0.0.1-SNAPSHOT.jar 来自于第一步下载并编译的程序包,需要注意这个 jar 包要和您的 dockerfile 位于同一级目录
    ENV jar provider-demo-0.0.1-SNAPSHOT.jar
    COPY ${jar} ${workdir}
    WORKDIR ${workdir}
    # tsf-consul-template-docker 用于文件配置功能,如不需要可注释掉该行
    ADD tsf-consul-template-docker.tar.gz /root/
    # JAVA_OPTS 环境变量的值为部署组的 JVM 启动参数,在运行时 bash 替换。使用 exec 以使 Java 程序可以接收 SIGTERM 信号。
    CMD ["sh", "-ec", "sh /root/tsf-consul-template-docker/script/start.sh; exec java ${JAVA_OPTS} -jar ${jar}"]
    # 如果不需要使用文件配置功能,改用下面的启动命令
    # CMD ["sh", "-ec", "exec java ${JAVA_OPTS} -jar ${jar}"]   

对于私有化的 TSF ,如果1.13 版本之前的版本要支持 stdout 日志,需要在启动命令中将 stdout 及 stderr 重定向到一个文件中。将上文的CMD一行替换成:

RUN mkdir -p /data/tsf_std/stdout/logs
CMD ["sh", "-ec", "exec java ${JAVA_OPTS} -jar ${jar} 2>&1 > /data/tsf_std/stdout/logs/sys_log.log"]

Mesh 应用构建材料

  1. 下载 Mesh 应用 Demo 包:userService.tar.gz
  2. 在该 tar.gz 包同级目录下,编写 Dockerfile 文件:
    FROM centos:7
    RUN mkdir /root/app/
    # 其中 userService.tar.gz 是 Mesh 应用压缩包
    ADD userService.tar.gz /root/app/
    # 设置时区。这对于日志、调用链等功能能否在 TSF 控制台被检索到非常重要。
    RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    RUN echo "Asia/Shanghai" > /etc/timezone
    ENTRYPOINT ["bash","/root/app/userService/start.sh"]
    Mesh 应用压缩包解压后的文件目录结构及文件规范参考 Mesh Demo 介绍

使用文件配置功能

如果容器应用需要使用 TSF 文件配置功能,需要修改 Dockerfile,具体使用指引参考 文件配置>前提条件

构建镜像

  1. Dockerfile所在目录执行build命令:
    docker build . -t ccr.ccs.tencentyun.com/tsf_<主账号 ID>/<应用名>:[tag]
    其中<主账号 ID>对应用户腾讯云的主账号 ID(注意不是当前登录账号 ID,主账号 ID 可以在腾讯云个人信息页面获取。),<应用名>表示控制台上的应用名。tag为镜像的 tag,用户可自定义。
  2. 命令执行完成后,通过docker image ls查看创建的镜像。