一、总体流程

部署:

  • 开发机(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. OPNET下 op_pk_copy()的时间问题

    op_pk_copy()是生成新的数据包,包的op_pk_create_time_get()是新数据包的生成时间,统计数据包的端到端时延,以及服务时延需要注意:

  2. 缩略信息是: sending message to a Handler on a dead thread 我是用IntentService时报的

    稍微纤细一点儿的信息是: Handler (android.os.Handler) {215ddea8} sending message to a Handler on a dead thread. ...

  3. 加载AssetBundle方法

    先介绍一种常用的加载AssetBundle方法 using UnityEngine; using System.Collections; using System.IO; public class L ...

  4. delphi中break,continue, exit,abort, halt, runerror的异同

    delphi中表示跳出的有break,continue, exit,abort, halt, runerror. 1.break 强制退出循环(只能放在循环中),用于从For语句,while语句或re ...

  5. mat工具MemoryAnalyzer进行分析java内存溢出hprof文件

    java服务端程序报错后会生成hprof文件,我们可以通过mat工具MemoryAnalyzer进行分析 下载地址: http://www.eclipse.org/mat/downloads.php ...

  6. Managing IIS Log File Storage

    Managing IIS Log File Storage   You can manage the amount of server disk space that Internet Informa ...

  7. xargs的原理剖析及用法详解

    转载请注明出处:http://www.cnblogs.com/f-ck-need-u/p/5925923.html 学习这个xargs花了很长时间,在网上翻了很久也查了很多书关于xargs的介绍,都只 ...

  8. C++拼接字符串

    例如: 在"/data/misc/media/out.yuv"后面添加序号操作,并输出在path char path[128] = {0}; int Num=this->mN ...

  9. Bitmap简单操作笔记

    using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; ...

  10. php+mysql

    本文整理一下使用php和mysql向前端推送数据的过程. 数据库部分: 1.首先安装服务器,我选择xampp,安装可以选择任意地址.安装完成,打开xampp-control.exe . 选择开启Apa ...