一、总体流程

部署:

  • 开发机(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. apache httpd.conf 参数详解

    由于网站需要,需要配置多个虚拟主机,但是apache主机的参数太多,记不住,下面做一下总结 归纳: ServerRoot:apache安装位置 Listen:服务器监听的端口号 LoadModule: ...

  2. Bootstrap文件上传插件File Input的使用

    基于Metronic的Bootstrap开发框架经验总结(5)--Bootstrap文件上传插件File Input的使用 Bootstrap文件上传插件File Input是一个不错的文件上传控件, ...

  3. 64位系统如何导入excel

    1.运行C:\Windows\SysWOW64\odbcad32.exe,打开后如下图所示: 2.点击添加,选择如下图所示Microsoft Excel Driver(*.xls) 3.点击完成,在弹 ...

  4. redis集群同步迁移方法(二):通过redis-migrate-tool实现

    前篇介绍的redis replication方法,操作步骤多,而且容易出错.在git上看到一些开源工具也能实现同步迁移功能,而且步骤简单,比如redis-port,redis-migrate-tool ...

  5. 初学Python之异步多线程:sockserver

    异步多线程:服务端 import socketserver class MyServer(socketserver.BaseRequestHandler): def setup(self): pass ...

  6. 为 Linux 应用程序编写 DLL[转]

    自:http://www.ibm.com/developerworks/cn/linux/sdk/dll/index.html 在仅仅只会编写插件的时候为什么要编写整个应用程序? 插件和 DLL 通常 ...

  7. VideoToolbox硬件编解码H.264视频流错误码

    如果你不能找到在VTD中的错误代码我决定只包括他们在这里. (同样,所有这些错误,并更可以在里面VideoToolbox在Project Navigator中找到.本身).  您将获得无论是在VTD中 ...

  8. jquery实现旋转木马的插件slick

    旋转木马的是一般网站上都会有的图片轮播效果, html: <section id="features" class="blue" style=" ...

  9. python环境

    官网:https://www.python.org windows环境:http://www.cnblogs.com/windinsky/archive/2012/09/20/2695520.html ...

  10. Xcode 7.2.1 下载地址

    Xcode 7 下载地址(需要登录苹果开发者帐号) 7.2.1:https://developer.apple.com/services-account/download?path=/Develope ...