我们学会了在主机上安装部署docker,也学会了构建自己的docker镜像和容器,启停也都会用了,下一步就需要持续构建发布docker的技能了。

我们希望能在代码提交后,有个远程服务能自动开始构建项目、拉取相应的镜像,执行对应的Dockerfile命令,最终给我们生成一个可以直接启动的contrainer容器,之后我们就可以将该容器发布到任何主机了。

现在有一些第三方的docker管理平台能提供上面的功能,如DaoCloud、网易蜂巢、阿里云docker平台等。这里我们以DaoCloud为例来看看怎么完成持续化构建。

1 创建DaoCloud项目

首先,注册个DaoCloud账号,进入控制台。

在这里创建一个项目,指定个名字,设置代码源。

可以看到,它给了几个选项,譬如GitHub,gitlab,git地址等。选择自己代码托管的地方,复制项目的git地址。

需要注意的是,GitHub和自己搭的git地址或者其他平台的git地址,在最终的持续构建时功能有所不同,GitHub的能够做到一提交代码就自己开始构建,而git地址只能手工点一下构建。见官方文档说明:http://guide.daocloud.io/dcs/git-9870399.html

我这里使用的是oschina的git地址,代码托管到git.oschina.net,输入项目的git地址后,点开始创建即可。

2 设置流程

可以看到右上角有个push触发或手动触发,由于我们使用的是git地址,所以只能手动触发。

流程定义系统默认给了3个阶段,测试、构建和发布,可以分别点开看看是什么。

这里有个基础镜像,环境变量还有左上角的触发条件等的配置。如果你需要进行一些构建前的测试,就可以添加安装命令、预备动作什么的,也可以替换基础镜像。

由于我只是用它来构建镜像,所有直接把测试任务给删掉了,只保留个构建任务

构建路径为“/”,代表是项目根目录,Dockerfile可以使用本地和云端,我使用本地,在项目的根目录添加一个Dockerfile文件

这是一个初始化的Springboot项目,我在application里添加了Controller标签,输出了一句“hello docker”,仅此。

FROM hub.c.163.com/wuxukun/maven-aliyun:3-jdk-8

ADD pom.xml /tmp/build/

ADD src /tmp/build/src
        #构建应用
