• Docker+Jenkins+Harbor+Rancher持续集成部署分布式项目


    目录

    一、Docker篇

    1、Docker 概述

    2、Docker 平台

    3、我可以使用 Docker 做什么?

    3.1、快速、一致地交付应用程序

    3.2、响应式部署和扩展

    3.3、在相同硬件上运行更多工作负载

    4、Docker 架构

    ​编辑

    4.1、Docker 守护进程

    4.2、Docker 客户端

    4.3、Docker 桌面

    4.4、Docker 注册表

    4.5、 Docker 对象

    5、底层技术

    6、Docker安装

    6.1、安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

    6.2、设置yum源(选择其中一个)

    6.3、可以查看仓库中所有docker版本,并选择特定版本安装

    6.4、安装Docker

    6.5、启动Docker

    6.6、安装阿里云镜像加速器

    二、Jenkins篇

    1、特点

    2、docker search jenkins查询镜像

    2.1、正常查询结果

    2.2、可能异常情况,这个异常解决方法为下面第3点

    3、上面报这个ERROR解决方法

    3.1、更新时间同步即可:ntpdate cn.pool.ntp.org3.2、如果提示不存在 ntpdate 命令需要先安装该命令:yum install ntpdate3.3、date中国时间

    4、docker pull jenkinsci/blueocean拉取Jenkins镜像

    5、docker images 查看本地镜像

    6、CentOS7安装JDK安装

    6.1、可以下载linux版本tar.gz压缩包到本地不用解压

    6.2、cd /usr, mkdir java进入usr创建java文件夹

    6.3、cd java进入java文件夹,用rz将linux版的jdk压缩包上传到这里

    6.4、(将JDK移到java,mv jdk-8u301-linux-x64.tar.gz /usr/java)移动文件命令

    6.5、tar -zxvf  jdk-8u301-linux-x64.tar.gz,解压会有jdk1.8.0_301出现

    6.6、vi /etc/profile配置linux系统JDK环境变量1)配置内容

    6.7、source /etc/profile使配置生效6.8、sudo yum install glibc.i686,可能报错解决方案、否则会会报找不到6.9、java -version测试,出现如下即为成功

    7、CentOS7安装Maven

    7.1、cd /usr/local

    7.2、rz上传,tar -zxvf apache-maven-3.6.1-bin.tar.gz解压

    7.3、vi /etc/profile

    7.4、source /etc/profile刷新环境变量

    7.5、mvn -v查看版本

    8、启动容器,并挂载上面配置的环境

    9、docker ps查看运行容器

    10、访问Jenkins,提示输入密码,进入容器查看密码

    11、初次可以选择推荐的

    12、等待安装

    13、如下访问Jenkins成功啦

    三、Harbor篇

    1、Harbor安装

    1.1、cd /opt进入目录下载Harbor

    1.2、解压

    1.3、修改配置

    1.4、

    1.5、访问http://192.168.88.129:8000/

    2、Jenkins推送镜像至Harbor

    2.1、登录Harbor,创建项目仓库

    2.2、Jenkins配置推送

    2.3、推送遇到如下问题

    这个过程可能需要多次重启,才有效果可能跟电脑配置内存有关

    2.4、再次构建成功

    四、Rancher篇

    1、Rancher

    1.1、基础设施编排

    1.2、容器编排与调度

    1.3、应用商店

    1.4、企业级权限管理

    2、Rancher安装

    2.1、docker search rancher查找镜像

    2.2、创建并启动容器

    2.3、查看运行容器

    2.4、http://192.168.88.129:18001/访问Rancher


    一、Docker篇

    1、Docker 概述

    Docker 是一个用于开发、发布和运行应用程序的开放平台。Docker 能够将应用程序与基础架构分离,以便可以快速交付软件。使用 Docker,可以像管理应用程序一样管理基础设施。通过利用 Docker 快速交付、测试和部署代码的方法,可以显着减少编写代码和在生产环境中运行之间的延迟。

    2、Docker 平台

    Docker 提供了在称为容器的松散隔离环境中打包和运行应用程序的能力。隔离和安全性允许在给定主机上同时运行多个容器。容器是轻量级的,包含运行应用程序所需的一切,因此无需依赖主机上当前安装的内容。可以在工作时轻松共享容器,并确保与共享的每个人都获得以相同方式工作的同一个容器。

    Docker 提供工具和平台来管理容器的生命周期:

    • 使用容器开发您的应用程序及其支持组件。
    • 容器成为分发和测试应用程序的单元。
    • 准备就绪后,将应用程序部署到生产环境中,作为容器或编排的服务。无论您的生产环境是本地数据中心、云提供商还是两者的混合,这都是一样的。

    3、我可以使用 Docker 做什么?

    3.1、快速、一致地交付应用程序

    Docker 通过允许开发人员使用提供应用程序和服务的本地容器在标准化环境中工作来简化开发生命周期。容器非常适合持续集成和持续交付 (CI/CD) 工作流程。

    考虑以下示例场景:

    • 开发人员在本地编写代码并使用 Docker 容器与同事分享工作。
    • 使用 Docker 将应用程序推送到测试环境中并执行自动化和手动测试。
    • 当开发者发现bug时,可以在开发环境中修复,重新部署到测试环境中进行测试和验证。
    • 测试完成后,将修复程序提供给客户就像将更新的映像推送到生产环境一样简单。

    3.2、响应式部署和扩展

    Docker 基于容器的平台允许高度可移植的工作负载。Docker 容器可以在开发人员的本地笔记本电脑、数据中心的物理或虚拟机、云提供商或混合环境中运行。

    Docker 的可移植性和轻量级特性还使得动态管理工作负载、根据业务需求近乎实时地扩展或拆除应用程序和服务变得容易。

    3.3、在相同硬件上运行更多工作负载

    Docker 是轻量级和快速的。它为基于管理程序的虚拟机提供了一种可行且经济高效的替代方案,因此可以使用更多计算容量来实现业务目标。Docker 非常适合高密度环境以及需要用更少资源完成更多工作的中小型部署。

    4、Docker 架构

    Docker 使用客户端-服务器架构。Docker客户端与 Docker守护进程对话,后者负责构建、运行和分发 Docker 容器的繁重工作。Docker 客户端和守护程序可以 在同一系统上运行,或者可以将 Docker 客户端连接到远程 Docker 守护程序。Docker 客户端和守护程序使用 REST API,通过 UNIX 套接字或网络接口进行通信。另一个 Docker 客户端是 Docker Compose,它允许使用由一组容器组成的应用程序。

    4.1、Docker 守护进程

    Docker 守护程序 ( dockerd) 侦听 Docker API 请求并管理 Docker 对象,例如图像、容器、网络和卷。守护进程还可以与其他守护进程通信以管理 Docker 服务。

    4.2、Docker 客户端

    Docker 客户端 ( docker) 是许多 Docker 用户与 Docker 交互的主要方式。当使用诸如docker run之类的命令时,客户端会将这些命令发送到dockerd执行它们。该docker命令使用 Docker API。Docker 客户端可以与多个守护进程通信。

    4.3、Docker 桌面

    Docker Desktop 是一个易于安装的应用程序,适用于 Mac 或 Windows 环境,能够构建和共享容器化应用程序和微服务。Docker Desktop 包括 Docker 守护程序 ( dockerd)、Docker 客户端 ( docker)、Docker Compose、Docker Content Trust、Kubernetes 和 Credential Helper。

    4.4、Docker 注册表

    Docker注册表存储 Docker 映像。Docker Hub 是一个任何人都可以使用的公共注册表,并且 Docker 默认配置为在 Docker Hub 上查找图像。甚至可以运行自己的私有注册表。

    当使用docker pull或者docker run命令时,将从配置的注册表中提取所需的图像。当使用该docker push命令时,图像会被推送到配置的注册表中。

    4.5、 Docker 对象

    当使用 Docker 时,正在创建和使用图像、容器、网络、卷、插件和其他对象。本节简要概述了其中一些对象。

    映像

    映像是一个只读模板,其中包含创建 Docker 容器的说明。通常,一个图像基于另一个图像,并带有一些额外的自定义。例如,可以基于该映像构建一个映像ubuntu ,但安装 Apache Web 服务器和应用程序,以及使应用程序运行所需的配置详细信息。

    可以创建自己的图像,也可以只使用其他人创建并在注册表中发布的图像。要构建自己的镜像,需要使用简单的语法创建一个Dockerfile ,用于定义创建和运行镜像所需的步骤。Dockerfile 中的每条指令都会在映像中创建一个层。当更改 Dockerfile 并重建映像时,仅重建那些已更改的层。与其他虚拟化技术相比,这是使映像如此轻量、小巧和快速的部分原因。

    容器

    容器是图像的可运行实例。可以使用 Docker API 或 CLI 创建、启动、停止、移动或删除容器。可以将容器连接到一个或多个网络,将存储附加到它,甚至可以根据其当前状态创建新映像。

    默认情况下,一个容器与其他容器及其主机的隔离相对较好。可以控制容器的网络、存储或其他底层子系统与其他容器或主机的隔离程度。

    容器由其映像以及在创建或启动它时提供给它的任何配置选项定义。当容器被移除时,任何未存储在持久存储中的状态更改都会消失。

    示例docker run命令

    以下命令运行一个ubuntu容器,以交互方式附加到本地命令行会话,然后运行/bin/bash​​.

     docker run -i -t ubuntu /bin/bash


    当运行此命令时,会发生以下情况(假设使用的是默认注册表配置):

    • 如果在本地没有ubuntu映像,Docker 会从配置的注册表中提取它,就像docker pull ubuntu手动运行一样。
    • Docker 会创建一个新容器,就像docker container create 手动运行命令一样。
    • Docker 为容器分配一个读写文件系统,作为它的最后一层。这允许正在运行的容器在其本地文件系统中创建或修改文件和目录。
    • Docker 创建了一个网络接口来将容器连接到默认网络,因为没有指定任何网络选项。这包括为容器分配 IP 地址。默认情况下,容器可以使用主机的网络连接连接到外部网络。
    • Docker 启动容器并执行/bin/bash. 因为容器以交互方式运行并附加到终端(由于-iand-t 标志),所以可以在输出记录到终端时使用键盘提供输入。
    • 当键入exit终止/bin/bash命令时,容器会停止但不会被删除。可以重新启动或删除它。

    5、底层技术

    Docker 是用Go 编程语言编写的,并利用 Linux 内核的几个特性来提供其功能。Docker 使用一种称为容器namespaces的技术来提供隔离的工作空间。当您运行容器时,Docker 会为该容器创建一组 命名空间。

    这些命名空间提供了一层隔离。容器的每个方面都在单独的命名空间中运行,并且它的访问权限仅限于该命名空间。

    6、Docker安装

    6.1、安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

    yum install -y yum-utils device-mapper-persistent-data lvm2

    6.2、设置yum源(选择其中一个)

    1)中央仓库

    yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo

    2)阿里仓库(推荐)

    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

    6.3、可以查看仓库中所有docker版本,并选择特定版本安装

    6.4、安装Docker

    yum install docker-ce-18.06.3.ce(后面不用加东西了)

    6.5、启动Docker

    命令:systemctl start docker,然后加入开机启动,systemctl enable docker

    6.6、安装阿里云镜像加速器

    1)编辑daemon.json:vi /etc/docker/daemon.json

    2)追加:{ "registry-mirrors": ["http://hub-mirror.c.163.com"] }

    3)重启:systemctl restart docker

    4)运行:docker run hello-world,如下图即为成功:

    二、Jenkins篇

    作为领先的开源自动化服务器,Jenkins 提供了数百个插件来支持构建、部署和自动化任何项目。

    1、特点

    • 持续集成和持续交付:作为可扩展的自动化服务器,Jenkins 可以用作简单的 CI 服务器或变成任何项目的持续交付中心。
    • 简易安装:Jenkins 是一个独立的基于 Java 的程序,可以开箱即用,包含适用于 Windows、Linux、macOS 和其他类 Unix 操作系统的软件包。
    • 易于配置:Jenkins 可以通过其 Web 界面轻松设置和配置,其中包括即时错误检查和内置帮助。
    • 插件:凭借更新中心的数百个插件,Jenkins 与持续集成和持续交付工具链中的几乎所有工具集成。
    • 可扩展:Jenkins 可以通过其插件架构进行扩展,为 Jenkins 可以做的事情提供几乎无限的可能性。
    • 分散式:Jenkins 可以轻松地在多台机器上分配工作,帮助更快地跨多个平台推动构建、测试和部署。

    2、docker search jenkins查询镜像

    2.1、正常查询结果

    1. [root@localhost ~]# docker search jenkins
    2. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
    3. jenkins DEPRECATED; use "jenkins/jenkins:lts" instead 5504 [OK]
    4. jenkins/jenkins The leading open source automation server 3087
    5. jenkins/jnlp-slave a Jenkins agent which can connect to Jenkins… 150 [OK]
    6. jenkins/inbound-agent 65
    7. bitnami/jenkins Bitnami Docker Image for Jenkins 53 [OK]
    8. jenkins/slave base image for a Jenkins Agent, which includ… 48 [OK]
    9. jenkins/agent 39
    10. jenkins/ssh-slave A Jenkins slave using SSH to establish conne… 38 [OK]
    11. jenkins/ssh-agent Docker image for Jenkins agents connected ov… 24
    12. jenkins/jnlp-agent-docker 8
    13. jenkins/jnlp-agent-maven A JNLP-based agent with Maven 3 built in 7
    14. jenkins/pct Plugin Compat Tester 5 [OK]
    15. jenkins/jenkins-experimental Experimental images of Jenkins. These images… 3 [OK]
    16. jenkins/jnlp-agent-python A JNLP-based agent with Python built in 3
    17. jenkins/jnlp-agent-alpine 2
    18. jenkins/jnlp-agent-node 1
    19. rancher/jenkins-jenkins 1
    20. jenkins/ath Jenkins Acceptance Test Harness 1 [OK]
    21. jenkins/core-changelog-generator Tool for generating Jenkins core changelogs 1
    22. jenkins/jenkinsfile-runner Jenkinsfile Runner packages 1
    23. jenkins/core-pr-tester Docker image for testing pull-requests sent … 1
    24. jenkins/jnlp-agent-ruby 1
    25. jenkins/remoting-kafka-agent Remoting Kafka Agent 1 [OK]
    26. rancher/jenkins-jnlp-slave 0
    27. rancher/jenkins-slave Jenkins Build Slave 0 [OK]
    28. [root@localhost ~]# ^C
    29. [root@localhost ~]#

    2.2、可能异常情况,这个异常解决方法为下面第3点

    3、上面报这个ERROR解决方法

    3.1、更新时间同步即可:ntpdate cn.pool.ntp.org
    3.2、如果提示不存在 ntpdate 命令需要先安装该命令:yum install ntpdate
    3.3、date中国时间

    4、docker pull jenkinsci/blueocean拉取Jenkins镜像

    5、docker images 查看本地镜像

    6、CentOS7安装JDK安装

    6.1、可以下载linux版本tar.gz压缩包到本地不用解压

    6.2、cd /usr, mkdir java进入usr创建java文件夹

    6.3、cd java进入java文件夹,用rz将linux版的jdk压缩包上传到这里

    6.4、(将JDK移到java,mv jdk-8u301-linux-x64.tar.gz /usr/java)移动文件命令

    6.5、tar -zxvf  jdk-8u301-linux-x64.tar.gz,解压会有jdk1.8.0_301出现

     


    6.6、vi /etc/profile配置linux系统JDK环境变量
    1)配置内容

    1. export JAVA_HOME=/usr/java/jdk1.8.0_301
    2. export JRE_HOME=${JAVA_HOME}/jre


    6.7、source /etc/profile使配置生效
    6.8、sudo yum install glibc.i686,可能报错解决方案、否则会会报找不到
    6.9、java -version测试,出现如下即为成功


    7、CentOS7安装Maven

    7.1、cd /usr/local
    7.2、rz上传,tar -zxvf apache-maven-3.6.1-bin.tar.gz解压


    7.3、vi /etc/profile
    7.4、source /etc/profile刷新环境变量
    7.5、mvn -v查看版本

    1. [root@localhost local]# ls
    2. apache-maven-3.6.3 apache-maven-3.6.3-bin.tar.gz bin etc games include lib lib64 libexec sbin share src
    3. [root@localhost local]# vi /etc/profile
    4. [root@localhost local]# source /etc/profile
    5. [root@localhost local]# mvn -v
    6. Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
    7. Maven home: /usr/local/apache-maven-3.6.3
    8. Java version: 1.8.0_301, vendor: Oracle Corporation, runtime: /usr/java/jdk1.8.0_301/jre
    9. Default locale: en_US, platform encoding: UTF-8
    10. OS name: "linux", version: "3.10.0-1127.el7.x86_64", arch: "amd64", family: "unix"
    11. [root@localhost local]#

    到此JDK、Maven环境准备完成

    8、启动容器,并挂载上面配置的环境

    1. docker run \
    2. -u root \
    3. -d \
    4. --restart=always \
    5. -p 8001:8080 \
    6. -p 50000:50000 \
    7. -v /var/run/docker.sock:/var/run/docker.sock \
    8. -v /var/jenkins_home:/var/jenkins_home \
    9. jenkinsci/blueocean

    9、docker ps查看运行容器

    10、访问Jenkins,提示输入密码,进入容器查看密码

    11、初次可以选择推荐的

    12、等待安装

     

    13、如下访问Jenkins成功啦

    到此就结束Docker安装Jenkins啦! 

    三、Harbor篇

    1、Harbor安装

    1.1、cd /opt进入目录下载Harbor

    1)online

    wget https://github.com/goharbor/harbor/releases/download/v2.4.2/harbor-online-installer-v2.4.2.tgz

    2)offline

    wget https://github.com/goharbor/harbor/releases/download/v2.3.5/harbor-offline-installer-v2.3.5.tgz

    1.2、解压

    tar xvf harbor-offline-installer-v2.3.5.tgz

    1.3、修改配置

    1)、cd /harbor

    编译安装就会多出文件 

    2)、cp harbor.yml.tmpl harbor.yml

    3)、vi harbor.yml

    1.4、

    1)、./prepare

    # 每次修改配置后都先执行此命令

    2)、./install.sh

    # 执行安装脚本

    1.5、访问http://192.168.88.129:8000/

    账号默认admin,密码默认Harbor12345(可以更改配置)

    2、Jenkins推送镜像至Harbor

    2.1、登录Harbor,创建项目仓库

    2.2、Jenkins配置推送

    构建那里 ,ip就是访问Harbor的地址,仓库是自己创建的私有仓库,项目就是构建参数中的${pModule},版本就是构建参数的${version} 

    2.3、推送遇到如下问题

    1)、问题

    2)、解决方案

    原因是docker私有仓库服务器,默认是基于https传输的,需要在客户端做相关设置,不使用https传输
    1)vi /etc/docker/daemon.json
    2)补充“insecure-registries”:[“192.168.88.129:8000”]
    即:
    {
    “registry-mirrors”: [“https://njrds9qc.mirror.aliyuncs.com”],
    “insecure-registries”:[“192.168.88.129:8000”]
    }
    3)重新启动docker:
    systemctl daemon-reload
    systemctl restart docker

    这个过程可能需要多次重启,才有效果可能跟电脑配置内存有关

    2.4、再次构建成功

    1)、Jenkins日志

    2)、Harbor仓库

    1)点击项目,再点击自己创建的仓库test-cloud

    2)test-cloud仓库

     可见推送成功了 

    四、Rancher篇

    1、Rancher

    Rancher是一个开源的企业级容器管理平台。通过Rancher,企业再也不必自己使用一系列的开源软件去从头搭建容器服务平台。Rancher提供了在生产环境中使用的管理DockerKubernetes全栈化容器部署与管理平台。

    Rancher由以下四个部分组成:

    1.1、基础设施编排

    Rancher可以使用任何公有云或者私有云的Linux主机资源。Linux主机可以是虚拟机,也可以是物理机。Rancher仅需要主机有CPU,内存,本地磁盘和网络资源。从Rancher的角度来说,一台云厂商提供的云主机和一台自己的物理机是一样的。

    Rancher为运行容器化的应用实现了一层灵活的基础设施服务。Rancher的基础设施服务包括网络, 存储, 负载均衡, DNS和安全模块。Rancher的基础设施服务也是通过容器部署的,所以同样Rancher的基础设施服务可以运行在任何Linux主机上。

    1.2、容器编排与调度

    很多用户都会选择使用容器编排调度框架来运行容器化应用。Rancher包含了当前全部主流的编排调度引擎,例如​Docker Swarm​, Kubernetes, 和Mesos。同一个用户可以创建Swarm或者Kubernetes集群。并且可以使用原生的Swarm或者Kubernetes工具管理应用。

    除了Swarm,Kubernetes和Mesos之外,Rancher还支持自己的Cattle容器编排调度引擎。Cattle被广泛用于编排Rancher自己的基础设施服务以及用于Swarm集群,Kubernetes集群和Mesos集群的配置,管理与升级。

    1.3、应用商店

    Rancher的用户可以在应用商店里一键部署由多个容器组成的应用。用户可以管理这个部署的应用,并且可以在这个应用有新的可用版本时进行自动化的升级。Rancher提供了一个由Rancher社区维护的应用商店,其中包括了一系列的流行应用。Rancher的用户也可以创建自己的私有应用商店。

    1.4、企业级权限管理

    Rancher支持灵活的插件式的用户认证。支持Active Directory,LDAP, Github等认证方式 。 Rancher支持在环境级别的基于角色的访问控制 (RBAC),可以通过角色来配置某个用户或者用户组对开发环境或者生产环境的访问权限。

    下图展示了Rancher的主要组件和功能:

    2、Rancher安装

    2.1、docker search rancher查找镜像

    2.2、创建并启动容器

    可以在DockerHub查找对应的资源,此处运行并且拉取rancher/server:v1.6.17

    docker run -d --restart=unless-stopped -p 18001:8080 rancher/server:v1.6.17

    2.3、查看运行容器

    docker ps执行该命令

    2.4、http://192.168.88.129:18001/访问Rancher

    下面这个就是安装成功了

    下一章节探讨一下如何使用Rancher,敬请期待!

  • 相关阅读:
    人工智能-深度学习之延后初始化
    Docker搭建MySQL8.0主从复制(一主一从)
    SICP 2.2: 层次性数据和闭包性质(Python实现)
    逆向破解之易语言按钮事件特征码
    使用内网穿透实现公网VNC远程桌面Ubuntu
    2022数学建模国赛A题思路建模/2022全国大学生数学建模A题思路建模/2022建模国赛A题思路模型/波浪能最大输出功率设计
    矿产行业供应链协同系统解决方案:构建数智化平台,保障矿产资源安全供应
    d3力导向图
    MIPI CSI-2笔记(22) -- CSI-2实现案例
    机器学习中基本符号表示和常用术语
  • 原文地址:https://blog.csdn.net/qq_57756904/article/details/126316152