Jenkins和Docker在HULK的落地实践

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

【3 天烧脑式基于Docker的CI/CD实战训练营 | 北京站】本次培训围绕基于Docker的CI/CD实战展开,具体内容包括:持续集成与持续交付(CI/CD)概览;持续集成系统介绍;客户端与服务端的 CI/CD 实践;开发流程中引入 CI、CD;Gitlab 和 CI、CD 工具;Gitlab CI、Drone 的使用以及实践经验分享等。

纯手工捣鼓Docker镜像

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

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

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

# mkdir nginx-19-el6# cd nginx-19-el6

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

# mkdir rootfs# tree rootfs/rootfs/
└── usr
└── local
   └── nginx
       └── conf
           ├── fastcgi.conf
           ├── include
           │   └── xxx.conf
           ├── mime.types
           └── nginx.conf

3、写一个Dockerfile

# cat dockerfileFROM r.your.domain/admin/centos-68:latest
RUN yum -y install nginx-1.9.15-5.el6 && yum clean all
ADD rootfs.tar.gz /
EXPOSE 80
ENTRYPOINT ["/usr/local/nginx/sbin/nginx"]
CMD ["-c", "/usr/local/nginx/conf/nginx.conf", "-g", "daemon off;"]

4、build镜像

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

5、push到镜像仓库

# 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:

#!groovypipeline {
agent any

environment {
  REGISTRY_ACCESS = credentials('xxx')
}

options {
   timeout(time: 30, unit: 'MINUTES')
}

// a list of parameters provided when triggering
parameters {
   string(name: 'registry', defaultValue: '')
   string(name: 'namespace', defaultValue: '')
   string(name: 'image_name', defaultValue: '')
   string(name: 'image_tag', defaultValue: '')
}

stages {
   stage('Verify') {
       steps {                echo "To check whether related project exists and specified tag is usable..."
           sh "xxx xxx xxx"
       }
   }

   stage('Prepare') {
       steps {                echo "To generate 'Dockerfile' and archive 'rootfs' directory..."
           sh "xxx xxx xxx"
           sh "xxx xxx xxx"
       }
   }

   stage('Build') {
       steps {                echo "To build image..."
           sh "xxx xxx xxx"
       }
   }

   stage('Push') {
       steps {                echo 'To push image...'
           sh "xxx xxx xxx"
       }
   }
}

post {
   always {            echo "Always clean up, no matter whether the building and pushing was failure or success"
       sh "xxx xxx xxx"
   }
}  

镜像仓库管理

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

总结

本文主要给大家介绍了Jenkins&Docker是如何在HULK落地的,其实最初的出发点还是解决当前Docker CLI下上手使用成本高的问题。在经过WEB化和自动化之后,会大大降低业务的接入使用成本,最终助力Docker在业务的快速实践。

本文转载自公众号:HULK一线技术杂谈,ID:hulktalk,作者:ADDOPS团队王浩宇。

原文发布时间为:2017-08-16

本文作者:ADDOPS团队王浩宇

本文来自合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:Jenkins和Docker在HULK的落地实践

时间: 2024-11-01 23:44:42

Jenkins和Docker在HULK的落地实践的相关文章

Jenkins与Docker的持续集成实践

本文讲的是Jenkins与Docker的持续集成实践[编者的话]持续集成(CI/CD)是一种软件开发实践.用于帮助团队成员频繁.快速的集成,测试他们的工作成果,以尽快发现集成错误. 更频繁.更早的集成意味着更早的发现问题.通过持续集成,及时发现和解决代码故障,提高代码质量,减少故障处理成本等等. [3 天烧脑式基于Docker的CI/CD实战训练营 | 北京站]本次培训围绕基于Docker的CI/CD实战展开,具体内容包括:持续集成与持续交付(CI/CD)概览:持续集成系统介绍:客户端与服务端的

DockOne微信分享(一一零):Docker在沪江落地的实践

本文讲的是DockOne微信分享(一一零):Docker在沪江落地的实践[编者的话]容器化是很多公司技术层向往又惧怕的一项热门技术,它的高效性,封装性能给开发.运维带来许多便利,但其本身也需要较强的技术能力去控制,否则会变成一个无法落地的概念.沪江作为教育界的独角兽,随着业务的增长,在开发.测试.运维上的成本增加日益显著.经过我们一年的探索,终于使Docker技术在沪江落地,不但成功的降低了成本,并吸引了其他部门的关注与试用,取得良好的成效. [上海站|3天烧脑式微服务架构训练营]培训内容包括:

使用Jenkins、Docker和Ansible进行持续集成和交付

