使用Docker构建持续集成与自动部署的Docker集群

GitLab CI/CD 自动化构建与发布实践 流程介绍 CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。CI/CD 的核心概念是持续集成、持续交付和持续部署。这篇文章中,我将会介绍基于 GitLab CI/CD 的自动化构建与发布实践。如下图所示,整个流程将分为几个部分: 1.首先开发人员在本地完成项目的开发之后,将代码推送到 Gitlab 仓库中。 2.当代码提交到 Gitlab 仓库时,会触发 Pipeline,Gitlab Runner 会根据 .gitlab-ci.yml 配置文件运行 Pipeline 中各阶段的任 阅读详情

为什么使用Docker

“

从我个人使用的角度讲的话  部署来的更方便 

只要构建过一次环境 推送到镜像仓库 迁移起来也是分分钟的事情 

虚拟化让集群的管理和控制部署都更方便

hub.docker.com 里面的镜像也很方便 节约了很多自己生成镜像的时间

相当于提高了复用率

”

  

安装Docker

“

 我这里使用 Ubuntu 14.04 系统上安装 

?
1
curl -s https: //get .docker.io /ubuntu/  |  sudo  sh

Ubuntu 其他版本可能需要先升级一下内核 

详细可参考 这里


”

构建持续集成环境(Java)

       下来开始我们今天的主题 构建持续集成与自动部署的Docker集群 

“

持续集成的目的

 让我们每次更新了代码提交到git仓库后就自动运行测试构建新版本 自动部署到测试或集群 从来提高生产效率 告别重复的劳动

”

持续集成和部署的原理

“

我们用到的所有基础设施我们都将使用Docker 部署

1. 推送到git 仓库   

2. jenkine pull git代码  运行 编译镜像 进行编译  

3. 打包生成的代码 生成一个新版本的镜像 推送到仓库  删除当前容器  重新运行新版本镜像   

4. 监控系统 

5  docker   log 集中管理  LEK


本文使用的是Java的构建方式 除了第三步以外 其他工程也都是一样的

”


  •  构建Gitlab

  

“

  Gitlab作为代码仓库是我们环节的第一步 (如果使用github 或osc git 可以跳过这个步骤)

 为了方便构建我们先安装一下docker编配工具 Docker-compose 

?
1
2
3
#使用python 包管理工具pip安装 
apt-get  install  python-pip python-dev
pip  install  -U docker-compose

 一般构建依赖关系比较复杂的容器都可以用docker-compose来配置

使用说明可以看一下 这里

我们使用hub.docker.com 的  sameersbn/gitlab 镜像来快速构建 

 docker-compose.yml 文件如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
  gitlab:
     image: sameersbn /gitlab
     ports:
       -  "22:22"
       -  "80:80"
     links: 
       - gitlab-redis:redisio
       - gitlab-postgresql:postgresql
     environment:
       - GITLAB_PORT=80 
       - GITLAB_SSH_PORT=22
       - GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string
     restart: always
 
  gitlab-redis:
     image: sameersbn /redis
     restart: always
 
  gitlab-postgresql:
     image: sameersbn /postgresql :9.4-12
     environment:
         - DB_NAME=gitlabhq_production
         - DB_USER=gitlab
         - DB_PASS=password
     restart: always
?
1
2
#执行如下命令 就可以构建gitlab了 
docker-compose up -d

运行 docker ps 查看一下 可以看到已经启动成功了  


访问一下启动主机的 你映射的端口即可访问 我这里是80

”
  • 构建Docker私有仓库

“

同样我们还需要一个Docker仓库来存放我们发布的镜像版本(使用公有仓库如 docker hub 可以跳过此步骤)

我们采用 官方镜像 registry 运行

运行如下命令即可

?
1
2
docker run -d  --restart=always --name registry \
  - v   /mnt/docker/registry : /tmp/registry   -p 5000:5000 registry

运行docker ps 即可查看 运行情况

相应命令

?
1
2
docker pull   仓库ip:仓库端口/项目名     拉取镜像
docker push    仓库ip:仓库端口/项目名    推送镜像

问题 

docker私有仓库 拉取/推送 失败 提示不能使用http 连接   

  •   方法1 设置仓库https 证书即可  推荐 详情可见

  •   方法2 在docker启动参数里面添加 –-insecure-registry  0.0.0.0/0   然后重启docker 

