一、总体流程

部署:

  • 开发机(mac)

    • ip:11.11.11.11
    • docker:1.12.1
  • 部署机(centos7)
    • ip:10.211.55.4
    • docker:1.12.3
  • 生产机(centos7)
    • ip:10.211.55.3
    • docker:1.10.3(装k8s1.4的时候自带安装的版本)

总体流程:

  • 在开发机开发代码后提交到gitlab
  • 之后通过webhook插件触发jenkins进行构建,jenkins将代码打成docker镜像,push到docker-registry,
  • 之后将该镜像推到生产机。(之后引入k8s,会将该镜像推到云上,云自己分配机器)
    • 这一步这里不做了,之后引入k8s后再做

二、gitlab安装

三、jenkins安装

四、gitlab通知jenkins进行构建

五、docker-registry安装

1、部署机(下载镜像,启动镜像)

  • docker pull hub.c.163.com/library/registry:latest
  • docker tag 0bb8b1006103 registry
  • docker run -d -p 5000:5000 -v /opt/registry:/var/lib/registry registry
    • 默认的存储目录:/var/lib/registry

2、开发机

  • 先设置--insecure-registry(这里介绍三种情况)
  • 之后push镜像到registry

2.1、mac:

说明:设置insecure registry如上,否则有https的问题,导致无法push和pull,之后"apply restart"就好了。

  • docker push 10.211.55.4:5000/zhaojigang/jdk8:c7_j8
  • ps -ef | grep docker   看看docker进程的options设置成功没有

2.2、docker1.10.3

在/etc/sysconfig/docker中修改OPTIONS='--selinux-enabled=false --insecure-registry=10.211.55.4:5000'

修改后

  • systemctl daemon-reload
  • systemctl restart docker
  • ps -ef | grep docker  看看docker进程的options设置成功没有

2.3、docker1.12.3

在/lib/systemd/system/docker.service中修改ExecStart=/usr/bin/dockerd --insecure-registry=10.211.55.4:5000

  • systemctl daemon-reload
  • systemctl restart docker
  • ps -ef | grep dockerd  看看docker进程的options设置成功没有

3、生产机

如果需要从registry拉取pull镜像,也需要像上边那样设置,之后才可以拉取。

六、gitlab

七、jenkins

1、"系统管理"->"系统设置"(已经设置过了):第四十一章 jenkins + gitlab + webhooks + publish-over-ssh(1)

2、项目配置:

2.1、general

项目名称:myservice1-docker(其实就是项目的artifactid)

2.2、源码管理

2.3、构建触发器

2.4、Build

  • package:打成jar包
  • docker:build:打成镜像
  • docker:push:将镜像推到私服

八、本地开发代码

1、pom.xml

 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

     <modelVersion>4.0.0</modelVersion>

     <groupId>com.xxx</groupId>
     <artifactId>myservice1-docker</artifactId>
     <version>1.0-SNAPSHOT</version>

     <properties>
         <java.version>1.8</java.version><!-- 官方推荐 -->
         <docker.registry>10.211.55.4:5000</docker.registry>
         <push.image>true</push.image>
     </properties>

     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
         <version>1.3.5.RELEASE</version>
     </parent>

     <!-- 引入实际依赖 -->
     <dependencies>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-actuator</artifactId>
         </dependency>
     </dependencies>

     <build>
         <plugins>
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
             </plugin>
             <plugin>
                 <groupId>com.spotify</groupId>
                 <artifactId>docker-maven-plugin</artifactId>
                 <version>0.4.13</version>
                 <configuration>
                     <imageName>${docker.registry}/${project.groupId}/${project.artifactId}:${project.version}</imageName>
                     <dockerDirectory>${basedir}/src/main/docker</dockerDirectory>
                     <pushImage>${push.image}</pushImage>
                     <resources>
                         <resource>
                             <!-- ${project.build.directory},项目构建输出目录,默认为target/ -->
                             <directory>${project.build.directory}</directory>
                             <!-- ${project.build.finalName},打包出来的jar名称,默认为${project.artifactId}-${project.version} -->
                             <include>${project.build.finalName}.jar</include>
                         </resource>
                     </resources>
                 </configuration>
             </plugin>
         </plugins>
     </build>
 </project>

说明:第三十八章 springboot+docker(maven)

2、Dockerfile

 FROM 10.211.55.4:5000/zhaojigang/jdk8:c7_j8

 ADD myservice1-docker-1.0-SNAPSHOT.jar app.jar

 ENV JAVA_HOME /opt/jdk
 ENV PATH $PATH:$JAVA_HOME/bin

 CMD ["java","-jar","app.jar"]

说明:基础镜像是本地开发好的一个镜像,需要之后推到远程registry:docker push 10.211.55.4:5000/zhaojigang/jdk8:c7_j8

注意:实际上

 FROM 10.211.55.4:5000/zhaojigang/jdk8:c7_j8
 ADD myservice1-docker-1.0-SNAPSHOT.jar app.jar

不应该硬编码,应该写作

 FROM @docker.registry@/zhaojigang/jdk8:c7_j8
 ADD @project.build.finalName@.jar app.jar

