Hulk容器服务的镜像CI解决方案

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:

前言

巧妇难为无米之炊,玩容器,“镜像”就是下锅的米,我们私有云Hulk平台的容器服务,向用户提供UI页面化的一整套的镜像定制、制作、管理、私有镜像仓库的服务,这套服务的背后技术实现,Jenkins算是“引擎”,本文简要介绍这其中的技术方案;

纯手工捣鼓Docker镜像

Docker的镜像,已然成为容器镜像的事实标准,我们的容器服务也是基于Docker构建的;

手工制作Docker镜像时,大概这几步:

1、创建制作镜像的工作目录

 
  1. # mkdir nginx-19-el6 
  2. # cd nginx-19-el6 

2、可以创建一个子目录,存放要添加到镜像中的配置文件,并组织好目录层次,最后用ADD指令统一添加到镜像中

 
  1. # mkdir rootfs 
  2. # tree rootfs/ 
  3. rootfs/ 
  4. └── usr 
  5.     └── local 
  6.         └── nginx 
  7.             └── conf 
  8.                 ├── fastcgi.conf 
  9.                 ├── include 
  10.                 │   └── xxx.conf 
  11.                 ├── mime.types 
  12.                 └── nginx.conf 

3、写一个dockerfile

 
  1. # cat dockerfile 
  2. FROM r.your.domain/admin/centos-68:latest 
  3. RUN yum -y install nginx-1.9.15-5.el6 && yum clean all 
  4. ADD rootfs.tar.gz / 
  5. EXPOSE 80 
  6. ENTRYPOINT ["/usr/local/nginx/sbin/nginx"
  7. CMD ["-c""/usr/local/nginx/conf/nginx.conf""-g""daemon off;"

4、build镜像

 
  1. # docker build -t r.your.domain/xxx/nginx-19-el6:01 . 

5、push到镜像仓库

 
  1. # docker push r.your.domain/xxx/nginx-19-el6:01 

这种纯手工的方式,很明显,由于自动化程度低,工作量较大,尤其是当镜像种类、版本较多以后,而且对于不了解docker命令、dockerfile语法的同学,使用门槛还是比较高哦;

UI页面化、自动化地生产Docker镜像

针对上面提到的效率、使用门槛的问题,简要介绍下我们的解决方案;

在面向用户的功能方面,要解决好下面几个主要问题:

  1. 镜像内容的管理,主要是一些配置文件,比如上面的rootfs目录
  2. dockerfile的定制、自动生成,比如定制RUN、EXPOSE、ENTRYPOINT、CMD
  3. 触发build、push,以及镜像仓库的管理

在后端的技术实现方面,我们采用下面的架构:

镜像内容管理、dockerfile定制生成

UI页面上支持用户管理自己的配置文件(rootfs)、运行的命令(RUN)、入口程序、暴露的端口等,比如:

后台会把这些内容、信息,存储到GitLab;

Jenkins实现自动化生产线

如果用户触发“制作镜像”,会触发一个Jenkins的job,该job从GitLab拉取后,根据一个Jenkinsfile里定义逻辑“制作镜像”;

Jenkinsfile里充分利用了pipeline的语法,把一系列步骤串起来:前期检查、创建tar文件、生成dockerfile、build、push、清理;

下面是一个示例的Jenkinsfile:

 
  1. #!groovy 
  2.  
  3. pipeline { 
  4.     agent any 
  5.  
  6.     environment { 
  7.        REGISTRY_ACCESS = credentials('xxx'
  8.     } 
  9.  
  10.     options { 
  11.         timeout(time: 30, unit: 'MINUTES'
  12.     } 
  13.  
  14.     // a list of parameters provided when triggering 
  15.     parameters { 
  16.         string(name'registry', defaultValue: ''
  17.         string(name'namespace', defaultValue: ''
  18.         string(name'image_name', defaultValue: ''
  19.         string(name'image_tag', defaultValue: ''
  20.     } 
  21.  
  22.     stages { 
  23.         stage('Verify') { 
  24.             steps { 
  25.                 echo "To check whether related project exists and specified tag is usable..." 
  26.                 sh "xxx xxx xxx" 
  27.             } 
  28.         } 
  29.  
  30.         stage('Prepare') { 
  31.             steps { 
  32.                 echo "To generate 'Dockerfile' and archive 'rootfs' directory..." 
  33.                 sh "xxx xxx xxx" 
  34.                 sh "xxx xxx xxx" 
  35.             } 
  36.         } 
  37.  
  38.         stage('Build') { 
  39.             steps { 
  40.                 echo "To build image..." 
  41.                 sh "xxx xxx xxx" 
  42.             } 
  43.         } 
  44.  
  45.         stage('Push') { 
  46.             steps { 
  47.                 echo 'To push image...' 
  48.                 sh "xxx xxx xxx" 
  49.             } 
  50.         } 
  51.     } 
  52.  
  53.     post { 
  54.         always { 
  55.             echo "Always clean up, no matter whether the building and pushing was failure or success" 
  56.             sh "xxx xxx xxx" 
  57.         } 
  58.     } 

镜像仓库管理

制作好的镜像,存储于私有镜像仓库,用户在页面可以方便的管理,也可以在自己测试环境,docker pull拉取镜像、docker run测试镜像;


本文作者:佚名

来源:51CTO

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
Kubernetes 物联网 数据中心
大规模 IoT 边缘容器集群管理的几种架构 -2-HashiCorp 解决方案 Nomad
大规模 IoT 边缘容器集群管理的几种架构 -2-HashiCorp 解决方案 Nomad
|
6月前
|
存储 Ubuntu Shell
Docker镜像与容器备份迁移(export、import与commit、save、load)
Docker镜像与容器备份迁移(export、import与commit、save、load)
1315 0
|
4月前
|
Docker 容器
docker容器查看所有没使用的镜像,并删除
docker容器查看所有没使用的镜像,并删除
214 0
|
2月前
|
关系型数据库 MySQL Linux
docker镜像与容器的迁移
docker迁移镜像步骤 docker迁移容器步骤 docker迁移mysql容器步骤
|
2月前
|
Kubernetes Cloud Native 网络协议
一文搞懂“镜像“和“容器“
一文搞懂“镜像“和“容器“
32 1
|
2月前
|
Kubernetes Linux Docker
如何保存 / 同步多架构容器 Docker 镜像
如何保存 / 同步多架构容器 Docker 镜像
|
2月前
|
Java 测试技术 Maven
云效问题之构建docker镜像从容器仓库拉取镜像报错如何解决
云效镜像是指存储在阿里云效服务中的容器镜像,它们可以用于持续集成和持续部署(CI/CD)流程中;本合集将介绍如何在云效平台上管理和使用镜像资源,以及常见的镜像问题和解决办法。
66 0
|
3月前
|
虚拟化 Docker Windows
docker容器和服务器镜像
【1月更文挑战第15天】docker容器和服务器镜像
511 0
|
3月前
|
Java Maven Docker
SpringBoot项目打包部署到阿里云服务器、通过Maven插件制作Docker镜像、部署项目容器、配置生产环境
SpringBoot项目打包部署到阿里云服务器、通过Maven插件制作Docker镜像、部署项目容器、配置生产环境
107 0
|
3月前
|
存储 缓存 虚拟化
Docker: 容器与镜像
Docker: 容器与镜像

相关产品

  • 容器计算服务