关于Docker

Docker 简介

Docker现在是Github社区最火的项目之一,Docker是个容器,或许你听过lxc,你可能知道Tomcat这个Web容器,容器是什么概念,意会就好。问个问题,你想在一台机子上运行一个java6的应用,又想运行一个java8应用怎么办;或者说你开发出一个软件,mac版、windows版本,我都想运行,怎么办?装虚拟机?不不不,虚拟机太浪费资源了,Docker这时候就派上用场了,在电脑上,你可以同时装一个mac的容器和windows的容器哦。一个虚拟机可能会消耗2到3G的内存,一个容器仅仅只消耗几百M的资源哦。

Docker 安装

具体安装细节,可以参照https://docs.docker.com,文档说得很清楚了。 Docker原本是开发在Linux上的,Windows下是采用Docker machine的方式,起一个虚拟机在虚拟机里面跑Docker。本来呢Mac也是采用虚拟机的方式,后来有了Docker for mac,采用HyperKit,一种更轻量级的虚拟化方式。当然,你还是可以用Docker machine的方式运行。

Docker 基础

搞清楚两个概念,容器与镜像。打个比方吧。装机,容器就是装完成后的系统,镜像就是ISO安装盘,系统镜像。

作为一个合格的程序员,你一定用过Git的吧,pull,commit,push……写代码过程就是这样,先拉取代码pull,然后是在一个基础的文本上不断地增加commit,加积木一样,一层层叠加,累积上去,最后再push上去。没错Docker就是采用这种形式。

简单介绍下Docker命令:

  • Docker version / Docker info 查看基本信息,遇到使用问题或者BUG,可以到社区里报告,记得带着这些信息哈。

  • Docker pull 拉取镜像。

  • Docker run 从镜像创建一个容器并运行指定的命令常用参数-i -d,建议用—-name命名这个容器,命名后可以使用容器名访问这个容器。

  • Docker attach(不推荐使用)。

  • Docker exec -ti CONTAINER /bin/bash 连接到容器上运行bash

  • Docker logs CONTAINER 查看日志,如run命令后的运行结果,Docker logs -f 查看实时的日志。

  • Docker kill 杀死Docker容器进程,你可以使用Docker kill $(Docker ps -aq)杀死所有的Docker进程,后者打印出所有的容器的容器id(包括正在运行的,和没有运行的)。

  • Docker rm CONTAINER 删除一个容器,记得要先停止正在运行的容器,再去删除它。

  • Docker exec -it <container_id> bash -c 'cat > /path/to/container/file' < /path/to/host/file/容器外向容器内复制文件(也可以用挂载的形式哦)。

  • Docker commit -a “mike” -m “镜像的一些改动” CONTAINER 当你在容器内做了某种操作后,如增加了一个文件,你可以用这个命令把修改提交,重新打包为镜像。

  • Docker push 推送镜像。。到这里是不是觉得跟Git的模式已经有点像了呢。

  • Docker history IMAGES 查看镜像的修改历史。

  • Docker ps -a | grep "Exited" | awk '{print $1 }'| xargs Docker rm 删除exited的容器。

  • Docker rmi $(Docker images | awk '/^<none>/ {print $3}') 删除tag为NONE的容器。

Dockerfile基础

Dokcerfile,是的,你还是要稍微掌握下Dockerfile的写法。

  • From 每个Dockerfile镜像的构建都会基于一个基础镜像,这是你一来的基础镜像name:tag,git。

  • MAINTAINER (不用记,作者签名)。

  • ENV 配置环境变量。

  • COPY 复制本地。

  • EXPOSE 暴露容器的端口。

  • WORKDIR 后续命令的执行路径。

  • RUN important!,执行相应的命令,这一步是在容器构建这一步中执行的命令,一般用作安装软件,操作的结果是持久化在容器里面保存下来的。

    Tips:每次执行RUN的时候都是再默认路径执行的,如果要到固定路径下执行命令请在之前加WORKDIR,或者使用RUN (cd workpath && echo "mike")这样把cd命令跟相应的执行命令用括号括起来。

  • ENTRYPOINT 容器启动后执行的命令。