本文讲的是使用Jenkins.Docker和Ansible进行持续集成和交付,[编者的话]本文介绍了使用Docker.Jenkins等技术实现应用开发,测试到部署的自动化.它是一种探索.重点在于流程中的代码检测.测试.部署.部署后要做的事情没有涉及.会在后面文章中介绍. 本文试图为您介绍一个设置持续集成.交付.部署工作流的可行方式.我会使用Jenkins.Docker.Ansible和Vagrant来设置(配置)两个服务器.一个作为Jenkins的服务器,另一个用来模拟生产环境.前者用来检查代码

基于Docker的CI/CD流水线实践

本文讲的是基于Docker的CI/CD流水线实践[编者的话]随着DevOps理念不断的传播,大部分IT从业者对于DevOps本身也有了一定的了解和认识,然而企业内部想根据DevOps思想实践,这并不是一件很简单的事情.一方面由于企业内部的历史环境以及组织结构问题,另外一方面因为业界并没有一套标准的开源工具集可以借鉴(关于几家基于Docker创业的服务提供商暂时除外). [3 天烧脑式容器存储网络训练营 | 深圳站]本次培训以容器存储和网络为主题,包括:Docker Plugin.Docker s

独家:阿里巴巴DevOps落地实践玩法及思路解析

互联网时代,随着业务的迅猛发展,企业越来越希望通过实施DevOps来提升研发.运维等IT部门的效率,支撑业务发展.互联网企业如何利用工具让DevOps落地?传统企业如何提升研发效能,更快速的互联网化?这些都是企业面临的问题.   7月26日,阿里巴巴持续集成持续交付平台--云效,在深圳阿里中心举办了一场"业务为王时代,DevOps怎么玩?"主题沙龙,由阿里巴巴技术专家从云效新概念的提出,到阿里巴巴DevOps落地实践.到企业如何利用云效进行高效研发.再到阿里巴巴CI/CD之分层自动化,

联想企业网盘基于Docker构建分布式部署框架实践

本文讲的是联想企业网盘基于Docker构建分布式部署框架实践[编者的话]本文首先介绍了企业级分布式系统部署所面临的挑战,并且结合联想云存储自有框架研发经验分享了一些解决问题的思想和具体做法.最后还与Kubernetes项目进行了简单对比. 众所周知,企业网盘在这两年呈现爆发式增长,越来越多的企业选择企业网盘,来解决企业在业务过程中面临的数据集中存储.共享.分发.协同办公以及移动化等痛点需求.同时将企业网盘整合到各个业务系统中,大幅提高企业的数据流转效率和安全! 而联想企业网盘增长尤为迅速,仅联想

【转载】Docker 镜像优化与最佳实践

阿里云高级研发工程师御坂在云栖TechDay41期的线下沙龙活动中分享了Docker镜像优化与最佳实践.本文为沙龙内容回顾. 从Docker镜像存储的原理开始,针对镜像的存储.网络传输,介绍如何在构建中对这些关键点进行优化.并介绍Docker最新的多阶段构建的功能,以解决构建依赖的中间产物问题. 镜像概念 镜像是什么? 从一个比较具体的角度去看,镜像就是一个多层存储的文件,相较于普通的ISO系统镜像来说,分层存储会带来两个优点: 一个是分层存储的镜像比较容易扩展,比如我们可以基于一个Ubuntu

Docker 镜像优化与最佳实践

云栖TechDay41期,阿里云高级研发工程师御坂带来Docker镜像优化与最佳实践.从Docker镜像存储的原理开始,针对镜像的存储.网络传输,介绍如何在构建中对这些关键点进行优化.并介绍Docker最新的多阶段构建的功能,以解决构建依赖的中间产物问题.   以下是精彩内容整理: 镜像概念 镜像是什么?从一个比较具体的角度去看,镜像就是一个多层存储的文件,相较于普通的ISO系统镜像来说,分层存储会带来两个优点,一个是分层存储的镜像比较容易扩展,比如我们可以基于一个Ubuntu镜像去构建我们的N

Docker在千寻位置的实践

云栖TechDay31期,来自千寻位置网的技术总监汤严敏带来Docker在千寻位置的实践的演讲.本文主要从千寻位置的理念和架构开始谈起,着重分析了千寻位置的Docker历程与实践,包括统一配置中心和阿里云镜像库等.   以下是精彩内容整理: 千寻位置 千寻位置以"互联网+位置(北斗)"的理念,通过北斗地基一张网的整合与建设,基于云计算和数据技术,构建位置服务云平台,以满足国家.行业.大众市场对精准位置服务的需求. 千寻位置是一个基于卫星定位.云计算和大数据技术的位置服务开放平台,面向企