RUN cd /tmp/build && mvn clean package \
        #拷贝编译结果到指定目录
        && mv target/*.jar /app.jar \
        #清理编译痕迹
        && cd / && rm -rf /tmp/build

VOLUME /tmp
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]

上面的Dockerfile文件,Springboot项目依赖的基础镜像很简单,只需要maven和jdk即可,当然如果你里面用了数据库、redis什么的,只有maven和jdk就不行了。当然,最好是选择云数据库,避免在docker里安装数据库、redis之类的。这样你的镜像就比较小,也不与容器内的数据绑定了,更便于集群使用。

为毛我的from镜像是那么长一串,而不是maven3-jdk-8的基础镜像呢,这可是我精心找的最快的适合Springboot基础镜像了。

众所周知,很多原始镜像下载速度很慢,而maven的依赖下载更是慢上加慢,平时开发中我们都习惯于使用阿里的maven仓库。这个基础镜像就是集成的阿里的maven库,而是地址在国内,下载飞快。

在项目根路径编辑好dockerfile后,把项目提交到git上即可。

然后就可以点击手动触发了

填写项目的分支或标签,譬如我的项目分支master,输入master确定即可。就可以看到构建过程开始了。

构建时,你可以点击该流程,就能看到日志,里面进行Dockerfile各种你设定好的流程。

3 得到镜像

构建完成后可以看到执行的历史

这时DaoCloud就已经为我们的代码构建完了一个docker镜像了,并且将镜像放到了DaoCloud中我们私有的镜像库中,我们就可以在任何地址拉取这个镜像,就像拉取任何一个公开的镜像一样。
你可以点击上图中,“镜像:testdocker”,进入镜像的详情页,
右上角就是该镜像的地址,你可以在任何地方拉取它,在设置里有访问控制,默认私有,就是当你拉取该镜像时需要输入DaoCloud的账号密码。公开的话就是任何人都可以拉取该镜像,不需要验证。


然后大家就可以在自己的主机上拉取这个镜像,并部署启动了。
下一篇来看看使用rancher来分发镜像到主机、多个容器负载均衡。





使用DaoCloud持续构建docker镜像,自动化部署的更多相关文章

  1. 基于Jenkins,docker实现自动化部署(持续交互)

      前言 随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致.基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化.因此 ...

  2. 基于Jenkins,docker实现自动化部署(持续交互)【转】

      前言 随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致.基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化.因此 ...

  3. springboot docker jenkins 自动化部署并上传镜像

    springboot + docker + jenkins自动化部署项目,jenkins.mysql.redis都是docker运行的,并且没有使用虚拟机,就在阿里云服务器(centos7)运行 1. ...

  4. Jenkins+Docker+Git 自动化部署

    Jenkins+Docker+Git 自动化部署图文教程 https://blog.csdn.net/qq_38252039/article/details/89791247 前言: 通过几天的学习和 ...

  5. 多阶段构建Docker镜像

    在Docker 17.05及更高的版本中支持支持一种全新的构建镜像模式:多阶段构建: 多阶段构建Docker镜像的最大好处是使构建出来的镜像变得更小: 目前常见的两个构建镜像的方式为: 1.直接使用某 ...

  6. 使用Jenkins pipeline流水线构建docker镜像和发布

    新建一个pipeline job 选择Pipeline任务,然后进入配置页面. 对于Pipeline, Definition选择 "Pipeline script from SCM" ...

  7. Docker:使用Jenkins构建Docker镜像

    Docker  彭东稳  1年前 (2016-12-27)  10709次浏览  已收录  0个评论 一.介绍Jenkins Jenkins是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从 ...

  8. 构建Docker镜像两种方式的比较-Dockerfile方式和S2I方式

    前言 写Dockerfile是构建Docker镜像最通常的方式,接触过Docker的童鞋多少了解一些.前段时间研究OpenShift(paas的一种),发现了另外一种构建Docker镜像的方式:S2I ...

  9. Maven插件构建Docker镜像

    背景 微服务架构下,微服务在带来良好的设计和架构理念的同时,也带来了运维上的额外复杂性,尤其是在服务部署和服务监控上.单体应用是集中式的,就一个单体跑在一起,部署和管理的时候非常简单,而微服务是一个网 ...

随机推荐

  1. 20145240《网络对抗》MSF基础应用

    MSF基础应用 一个主动攻击,如ms08_067 启动msf search ms08_067,查找相应的漏洞,查询可攻击的模块. 根据上述漏洞的模块use exploit/windows/smb/ms ...

  2. javaScript对象与JSON.stringfly(obj)

    //接收json对象 var objJson = new Object(); var arr = new Array(); var obj1 = new Object(); obj1.age = 15 ...

  3. 构造函数挨个过 —— String()

    本篇整理JavaScript中构造函数String的相关知识,主要分为以下三个部分: 构造函数String()的作用与使用方式: String()的属性和方法: 字符串对象实例属性和方法: 一 构造函 ...

  4. 解读:计数器Counter

    Counters: 44 File System Counters FILE: Number of bytes read=655771325 FILE: Number of bytes written ...

  5. 2_jenkins_git创建创建及项目构建

    确保jenkins服务正常工作 进入WEB界面 查看git插件是否正常安装 "管理系统" --> "管理插件" "可选插件" 然后找到 ...

  6. ThinkPHP将上传问件添加到数据库

    <?php namespace Home\Controller; /***************** use Think\Controller; ****命名空间****/ class Mes ...

  7. dd命令参数解析

    seek=N : 跳过N个输出块 skip=N : 跳过N个输入块 注意:sd卡的每个扇区的大小统一为512个字节

  8. Ubuntu 使用root登陆界面

    打开终端开启root账户 :sudo passwd -u root 输入当前用户的密码 2.为root账户设置密码:sudo passwd root 设置root密码,输入两次 3.进入到/usr/s ...

  9. Java 1.7 ThreadPoolExecutor源码解析

    Java中使用线程池技术一般都是使用Executors这个工厂类,它提供了非常简单方法来创建各种类型的线程池: public static ExecutorService newFixedThread ...

  10. C# Winform实现手机号码归属地查询工具

    摘要:本文介绍使用C#开发基于Winform的手机号码归属地查询工具,并提供详细的示例代码供参考. 一.需求描述 输入正确的手机号码,查询该号码的归属地和其他相关信息. 二.需求分析 1.实现手机号码 ...