”
  • 构建Jenkins

“

我们使用jenkins 来持续集成 

构建同样十分简单 我们使用的是 hub.docker.com 的  jayqqaa12/jenkins 镜像

执行命令

?
1
2
3
docker run  docker run  -d  -p 8080:8080 \
--name jenkins  --restart=always - v  /mnt/jenkins_home : /var/jenkins_home  \
- v  /var/run/docker .sock: /var/run/docker .sock   jayqqaa12 /jenkins

参数说明:  

?
1
2
  - v  /mnt/jenkins_home : /var/jenkins_home 
   # 映射到本地磁盘
?
1
2
- v  /var/run/docker .sock: /var/run/docker .sock  
#映射主机的docker到容器里面 这样在容器里面就可以使用主机安装的 docker 了

然后访问8080 端口就可以了

默认用户密码 admin admin 

”
  • Docker-Swarm 集群

“

  我们使用Docker-Swarm 来部署 docker 集群  

  部署同样十分简单

?
1
2
3
4
5
6
7
8
9
10
#运行这个这个命令后会返回一个token来替换下面命令的<token>
  docker run -- rm  swarm create 
  
  # 运行节点 管理集群swarm  来管理所有节点 
  docker run -d --name swarm-manage --restart=always -p \
  2376:2375 swarm manage token: // <token>
  
  #在节点服务器上运行 添加节点到 集群中  
  docker run -d --restart=always --name swarm-agent swarm \
  join  --addr=当前服务器的ip:2375 token: // <token>
?
1
2
3
#查看集群的节点信息 
 
docker -H 管理节点的ip:2376 info

如图可见 当前集群有一个节点 


在集群运行容器 

 同理只要在  添加 -H 管理节点的ip:2376 就可以在集群上运行容器了 

?
1
2
docker -H 管理节点的ip:2376 run  xxx    #运行容器
docker -H 管理节点的ip:2376  ps   xxx     #查看集群容器运行情况


”


  • Hello World 

“

 基础的设施我们已经搭建好了 下面我们就可以开始测试一下

1)这里我新建了一个javaEE maven 项目 很简单写了一个 index.html 


2)在 gitlab新建一个docker-hello-world 项目仓库


3) 编写打包镜像的Dockerfile     和部署到集群的 脚本 (放在当前项目里面就可以了)

Dockerfile  

  很简单的步骤 把编译好的war 放入镜像就可以了 

这里使用的是 官方 tomcat 镜像

?
1
2
3
FROM tomcat:8-jre8
RUN  rm  -rf  /usr/local/tomcat/webapps
ADD . /target/ROOT .war  /usr/local/tomcat/webapps/ROOT .war

build.sh  部署使用的脚本

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/bash
 
#build in jenkins 
 
# 你的docker 仓库的地址 
REG_URL=XXX
 
#你的swarm manage 节点的地址
SWARM_MANAGE_URL=xx:2376
 
#根据时间生成版本号
TAG=$REG_URL/$JOB_NAME:` date  +%y%m%d-%H-%M`
 
#使用maven 镜像进行编译 打包出 war 文件 (其他语言这里换成其他编译镜像)
docker run -- rm  --name mvn  - v  /mnt/maven : /root/ .m2   \
  - v  /mnt/jenkins_home/workspace/ $JOB_NAME: /usr/src/mvn  -w  /usr/src/mvn/ \
  maven:3.3.3-jdk-8 mvn clean  install  -Dmaven. test .skip= true
  
#使用我们刚才写好的 放在项目下面的Dockerfile 文件打包 
docker build -t  $TAG  $WORKSPACE/.
docker push   $TAG
docker rmi $TAG
 
 
# 如果有以前运行的版本就删了 
if  docker -H $SWARM_MANAGE_URL  ps  -a|  grep  -i $JOB_NAME;  then
         docker -H $SWARM_MANAGE_URL  rm  -f  $JOB_NAME
fi
 
#运行到集群
docker -H $SWARM_MANAGE_URL run  -d  -p 80:8080  --name $JOB_NAME  $TAG

 

4)在jenkins 上新建一个docker-hello-world 项目  

