我们学会了在主机上安装部署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. 照着官网来安装openstack pike之keystone安装

    openstack基础环境安装完成后,现在开启安装keystone服务(在控制节点上执行下面所有操作) 1.为keystone创建数据库 mysql -u root -p MariaDB [(none ...

  2. spring boot加mybatis使用Map返回时,当值为空时属性也会没有(转)

    使用spring boot加mybatis时,设置Map返回,当值为空时属性也会没有,就会报错 在application.properties中加入下面配置,将会解决这个问题.   #当查询数据为空时 ...

  3. 【转载】解决window.showModalDialog 模态窗口中location 打开新窗口问题

    来源: <http://bibipear.blog.sohu.com/143449988.html> 在我们的项目中,通常会用到showModalDialog 打开一个模态的子窗口,但是在 ...

  4. AccessToken-->Password Grant

    https://www.oauth.com/oauth2-servers/access-tokens/password-grant/ The Password grant is used when t ...

  5. win32和x86以及x64的区别

    本来是知道x86和x64的区别的. 今天突然在VS2008上看到一个win32的选项,一下子懵了,这是什么玩意. 百度之,发现答案 win32是指windows 32位的操作系统,顾名思义是支持32为 ...

  6. Python学习札记(七) Basic4 条件判断

    参考:条件判断 Note 1.Python的条件判断关键字与C语言类似,if.else,以及elif,相当于C语言中的else if. 2.Python与C语言不一样的是,使用缩进来判断语句是否属于条 ...

  7. C# 自动触发鼠标、键盘事件

    要在C#程序中触发鼠标.键盘事件必须要调用windows函数. 一.鼠标事件的触发 1.引用windows函数mouse_event /// <summary> /// 鼠标事件 /// ...

  8. NNCRF之NNSegmentation, NNPostagging, NNNameEntity

    这里主要介绍NNSegmentation 介绍: NNSegmentation是一个基于LibN3L的利用神经网络来进行分词的工具. 他可以通过不同的模型(NN, RNN, GatedNN, LSTM ...

  9. 读取文件并找出年龄最大的N个人-兰亭集市笔试题

    C++ code: #include <iostream> #include <fstream> #include <map> #include <strin ...

  10. Office.资料

    1.JAVA+JS如何在HTML页面上显示WORD文档内容?ActiveX只能兼容IE不考虑!_百度知道.html(https://zhidao.baidu.com/question/74594982 ...