我们把Jenkins和Docker结合起来。Jenkins本身版本比较老,虽然插件多,但许多插件没有人在维护更新,环境本身还是比较旧的,且各式各样的工程如果都用插件来安装,这样的插件不一定满足要求,所以建议配合Docker来搭建测试环境。

如果说好处的话,还有比较激进的一段话(建议略过哈):

我们把一个工程代码开发后的测试流程简单分为编译、部署(事实上可能更多,如项目代码有多个工程,工程间有相互依赖)。如果我们想在一个slave节点上既运行Java7应用,又运行Java8应用,哦,Jenkins有相应的插件解决?那如果是NodeJs4应用和NodeJs5应用呢?JAVA升级到9了,插件没更新?像一些复杂的工程,如JDK自身的编译、如Docker项目的编译,我需要安装各种依赖,就可能会污染全局空间,这时候就建议把编译过程放到容器里,或者说我要在Linux上编译部署一个Windows应用,在一个Windows容器里部署就可以了。

再比如,如果我们用omad部署web应用可能要考虑端口冲突,部在Docker容器里,工程代码的端口,都不用变。还有,容器作测试环境的话,如果要保证线上,线下环境一致,甚至可以复制一个线下容器,直接在线上跑容器的。还有......

大致的想法是,我们用Jenkins来做节点控制、版本管理、流程设置、触发Job,用Docker来搭建编译部署环境。把这一切连接起来的就是流程脚本和Dockerfile的编写。

实现细节可以参照下面的示例。

触发条件:由Jenkins控制,如设置定时执行,或者github中的每一个commit,或者每一个PR执行一次。

构建流程:各个环节,Job,之间用Pipeline来实现整个构建流程的控制。

构建Job:这里,我觉得可以分为两种情况,一种是把拉取代码的过程和构建编译环境的过程都放到Dockfile里面,这适用于比较复杂的编译环境,如Docker本身的编译需要安装许多的依赖,对依赖的版本都有不同的要求,还是建议把编译环境放在容器的里面。另一种情况,为求省事方便,如java工程,编译一般用maven等构建工具来完成的话,大可以放在外面,只是把运行环境搬到Docker容器里。

Dockerfile:

配置基础运行环境。

如果需要编译,配置编译环境,可以在容器内拉取代码,执行编译。

web应用暴露端口。

配置应用启动命令。

另外,容器里你都可以配置成8080端口,暴露8080端口,只要再Docker run -p *:8080,运行时改下相应的端口映射就可以了。

原文:https://blog.csdn.net/jek123456/article/details/56677408