选择自由风格即可



设置一下git仓库地址



设置一下触发器 为了方便起见这里设置 每分钟拉取一下  也可以设置一下  gitlab hook 

同时设置一下 构建要执行的脚本 就执行我们刚才写好的脚本即可



5) 那么开始 推送到我们的仓库 

 然后查看jenkins console 就可以看到执行的过程了 已经看到 已经执行成功了 

 

访问一下 已经部署到集群了  (关于集群的负载均衡 部署这里就不讲了)

 


6)更新版本

 修改一下index.html 然后 再次推送 


等待2~3分钟后我们就可以看到已经重新部署成功了 就是怎么简单 




问题1  为什么要把war包打包进容器 而不是挂载新的war包 

解答:docker的理念是一个整体 一个整体的运行环境而不是单纯的war包 更适合整体迁移 


问题2:这样镜像不会很大么 下载会不会很不方便

解答:因为docker的镜像是多层依赖的所以 除了第一次下载慢一点以后都会复用之前相同的层 

          所以下载的是不同的 部分 在本实例中只是war包的部分


”


  • Docker管理监控系统

“

如何管理容器 查看容器运行情况 日志等都不太方便 我们需要搭建一个监控平台

这里我们采用csphere 的docker管理平台、

 在管理节点 执行以下命令就可以安装了 管理程序

?
1
2
curl -SsL -o  /tmp/csphere-install .sh https: //csphere .cn /static/csphere-install-v2 .sh
sudo  env  ROLE=controller CSPHERE_VERSION=1.0.1  /bin/sh  /tmp/csphere-install .sh

在集群的节点安装Agent

访问controller A主机的1016端口 点击左侧的“主机”菜单,进入主机列表页面,

点击添加主机并复制脚本,在Agent主机安装Agent程序  

然后就可以查看和管理 docker容器了   具体查看文档这里就不多提了

使用jenkins、docker、consul、nginx搭建支持自动化构建部署以及弹性伸缩的集群系统详细教程 一、前言这是我第一篇博文,中间可能存在许多纰漏,所以请大家不吝指教!另外在文中API及原理性的东西仅做简单提及,因为网上有很多,讲的很详细,我尽量将篇幅放在记录过程上,如有疑惑,欢迎评论。1.1 搭建思路 使用jenkins+maven做自动化部署及构建工具,采用参数化构建或自动构建方式,减少集成工作量。 在docker容器中装载应用后直接利用docker 的swarm mode 集群模式来搭建一个 阅读详情

相关推荐

python django部署docker_Docker+Jenkins+Gitlab+Django应用部署实践

一、背景介绍在互联网应用快速更新迭代的大背景下,传统的人工手动或简单脚本已经不能适应此变化,此时Devops为我们提供了良好的解决方案,应用好CI/CD可以大大的方便我们的日常工作,自动化快速的持续集成/持续交付为我们带来了应用开放的更快速度、更好的稳定性和更强的可靠性。二、拓扑环境2.1 架构拓扑如上图实例,简单花了下流程拓扑:当研发push本地代码到gitlab-server后,webhook...

weixin_39564807的博客 707

docker- compose 部署 RabbitMQ_docker-compose rabbitmq

查看15672端口是否开放(如果没有连带5673一起开启)比如 http://127.0.0.1:15672。如果上面没有配置密码默认 账号密码都为guest。确认容器是否运行,如果没有换一个镜像。docker ps 检查容器是否启动。进入容器内 xxx容器名称/id。启动管理插件 在容器内运行!参看ip地址是否正确。

2401_84159966的博客 1457

Docker部署Kubernetes容器化应用详解:从镜像构建到集群部署

本文详细介绍了在Linux环境下通过Docker与Kubernetes(K8s)构建容器化应用的完整流程。主要内容包括:环境准备(系统配置、Docker和K8s组件安装)、集群搭建(单节点/多节点部署)、镜像构建(Dockerfile编写与安全扫描)、应用部署(Deployment/Service/Ingress配置)以及生产级优化方案(资源调度、HPA、监控等)。提供了从开发到生产的全链路实践指南,包含可执行的代码示例和关键配置要点,帮助读者快速实现容器化应用的高效管理与弹性扩展。

