云上容器服务基础镜像制作

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
可观测监控 Prometheus 版,每月50GB免费额度
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 容器服务云上环境与弹内差别较大,很多弹内支持默认埋点的 agent 在云上没法使用,同时需要预先部署一些云上环境需要的 agent, 因而云上的基础镜像跟弹内差异较大,需要从centos基础镜像开始配置环境。本文将为大家讲解云上容器服务基础镜像的详细制作过程。

原文作者:joezxh
原文链接   
更多云原生技术资讯可关注阿里巴巴云原生技术圈

1.概述

  容器服务云上环境与弹内差别较大,很多弹内支持默认埋点的 agent 在云上没法使用,同时需要预先部署一些云上环境需要的 agent, 因而云上的基础镜像跟弹内差异较大,需要从centos基础镜像开始配置环境。
  容器镜像服务在云上,当云效部署时,需要从镜像服务拉取基础镜像建立镜像,因而需要将基础镜像 push 到镜像服务仓库中。
  为了方便镜像 push 到镜像仓库,因而采用一个跳板机制作镜像,并上传到镜像仓库的方式来加快镜像制作和上传。
最终执行环境:

  • 本地办公电脑执行打包脚本命令;
  • 跳板机打包镜像;
  • 跳板机镜像上传到镜像仓库。

2. 镜像制作:

  主要步骤有:

  1. 跳板机环境安装 Docker;
  2. 上传镜像中需要的第三方包和基础软件安装包上传到跳板机,比如 jdk, agent等;
  3. 编写本地执行脚本,执行镜像打包,并 push 镜像到仓库;

2.1 镜像打包跳板机环境配置:
  安装 docker:

1、检查内核版本,必须是3.10及以上     
uname -r   
注:如果版本低于3.10,使用 yum update 升级   
2、安装docker  
yum install docker
3、输入y确认安装
4、启动docker
[root@localhost ~]# systemctl start docker
[root@localhost ~]# docker -v
Docker version 1.12.6, build 3e8e77d/1.12.6
5、开机启动docker
[root@localhost ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
6、停止docker
systemctl stop docker

2.2 上传安装依赖包:

上传 jdk, Agent 等应用依赖的第三方包:

#!/bin/bash
env=$1
if [ ! -n "${env}" ]; then
  echo "Usage: ./upload.sh env "
  echo "env is resource upload or erase enviroment name:daily or online"
  exit 1
fi
## 设置跳板机登录证书和账号等
if [ ${env} == "online" ]; then
    echo "upload wukong resource to online jump machine."
    source "../ssh-production.sh" 
else
    echo "upload wukong resource to daily jump machine."
    source "../ssh-testing.sh"
fi
## 删除原有资源目录
echo "remove file on jump machine ssh  -i ${JUMP_CERT} -t ${JUMP_USER}@${JUMP_MACHINE}  'rm -rf /home/admin/resources/; mkdir /home/admin/resources/;'"
## ssh  -i ${JUMP_CERT} -t ${JUMP_USER}@${JUMP_MACHINE}  "rm -rf /home/admin/resources; mkdir /home/admin/resources/;"
## 上传依赖软件
echo "scp packag/home/admin/resources/target to jump machine ${JUMP_MACHINE}"
scp -i ${JUMP_CERT} -r ./jdk/  ${JUMP_USER}@${JUMP_MACHINE}:/home/admin/resources
scp -i ${JUMP_CERT} -r ./sunfire/  ${JUMP_USER}@${JUMP_MACHINE}:/home/admin/resources
${JUMP_USER}@${JUMP_MACHINE}:/home/admin/resources
scp -i ${JUMP_CERT}  ./tengine-yun-1.0.2-1652752.el7u2.x86_64.rpm  ${JUMP_USER}@${JUMP_MACHINE}:/home/admin/resources
scp -i ${JUMP_CERT}  ./taobao-tomcat-7.0.59.3.tar.gz  ${JUMP_USER}@${JUMP_MACHINE}:/home/admin/resources
scp -i ${JUMP_CERT}  ./start.sh  ${JUMP_USER}@${JUMP_MACHINE}:/home/admin/resources
scp -i ${JUMP_CERT}  ./shutdown.sh  ${JUMP_USER}@${JUMP_MACHINE}:/home/admin/resources
echo "upload success."

2.3 编写执行脚本:

本地办公环境通过 ssh 执行打包命令:

#!/bin/bash
APP_NAME=my-pandora-boot-base
NAMESPACE=app-base
REPO=${APP_NAME}
VERSION=$1
source "../../../../ssh-production.sh" 
if [ ! -n "${VERSION}" ]; then
  echo "Usage: ./build.sh version "
  echo "version is docker image version"
  exit 1
fi
cd ../../../
cd APP-META/docker-config/
echo "复制需要包含的 jdk,sunfire,key,i18n等 on jump machine ${JUMP_USER}@${JUMP_MACHINE}"
ssh -i ${JUMP_CERT} -t ${JUMP_USER}@${JUMP_MACHINE} "mkdir -p /home/admin/${APP_NAME}/dev-base/; \
    cp /home/admin/resources/taobao-hsf.tgz /home/admin/${APP_NAME}/dev-base; \
    cp /home/admin/resources/sunfire/crontabs-1.11.rpm /home/admin/${APP_NAME}/dev-base; \
    cp /home/admin/resources/sunfire/cronie-1.4.11.rpm /home/admin/${APP_NAME}/dev-base; \
    cp /home/admin/resources/sunfire/start-sunfire.sh /home/admin/${APP_NAME}/dev-base; \
    cp /home/admin/resources/sunfire/tsar-2.1.33-1568425.82ced85.el7.x86_64.rpm /home/admin/${APP_NAME}/dev-base; \
    cp /home/admin/resources/sunfire/sunfire-agent-1.0.10-20190916175607.noarch.rpm /home/admin/${APP_NAME}/dev-base; \
    cp /home/admin/resources/jdk/ajdk-8_3_6-b129-8.3.6-1207912.alios7.x86_64.rpm /home/admin/${APP_NAME}/dev-base "
    
echo "scp package scp -i ${JUMP_CERT} -r ./dev-base/  ${JUMP_USER}@${JUMP_MACHINE} " 
scp -i ${JUMP_CERT} -r ./dev-base/  ${JUMP_USER}@${JUMP_MACHINE}:/home/admin/${APP_NAME}/
scp -i ${JUMP_CERT} -r ./environment/  ${JUMP_USER}@${JUMP_MACHINE}:/home/admin/${APP_NAME}/
echo "exec : docker build on ${JUMP_USER}@${JUMP_MACHINE} --build-arg APP_NAME=${APP_NAME} --build-arg APPID=${APPID} --pull -f Dockerfile_base -t registry-vpc.cn-north-2-gov-1.aliyuncs.com/${NAMESPACE}/${REPO}:${VERSION} ."
ssh -i ${JUMP_CERT} -t ${JUMP_USER}@${JUMP_MACHINE} "cd /home/admin/${APP_NAME}/;sudo docker build --build-arg APPNAME=${APP_NAME} --build-arg  --pull -f ./dev-base/Dockerfile_base -t registry-vpc.cn-north-2-gov-1.aliyuncs.com/${NAMESPACE}/${REPO}:${VERSION} ."
echo "exec : docker push registry-vpc.cn-north-2-gov-1.aliyuncs.com/${NAMESPACE}/${REPO}:${VERSION}"
ssh -i ${JUMP_CERT} -t ${JUMP_USER}@${JUMP_MACHINE} "cd /home/admin/${APP_NAME}/;sudo docker push registry-vpc.cn-north-2-gov-1.aliyuncs.com/${NAMESPACE}/${REPO}:${VERSION}"
echo "docker push done"

2.4 dockerfile 编写:

# 基于centos 基础镜像
FROM centos:7.4.1708
LABEL name="pandoraBoot Base Image" \
    vendor="alibaba" \
    build-date="20181201"
    
ENV LANG=en_US.UTF-8 \
    JAVA_HOME=/opt/taobao/java \
    TZ=PRC
# 安装工具软件,建立目录等
RUN adduser admin && \
mkdir -p /home/admin/lightapi/ && \
yum install -y telnet && \
yum install -y less && \
mkdir -p /home/admin/logs/ && \
mkdir -p /home/admin/logs/$BUILD_APP_NAME && \
yum install -y sudo && \
yum install -y unzip && \
yum install -y which && \
yum install -y iproute iproute-doc 
# 增加中间件新提供的 pandora 包 taobao-hsf.sar
COPY dev-base/taobao-hsf.tgz /home/admin/taobao-hsf.tgz
COPY dev-base/ajdk-8_3_6-b129-8.3.6-1207912.alios7.x86_64.rpm /home/admin/ajdk-8_3_6-b129-8.3.6-1207912.alios7.x86_64.rpm
COPY dev-base/sunfire-agent-1.0.10-20190916175607.noarch.rpm /home/admin/sunfire-agent-1.0.10-20190916175607.noarch.rpm
COPY dev-base/tsar-2.1.33-1568425.82ced85.el7.x86_64.rpm /home/admin/tsar-2.1.33-1568425.82ced85.el7.x86_64.rpm
COPY dev-base/cronie-1.4.11.rpm /home/admin/cronie-1.4.11.rpm
COPY dev-base/crontabs-1.11.rpm /home/admin/crontabs-1.11.rpm
# 解压安装
RUN rpm -ivh "/home/admin/ajdk-8_3_6-b129-8.3.6-1207912.alios7.x86_64.rpm" && \
ln -s /opt/taobao/install/ajdk-8_3_6-b129 /opt/taobao/java
#测试环境 setenv.sh
COPY dev-base/start-sunfire.sh /home/admin/start-sunfire.sh
# 拷贝执行程序的 shell 文件
COPY environment/common/bin/ /home/admin/appconf/bin/
COPY dev-base/init /home/admin/
COPY dev-base/init.sh /home/admin/
# 增加国际化资源
COPY dev-base/srvcode_i18nResourcesFile /home/admin/logs/mcms/i18n/i18nResourcesFile
# 安装sunfire监控agent
USER root
RUN rpm -ivh /home/admin/tsar-2.1.33-1568425.82ced85.el7.x86_64.rpm  && \
rpm -ivh --nodeps /home/admin/cronie-1.4.11.rpm  && \
rpm -ivh --nodeps /home/admin/crontabs-1.11.rpm && \
rpm -ivh /home/admin/sunfire-agent-1.0.10-20190916175607.noarch.rpm && \
echo "source '/home/admin/start-sunfire.sh' " >> /home/admin/start.sh && \
chmod -R a+x /home/admin/appconf/bin/ && \
chmod +x /home/admin/*.sh
WORKDIR /home/admin/appconf/bin
ENTRYPOINT ["/home/admin/start.sh" ]

阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术圈。”

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
10天前
|
人工智能 Kubernetes Cloud Native
阿里云容器服务,全面助力云上体育盛会
本文讲述了阿里云容器服务,通过安全稳定的产品能力和成熟的稳定性保障体系,全面助力云上体育赛场,促进科技之光与五环之光交相辉映。
阿里云容器服务,全面助力云上体育盛会
|
23天前
|
存储 安全 Ubuntu
Docker 镜像与 Docker 容器的区别
【8月更文挑战第27天】
62 5
|
23天前
|
运维 Ubuntu Shell
掌握Docker容器的创建:从镜像到实例
【8月更文挑战第27天】
92 4
|
1月前
|
存储 Ubuntu 应用服务中间件
在Docker中,怎么快速查看本地的镜像和容器?
在Docker中,怎么快速查看本地的镜像和容器?
|
1月前
|
缓存 开发者 Docker
Dockerfile是Docker容器化过程中的核心组件,它允许开发者以一种可重复、可移植的方式自动化地构建Docker镜像
【8月更文挑战第19天】Dockerfile是构建Docker镜像的脚本文件,含一系列指令定义镜像构建步骤。每条大写指令后跟至少一个参数,按序执行,每执行一条指令即生成新的镜像层。常用指令包括:FROM指定基础镜像;RUN执行构建命令;EXPOSE开放端口;CMD指定容器启动行为等。优化策略涉及减少镜像层数、选择轻量基础镜像、利用缓存及清理冗余文件。示例:基于Python应用的Dockerfile包括设置工作目录、复制文件、安装依赖等步骤。掌握Dockerfile有助于高效自动化构建镜像,加速应用部署。
24 1
|
1月前
|
弹性计算 运维 Kubernetes
阿里云容器化管理云上应用一键部署评测报告
阿里云容器服务Kubernetes版(ACK)作为阿里云在容器化领域的旗舰产品,以其卓越的性能、便捷的操作体验和高度的可扩展性,赢得了众多企业的青睐。
|
1月前
|
弹性计算 运维 Kubernetes
容器化管理云上应用解决方案评测
容器化管理云上应用解决方案评测
42 10
|
1月前
|
机器学习/深度学习 人工智能 安全
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
阿里云 AI 容器镜像有开箱即用、生态丰富、性能优化、安全合规和服务支持五大优势。
|
1月前
|
运维 Ubuntu Shell
Docker命令宝典:解锁容器化技术的无限可能,从镜像管理到容器操作,全面解析与实战指南!
【8月更文挑战第3天】Docker简化了应用的部署与运行,掌握其基本命令对开发者和运维人员至关重要。通过`docker images`可查看本地镜像;使用`docker pull`拉取如最新版Ubuntu镜像;`docker rmi`用于删除不再需要的镜像。运行容器可通过`docker run`命令,结合`-it`等选项提供交互式环境。`docker ps`显示运行中的容器,加上`-a`则列出所有容器。`docker stop`和`docker start`分别用于停止和重启容器,而`docker rm`则删除容器。
59 5
|
1月前
|
弹性计算 安全 调度
容器化管理云上应用评测
容器化管理云上应用评测

相关产品

  • 容器计算服务