但是暂时没成功!!!

3、HelloDockerController.java

 package com.xxx.docker.myservice1.web;

 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;

 @RestController
 @RequestMapping("/docker")
 public class HelloDockerController {
     @RequestMapping("/hello")
     public String helloDocker(){
         return "hello docker12!!!";
     }
 }

九、git提交代码

  • git add --all
  • git commit -m"xxx"
  • git push origin HEAD:dev

之后,查看jenkins编译console,可以看到,会先打镜像,最后将镜像push到远程的registry中,供将来的机器去pull。

十、从开发机或者生产机pull镜像并且运行测试

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { }
span.s2 { color: #c33720 }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { color: #c33720 }
span.s2 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { color: #c33720 }
span.s2 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco }

第四十三章 微服务CICD(5)- gitlab + jenkins + docker + dockerregsitry的更多相关文章

  1. 第四十四章 微服务CICD(6)- gitlab + jenkins + docker + k8s

    总体流程: 在开发机开发代码后提交到gitlab 之后通过webhook插件触发jenkins进行构建,jenkins将代码打成docker镜像,push到docker-registry 之后将在k8 ...

  2. 第四十二章 微服务CICD(4)- jenkins + gitlab + webhooks + publish-over-ssh(2)

    上一节完成了"当git客户端push代码到gitlab后,jenkins会立即去gitlab拉取代码并构建". 目的:本节完成jenkins自动构建之后,自动的将jar包部署到应用 ...

  3. 第三十九章 微服务CICD(1)- gitlab搭建与使用(docker版)

    一.下载docker镜像 前提:docker引擎已经安装好. docker pull gitlab/gitlab-ce gitlab是8.13.1版本. 二.启动应用 docker run -d -h ...

  4. 第四十一章 微服务CICD(3)- jenkins + gitlab + webhooks + publish-over-ssh(1)

    一.作用 使用webhooks来实现当git客户端push代码到gitlab后,jenkins会立即去gitlab拉取代码并构建. 二.步骤 1.安装插件 ruby_runtime(Hook插件依赖于 ...

  5. Gradle 1.12用户指南翻译——第四十三章. 构建公告插件

    本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  6. JHipster生成微服务架构的应用栈(四)- 网关微服务示例

    本系列文章演示如何用JHipster生成一个微服务架构风格的应用栈. 环境需求:安装好JHipster开发环境的CentOS 7.4(参考这里) 应用栈名称:appstack 认证微服务: uaa 业 ...

  7. “全栈2019”Java第四十三章:封装

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. 庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群

    庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群 一.简介      前面的两篇文章,我们已经介绍了Net Core项目基于Docker容器部署在Linux服 ...

  9. Taurus.MVC 微服务框架 入门开发教程:项目部署:4、微服务应用程序发布到Docker部署(上)。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...

随机推荐

  1. Struts2:国际化

    链接:[Java:国际化] src下有国际化资源文件:lan.propertieslan_zh_CN.properties 中文系统系统默认使用zh_CN文件,没有的话使用基本文件lan.proper ...

  2. [ json editor] 如何在网页中使用Json editor 插件

    [目的] 在自己的网页上交由用户进行json的可视化编辑 [难点]1.json中含有递归嵌套的数组和对象 2.json中的基本值类型有数字.字符串和布尔型 [方法]使用daviddurman的Flex ...

  3. URL Regex expression

    转载: http://blog.csdn.net/weasleyqi/article/details/7912647 首先,正则表达式: String check = @"((http|ft ...

  4. 如何用Visual Studio 2013 (vs2013)编写C语言程序 (转)

    http://blog.sina.com.cn/s/blog_964ee6730101jvvi.html

  5. Jmeter组件6. SOAP/XML-RPC Request

    Jmeter测试SOAP的web services现在有两种方式 第一是使用SOAP/XML-RPC Request组件,第二使用HTTP Request组件 Send SOAPACtion, 同ht ...

  6. Delphi 用文件流读取文本文件字符串的方法

    procedure TForm23.Button4Click(Sender: TObject); var pstr:Pchar; mestr,Str1:string; FS:TFilestream; ...

  7. 三维场景中使用BillBoard技术

    三维场景中对于渲染效果不是很精致的物体可以使用BillBoard技术实现,使用该技术需要将物体实时朝向摄像机,即计算billboard的旋转矩阵M. 首先根据摄像机位置cameraPos和billBo ...

  8. Mbps、Kbps、bps、MB、KB

    1:运营商带宽衡量单位: Mbps:百万位每秒 kbps:千位每秒 bps:位每秒 b:bit,比特 1Mbps=1000kbps=1,000,000bps 这些单位通常用来表示每秒传输的二进制位 2 ...

  9. 自己用C语言写dsPIC / PIC24 serial bootloader

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). HyperBootlo ...

  10. Processing与Java混编初探

    Processing其实是由Java开发出的轻量级JAVA开发语言,主要用于做原型,有setup.draw两个主接口和几个消息相应接口 Processing和Java混编很简单...在Java中引入外 ...