weixin_42593797的博客 2435

Docker搭建持续集成平台Jenkins最简教程

持续集成(Continuous Integration,CI)是软件开发中的一种实践,它旨在通过频繁地集成代码变更并自动运行测试,以确保代码的质量和稳定性。Jenkins 是一个广泛使用的开源持续集成工具,它能够自动化构建、测试和部署软件项目。在本文中,我们将使用 Docker 搭建一个基于 Jenkins 的持续集成平台。本文主要介绍了使用docker搭建持续集成平台Jenkins的步骤,Jenkins是最常用的持续集成平台,对于我们测试开发的工作有很大的帮助,希望本文能够帮到大家!

霍格沃兹测试学院的博客 1111

基于gitlab+docker+k8s打造自动化构建部署流程

工程自动化构建部署 前言 ​ 随着需求越来越多,以及相关代码分支权限的流程规范化,团队内部的项目上线部署复杂度提升,基于现有的环境和市场上主流的软件,打造了一套基于gitlab+docker+harbor+kubernetes的自动化构建部署流程(CI/CD),目前团队内部流程基本走通,整理了一份相关文档分享出来。写的糙的地方,轻喷。 概念 GitLab CI/CD ​ GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。与之对应的有GitHub和

Steven的专栏 3万+

手把手教你用EG2153搭建开关电源:SOP-8封装驱动芯片的5个设计技巧

本文详细介绍了使用EG2153自振荡半桥驱动芯片搭建开关电源的五个核心设计技巧。内容涵盖从深入理解芯片工作机制、频率编程计算误区、SOP-8封装的热管理方案,到死区时间评估与外部保护电路设计,以及实战调试与故障排查指南,旨在帮助工程师实现稳定可靠的小功率电源设计。

weixin_29200485的博客 380

docker部署es集群

凭证的生成和插件安装无关联,可以理解就是个类似ssl证书的东西,有了这个东西后面才能配置searchGuard证书位置。注意:所有节点都配置好后,重启哈es节点,然后再执行。如果容器内提示没java环境,可以直接用es自带的jdk,配置下环境变量就可以了。es对应的searchGuard版本:search-guard-suite-plugin-7.8.0-43.2.0。版本:search-guard-tlstool-1.9.1。正常操作,可以用linux生成,也可以本地生成。es的版本:7.8.0。

poorzhu的博客 229

BRep实战指南:从理论到文件格式的全面解析

本文全面解析BRep(边界表示法)从基础概念到文件格式的实战应用。详细介绍了BRep的数学定义、工业应用场景,以及STEP、IGES等主流文件格式的对比与使用技巧,帮助读者掌握三维建模核心技术并优化性能。

weixin_29235923的博客 410

Docker 进阶,Docker 集群部署

Dcoker 集群部署

weixin_56301040的博客 4609

mysql笔记:23. 在Mac上安装与卸载MySQL

MySQL对Mac电脑的适配十分强大,再加上Mac本身就是Unix操作系统演化而来的,所以在Mac上安装MySQL的方式有多种。常见的方法有如下三种:DMG、brew、TAR。介绍这些方法前,我们先了解下MySQL安装文件的下载。

斌斌(Java) 2250

一文带你完成ARMv8架构中的cache知识点

【摘要】 在最初开发ARM架构时,处理器的时钟速度和内存的访问速度大致相同。今天的处理器内核要复杂得多,其时钟速度可以快上几个数量级。但是,外部总线和内存设备的频率并没有扩大到同样的程度。有可能实现小块的片上SRAM,它可以以与内核相同的速度运行,但是与标准的DRAM块相比,这种RAM非常昂贵,因为后者的容量可以达到数千倍。在许多基于ARM处理器的系统中,访问外部存储器需要几十甚至几百个内核周期。 cache的技术背景 在最初开发ARM架构时,处理器的时钟速度和内存的访问速度大致相同。今天的处.

ABCCloud的博客 1854

SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署

整体可分为以下几个步骤: 1,创建springboot项目 2,搭建docker私服库 3,build镜像并上传到私服库 4,搭建docker swarm集群 5,搭建jenkins并构建部署 演示系统使用centos7,jdk1.8 1,创建Springboot项目: 在eclipse上新建maven项目,在pom.xml中引入相应的包,如下所示: <projectxmlns="http:/...