Jenkins+Docker自动化集成环境搭的更多相关文章

  1. 从零开始搭建Jenkins+Docker自动化集成环境

    本文只简单标记下大概的步骤,具体搭建各个部分的细节,还请自行搜索.第一.二部分只是对Jenkins和Docker的简单介绍,熟悉的同学请直接跳到第三部分. 一.关于Jenkins Jenkins简介 ...

  2. Docker学习总结(13)——从零开始搭建Jenkins+Docker自动化集成环境

    本文只简单标记下大概的步骤,具体搭建各个部分的细节,还请自行搜索.第一.二部分只是对Jenkins和Docker的简单介绍,熟悉的同学请直接跳到第三部分. 一.关于Jenkins Jenkins简介 ...

  3. 使用Docker搭建Jenkins+Docker持续集成环境(自动化构建发布部署)

    本文介绍如何通过Jenkins的docker镜像从零开始构建一个基于docker镜像的持续集成环境,包含自动化构建.发布到仓库\并部署上线. 0. 前置条件 服务器安装docker,并启动docker ...

  4. Docker+Jenkins持续集成环境(1)使用Docker搭建Jenkins+Docker持续集成环境

    本文介绍如何通过Jenkins的docker镜像从零开始构建一个基于docker镜像的持续集成环境,包含自动化构建.发布到仓库\并部署上线. 0. 前置条件 服务器安装docker,并启动docker ...

  5. Jmeter+Jenkins+Ant自动化集成环境搭建

    搭建环境: JDK:jdk1.8.0_92 Ant:apache-ant-1.9.7 Jmeter: apache-jmeter-3.0 Jenkins:jenkins-2.19.3 具体环境配置 1 ...

  6. Docker 结合Jenkins 构建持续集成环境

    Docker 结合Jenkins  构建持续集成环境 Jenkins : 一个开源的持续集成工具, 提供软件版本发布.自动测试等一系列流程及丰富的插件 Maven: 一个自动化构建工具, 通过一段描述 ...

  7. 用MSBuild和Jenkins搭建持续集成环境(2)

    http://www.infoq.com/cn/articles/MSBuild-2   作者 Mustafa Saeed Haji Ali ,译者 李剑 发布于 2012年10月23日 | 注意:  ...

  8. 个人环境搭建——搭建jenkins持续构建集成环境

    ---恢复内容开始--- 搭建jenkins持续构建集成环境  要搭建jenkins持续构建集成环境,首先要安装tomcat和JDK:   第一部分,基本说明:   敏捷(Agile) 在软件工程领域 ...

  9. Jenkins + Jmeter +Ant自动化集成环境搭建(一)

    所需工具 一.jmeter 工具下载 https://jmeter.apache.org/  配置环境JDK等及各种插件可以看小七之前的教程 二.Ant安装(http://ant.apache.org ...

随机推荐

  1. February 28th, 2018 Week 9th Wednesday

    Knowledge makes humble, ignorance makes proud. 博学使人谦逊,无知使人骄傲. Humility is not equal with being passi ...

  2. 【Beta】博客合集

    [Beta Scrum]冲刺! 1/5 [Beta Scrum]冲刺! 2/5 [Beta Scrum]冲刺! 3/5 [Beta Scrum]冲刺! 4/5 [Beta Scrum]冲刺! 5/5

  3. 【Linux基础】VI 编辑器基本使用方法

    vi编辑器是所有Unix及Linux系统下标准的编辑器.对Unix及Linux系统的任何版本,vi编辑器是完全相同的,它是Linux中最基本的文本编辑器. 第一章vi的三种模式 第二章vi文本编辑器 ...

  4. 模拟placeholder

    把这个记下来,主要是因为这里的 defaultValue 我之前竟然不知道 <input type="text" value="提示内容" onFocus ...

  5. 整理volatile相关知识点

    前言:volatile关键字在面试中经常被问到,从volatile关键字可以引申出许多知识点,因此有必要对此进行总结.本文根据<深入理解Java虚拟机——JVM高级特性与最佳实践>中的相关 ...

  6. 【COCOS2DX-游戏开发之三一】之 坐标系(下) convertToNodeSpace和convertToWorldSpace

    游戏中常常会用到一些变换: 游戏中武器和角色在一个layer上,为了效率.会考虑将bullet, effect和 PhysicsParticle分别放到不用的层上,相应的层上使用batchnode来提 ...

  7. 转://创建oracle索引时需要注意的7个事项

    在创建Oracle索引时,有一些问题使我们需要注意的,下面就为您介绍创建oracle索引的一些注意事项,希望对您学习创建Oracle索引方面能有所帮助. 1.一般来说,不需要为比较小的表创建索引: 2 ...

  8. Linux下简单的缓冲区溢出

    缓冲区溢出是什么? 科班出身,或者学过汇编的应该知道,当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被“撑爆”,从而覆盖了相邻内存区域的数据 成功修改内存数据,可造成进程劫持 ...

  9. Python IDLE 增加清屏功能

    (Python2,Python3 通用) 保存如下代码到 ClearWindow.py """ Clear Window Extension Version: 0.2 A ...

  10. Springboot实现跨域请求

    之所以需要用到跨域请求,目的在于现在的Java项目,几乎基本上都前后端分离,除一些较老的维护项目外(通常是单体或者是maven多模块形式,不过本质上还是将前端放在webapps下). SpringBo ...