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

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

前言

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

纯手工捣鼓Docker镜像

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

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

[[199650]]

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测试镜像;

责任编辑:武晓燕
相关推荐

2021-02-01 08:34:49

CICD管道

2019-12-24 08:49:06

容器Docker网络

2010-05-21 18:03:19

IIS服务器

2015-04-20 17:11:41

服务解决方案华为

2024-01-19 15:13:18

无服务器应用容器云计算

2009-12-11 10:27:07

APC

2021-09-01 10:59:28

可信云

2015-09-06 10:34:47

2010-07-12 10:08:40

ibmdwSOA

2019-09-10 10:46:24

微服务架构传统服务

2018-12-03 12:17:27

Semptian解决方案

2012-05-27 16:21:31

IDC华为

2018-12-03 11:59:42

Inventec解决方案

2018-12-03 12:13:21

Mellanox解决方案

2018-12-03 12:26:30

YADRO解决方案

2011-11-30 13:08:55

企业防毒防毒方案拯救三

2011-03-24 17:09:44

锐捷网络网络解决方案

2018-07-25 14:50:41

服务器虚拟化方案

2023-10-08 09:31:43

容器技术

2015-02-13 10:21:11

dockerubuntu解决方案
点赞
收藏

51CTO技术栈公众号