lgxzzz的博客 886

YF-S401水流量传感器在STM32上的精准计量实现

本文详细介绍了YF-S401水流量传感器与STM32微控制器的集成应用,实现精准水流计量。通过外部中断和外部时钟两种脉冲计数方案,结合硬件配置、软件滤波和校准技巧,确保高精度流量测量。适用于智能家居和工业自动化中的水控系统,提升系统稳定性和测量准确性。

rainy的博客 897

解密m3u8视频合并:从猫抓插件到本地文件修改全流程

本文详细解析了m3u8视频合并的全流程,特别针对加密视频片段提供了解决方案。从使用猫抓插件捕获m3u8文件地址,到利用N_m3u8DL-CLI工具自动下载、解密并合并ts片段,手把手教你处理AES-128加密等常见问题,最终生成完整的本地MP4文件,适合需要备份或处理流媒体资源的用户。

weixin_29290947的博客 1363

保姆级教程:DBeaver社区版安装与驱动配置(附阿里云镜像解决下载超时)

本文提供DBeaver社区版的保姆级安装教程,涵盖版本选择、安装路径设置到驱动配置优化。特别针对国内用户遇到的下载超时问题,详细介绍了如何配置阿里云镜像加速驱动下载,确保高效连接MySQL等主流数据库。

weixin_30430169的博客 480

【SpringBoot自动化部署】

配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub Webhook)。在构建步骤中添加Maven或Gradle构建命令。在Post-build Actions中配置部署脚本,例如将生成的JAR包通过SSH传输到目标服务器并启动。将SpringBoot应用打包为Docker镜像,可以简化环境配置和部署流程。Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。Ansible可以实现服务器配置的标准化和批量部署。

lyh1344的博客 877

Zookeeper+Hadoop+Spark+Flink+Kafka+Hbase+Hive 完全分布式高可用集群搭建(保姆级超详细含图文) 附安装包网盘下载

Hadoop+Spark+Flink+Zookeeper+Kafka+Hbase+Hive完全分布式高可用集群搭建 Hadoop高可用集群搭建 Spark高可用集群搭建 Flink高可用集群搭建 Zookeeper高可用集群搭建 Kafka高可用集群搭建 Hbase高可用集群搭建 Hive高可用集群搭建 mysql搭建 jdk部署 大数据集群环境搭建

Mr.L-OAM的博客 2万+

正式环境docker部署hyperf_从零进阶--构建docker-swarm结合Gitlab-runner持续集成实现hyperf 部署...

构建docker-swarm结合Gitlab-runner持续集成实现hyperf部署最近发现有用到hyperf,应需求,便按照官网的,弄一下Gitlab-runner持续集成部署,详细可见官方文档:Hyperf简介:Docker-swarm:Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种...

weixin_36024234的博客 991

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Kubernetes和Jenkins——基于Kubernetes构建Jenkins持续集成平台

基于Kubernetes/K8S构建Jenkins持续集成平台Jenkins的Master-Slave分布式构建 Jenkins的Master-Slave分布式构建 什么是Master-Slave分布式构建 Jenkins的Master-Slave分布式构建,就是通过将构建过程分配到从属Slave节点上,从而减轻Master节点的压力,而且可以同时构建多个,类似负载均衡的概念。 ...

Cantevenl的博客 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

微服务与Docker

微服务与Docker 了解一下微服务运行所需要的容器技术,以及打造在实际生产环境中如何自动构建发布管道 11.1 Docker简介 被认为是有可能改变软件行业系统交付流程现状的最佳工具 世界领先的软件容器虚拟化平台 Linux容器(Linux Containers, LXC),它不像虚拟机那样模拟运行一个完整的操作系统,而是对进程进行隔离。或者说,Linux容器就像是一个箱子,里面放了一系列的进程,从而将这些进程与操作系统进行隔离。正因为容器是进程级别的,所以相比虚拟机有很多的优势;如 容器启动相当于启动本

青葱暖咖啡 841

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: 打包mysql、tomcat、jdk为一个软件
下一篇: 缓存与数据库一致性保证
杜引强
博客等级 码龄13年 806粉丝 68原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值