镜像制作
所有文档

          云原生微服务应用平台 CNAP

          镜像制作

          有两种方式制作应用镜像:一种是基于封装好监控功能的基础镜像(推荐),还有一种是基于操作系统的镜像(比如centos7)。选择一种即可。

          一、基于百度云官方提供的基础镜像(推荐)


          前期准备

          1.环境准备

          • 在CCE产品上开通镜像仓库,创建命名空间,并记录用户名和密码、命名空间名称
          • 一台安装并配置好Docker的机器

          2.基础镜像

          基础镜像默认包含探针

          环境类型 说明 镜像地址
          centos7.1jdk8 centos7.1预装jdk8 hub.baidubce.com/cnap-public/microservice-springcloud:probe2.2.0.2_centos7.1_java8
          ubuntu18.04jdk8 ubuntu18.04预装jdk8 hub.baidubce.com/cnap-public/microservice-springcloud:probe2.2.0.2_ubuntu18.04_java8

          基础镜像说明

          • jdk8安装路径:/home/java
          • 探针安装路径:/home/emcprobe
          • 启动脚本start.sh路径:/home

          基础镜像使用 "ENTRYPOINT" 设置容器入口,使用基础镜像时(from),需要以 "CMD ["param1","param2"...]" 格式传递用户程序启动命令。基础镜像会接受CMD命令作为参数,启动用户程序。

          编写Dockerfile文件

          以环境基于 centos7和jdk8 来创建应用provider-demo为例。Dockerfile仅需引用上述提供的基础镜像,并将自己的启动命令写入CMD即可。

          使用监控功能的应用

          操作步骤:

          1、进入到Docker机器存放用户程序的目录下,如/home/appimage。

          2、创建Dockerfile文件,内容如下:

          #基础镜像镜像地址
          FROM hub.baidubce.com/cnap-public/microservice-springcloud:probe2.2.0.2_centos7.1_java8
          # 安装应用程序包,推荐/home/app/lib目录下
          COPY {BMS_JAR_NAME} /home/app/lib/
          # 应用启动命令
          CMD ["java","-jar","/home/app/lib/{BMS_JAR_NAME}"]

          注意:{BMS_JAR_NAME} 替换为需要部署的程序包的名称。这里的CMD命令仅作为参数向基础镜像ENTRYPOINT命令传递

          使用Dockerfile创建镜像

          在Dockerfile所在的目录(/home/appimage)执行docker build命令,创建镜像:

          docker build -t hub.baidubce.com/[namespace]/[ImageName]:[镜像版本] .

          namespace为环境准备中创建的命名空间的名称;ImageName由用户指定所创建镜像的名称;

          注意,命令后的 “.”

          创建结束后,可以通过docker image ls 或者 docker images命令查看镜像是否创建:

          docker image ls
          docker images

          推送镜像到镜像仓库

          镜像制作完成后,将制作的镜像推送到百度云镜像仓库:

          docker push hub.baidubce.com/[namespace]/[ImageName]:[镜像版本]

          镜像制作与推送完成后,即可在CNAP平台上进行部署。

          二、基于操作系统的基础镜像


          前期准备

          1.环境准备

          • 在CCE产品上开通镜像仓库,创建命名空间,并记录用户名和密码、命名空间名称
          • 一台安装并配置好Docker的机器

          2.代码准备

          以创建provider-demo为例:

          文件 说明 下载链接
          provider-demo-1.0-SNAPSHOT.jar 用户的spring cloud 微服务(服务提供者)或者普通java应用包 无(用户代码)
          监控探针包 支持监控信息的展示 emcprobe.tar.gz

          将这两个文件放置在Docker机器的同一个目录下,如/home/appimage目录,下文将以此目录为例进行镜像的制作。

          编写Dockerfile文件

          2.1使用监控功能的应用

          操作步骤: 1、进入到Docker机器存放用户程序和凤睛探针包的目录下,如/home/appimage。 2、创建Dockerfile文件,内容如下:

          FROM centos:7
          # 描述镜像创建者信息,可自定义
          MAINTAINER BAIDU
          # 设置时区,使得用户应用日志打印可以获取正确的时间
          RUN rm -f /etc/localtime & cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
          RUN echo "Asia/Shanghai" > /etc/timezone
          # 安装JDK(需手动下载jdk包并放置在Dockerfile相同目录)
          ADD jdk-8u191-linux-x64.tar.gz /home/java
          # 设置JAVA_HOME
          ENV JAVA_HOME /home/java/jdk1.8.0_191
          ENV PATH $PATH:$JAVA_HOME/bin
          # 安装lsof命令,用于应用诊断
          RUN yum update -y && yum install -y lsof
          # 设置工作空间,用于部署应用。可自定义。探针会部署在应用的平级目录中
          ENV APP_HOME /home/app
          # 设置jar包名,用于jar包拷贝。如provider.jar。
          ENV JAR_NAME {BMS_JAR_NAME}
          # 安装探针包, 用于应用监控
          ADD emcprobe.tar.gz $APP_HOME/..
          # 安装应用程序包
          COPY start.sh ${APP_HOME}/bin/
          COPY ${JAR_NAME} ${APP_HOME}/lib/
          # 配置工作目录
          WORKDIR ${APP_HOME}
          # 启动应用
          CMD ["/bin/bash", "./bin/start.sh"]

          注意:{BMS_JAR_NAME} 替换为需要部署的程序包的名称。

          Dockerfile中应用路径可以自定义,监控探针则会部署在应用的平级目录。例如,应用路径默认为/home/app,则监控探针路径为/home/emcprobe。因此,请不要使用'/'做为应用的根目录。 start.sh为应用的启动脚本,该脚本包含反注册逻辑且还会调用监控探针的启动脚本。建议参考此脚本完成自己的启动脚本编写,或者直接使用该脚本,可以快速接入。start.sh脚本需和Dockerfile文件放置在同一目录下。start.sh脚本参考内容如下:

          #!/bin/bash
          # 用于在注册中心下线服务,若移除可能会导致服务下线延迟
          trap "{ stop; sleep 0.5; exit 255; }" EXIT
          # 用于应用监控
          export EM_APP_HOME=${APP_HOME}
          export PID_FILE=${EM_APP_HOME}/log/instance.pid
          cd ${EM_APP_HOME}
          # 应用启动逻辑
          function start_app(){
              mkdir -p ${EM_APP_HOME}/log/
              # 应用的启动参数用户可自定义。启动后需要将pid写入文件以使用监控功能
              $JAVA_HOME/bin/java -jar ${EM_APP_HOME}/lib/${JAR_NAME} &
              echo $! > ${PID_FILE}
          }
          
          # 该方法为具体的服务下线逻辑
          function stop(){
              echo "start to kill user process"
              if [ -f ${EM_APP_HOME}/log/instance.pid ]; then
                  ps aux | awk -vpid=$(cat ${PID_FILE}) '$2==pid {print}' | grep $(cat ${PID_FILE}) &> /dev/null
                  if [ $? -ne 0 ]; then
                      echo "already stopped!"
                      return
                  fi
                  echo  "stopping process "
                  kill $(cat ${PID_FILE})
          
                  for ((i=0;i<40;i++)); do
                      if [ $i -eq 30 ]; then
                          kill -9 $(cat ${PID_FILE})
                      fi
                      ps aux | awk -vpid=$(cat ${PID_FILE}) '$2==pid {print}' | grep $(cat ${PID_FILE}) &> /dev/null
                      if [ $? -eq 0 ]; then
                          echo -n .
                          sleep 0.5
                      else
                          echo " [done]!"
                          rm ${EM_APP_HOME}/log/instance.pid
                          break
                      fi
                  done
              fi
          }
          # 启动应用
          start_app
          # 启动监控探针
          cd ${EM_APP_HOME}/../emcprobe
          bash ./bin/start.sh

          使用Dockerfile创建镜像

          在Dockerfile所在的目录(/home/appimage)执行docker build命令,创建镜像:

          docker build -t hub.baidubce.com/[namespace]/[ImageName]:[镜像版本] .

          namespace为环境准备中创建的命名空间的名称;ImageName由用户指定所创建镜像的名称;

          注意,命令后的 “.”

          创建结束后,可以通过docker image ls 或者 docker images命令查看镜像是否创建:

          docker image ls
          docker images

          推送镜像到镜像仓库

          镜像制作完成后,将制作的镜像推送到百度云镜像仓库:

          docker push hub.baidubce.com/[namespace]/[ImageName]:[镜像版本]

          镜像制作与推送完成后,即可在CNAP平台上进行部署。

          三、历史版本


          2020-9-08 2.2.0.2 最新版本

          • 优化trace消息生成: 去除微服务框架相关心跳、拉取配置请求、spring注解相关插件 的trace消息
          • 支持全新的拓扑展示,适配http和rpc调用场景
          • 修复新老版本探针兼容问题
          环境类型 说明 镜像地址
          centos7.1jdk8 centos7.1预装jdk8 hub.baidubce.com/cnap-public/microservice-springcloud:probe2.2.0.2_centos7.1_java8
          ubuntu18.04jdk8 ubuntu18.04预装jdk8 hub.baidubce.com/cnap-public/microservice-springcloud:probe2.2.0.2_ubuntu18.04_java8
          监控探针包 支持监控信息的展示 emcprobe-2-2-0-2.tar.gz

          2020-6-5 2.1.1.2

          • 新增okhttp3 插件
          环境类型 说明 镜像地址
          centos7.1jdk8 centos7.1预装jdk8 hub.baidubce.com/cnap-public/microservice-springcloud:probe2.1.1.2_centos7.1_java8
          ubuntu18.04jdk8 ubuntu18.04预装jdk8 hub.baidubce.com/cnap-public/microservice-springcloud:probe2.1.1.2_ubuntu18.04_java8
          监控探针包 支持监控信息的展示 emcprobe-2-1-1-2.tar.gz
          上一篇
          Spring Cloud应用接入
          下一篇
          分布式事务接入