Docker+Jenkinsg+Springboot流水式构建-实用篇

最近无聊想自己玩一玩devpos,方便以后接私活,或者学习,O(∩_∩)O,

以后直接安装这篇文档,傻瓜式安装,哈哈

废话不多说,直接进入实战,完成简单的搭建

1.初始化CentOS环境

1.1 关闭防火墙

sudo systemctl stop firewalld

1.2 禁用 firewalld 服务 在启动时自动运行

sudo systemctl disable firewalld

1.3 验证 firewalld 服务状态

sudo systemctl status firewalld

如果 firewalld 已经停止并且被禁用,你应该会看到类似以下的输出:

● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)

测试以下网络环境

ping aliyun.com

安装完毕后,如果需要开启防火墙输入以下命令

启动防火墙
sudo systemctl start firewalld
确保 firewalld 在系统启动时自动运行
sudo systemctl enable firewalld

2.Docker安装

docker安装要求系统内核高于3.10

2.1查看内核

uname -r

2.2更新yum包

yum -y update

或者

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

如果执行报:

已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was
14: curl#6 - "Could not resolve host: mirrorlist.centos.org; 未知的错误"

原因是:

由于 yum 无法访问 CentOS 的镜像列表,导致无法获取软件包。这可能是由于网络问题、DNS 解析失败或者 CentOS 7 的官方镜像列表已经不再维护(因为 CentOS 7 的生命周期已经结束)

解决方式:

更新镜像源,修改/etc/yum.repos.d/CentOS-Base.repo

sudo vi /etc/yum.repos.d/CentOS-Base.repo

将文件内容替换为阿里云的:

在进行任何修改之前,建议先备份原始的yum源配置文件,以便在需要时能够恢复。yum源配置文件通常位于/etc/yum.repos.d/目录下,文件名为CentOS-Base.repo(根据具体版本和发行版可能有所不同)。

bash复制代码

sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

下载阿里云的yum源配置文件

有多种方法可以下载阿里云的yum源配置文件,常用的有wgetcurl命令。以下是一个使用curl命令下载CentOS 7阿里云源配置文件的示例:

bash复制代码

sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

注意 :阿里云提供的yum源配置文件版本可能随时间更新,因此建议直接访问阿里云官方镜像站点(如http://mirrors.aliyun.com/repo/)查找最新版本。

清理yum缓存,并生成新的缓存

sudo yum clean all

sudo yum makecache

yum clean all命令会清除所有已下载的包和头文件缓存,而yum makecache命令则会重新生成缓存。

然后 验证 yum源是否更换成功 可以试试下载docker

sudo yum install docker-ce docker-ce-cli containerd.io -y

2.3 正式安装Docker

sudo yum remove docker

2.4 安装软件包

sudo yum install -y yum-utils

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

2.5 下载阿里云仓库

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

2.6 下载docker

sudo yum install docker-ce docker-ce-cli containerd.io -y

2.7 启动docker

systemctl start docker

2.8 设置后台开机启动

sudo systemctl enable docker

2.9 验证docker服务状态

sudo systemctl status docker

如果 Docker 已经启动并且被启用,你应该会看到类似以下的输出:

● docker.service - Docker Application Container Engine

Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)

Active: active (running) since ...

2.9.1 检查 Docker 版本

docker --version

2.9.2 配置docker加速镜像

2.9.2.1 创建一个/etc/docker 目录

sudo mkdir -p /etc/docker

2.9.2.2 创建一个daemon.json的加速文件

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
EOF

2.9.2.3 挂载到docker下

sudo systemctl daemon-reload

2.9.2.4 重启docker

sudo systemctl restart docker

问题:

docker无法启动

报 Job for docker.service failed because the control process exited with error code.

查看docker日志

systemctl status docker.service

一般都是 daemon.json 问题。

试试拉取 jenkins镜像

docker pull jenkins/jenkins

如果出现了

Using default tag: latest

Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
拉取不成功是应为国内的镜像加速基本都被墙了,无法访问。需要寻找网友搭建的镜像加速。

例如:我找到了一个 https://dockerpull.org

详情请参考:https://dockerpull.org/

修改文件 /etc/docker/daemon.json 文件

{"registry-mirrors": ["https://dockerpull.org"]}
#重载systemd管理守护进程配置文件

sudo systemctl daemon-reload

#重启 Docker 服务

sudo systemctl restart docker

或者 在docker pull 时加入加速镜像网址

例如 :docker pull dockerpull.org/jenkins/jenkin

加速镜像参考:

关于Docker官方镜像仓库被墙的一些解决办法 - 我不是矿神

3. 安装docker管理面板【DPanel 】

DPanel 有两个版本,一个是标准版本,还有个 Lite 版。其中 Lite 版本中,不包含域名转发功能。即容器内不会安装 nginx 及 acme.sh 等相关组件。

Lite 版如果需要域名转发,需要借助外部工具,例如 NginxProxyManager、Lucky、宝塔、Nginx 等

本文采用的是标准版 dpanel/dpanel:latest

如果你下载不了,可以使用国内镜像:

registry.cn-hangzhou.aliyuncs.com/dpanel/dpanel:latest

需要创建挂载目录

新建文件夹 dpanel 和 子目录

mkdir -p /volume1/docker/dpanel/data
进入 dpanel 目录

cd /volume1/docker/dpanel
运行容器

docker run -d

--restart unless-stopped

--name dpanel

-p 8807:8080

-v /var/run/docker.sock:/var/run/docker.sock

-v $(pwd)/data:/dpanel

-e APP_NAME=dpanel

registry.cn-hangzhou.aliyuncs.com/dpanel/dpanel:latest

APP_NAME:dpanel :APP_NAME 请保持与 container_name 一致

安装完成后,在浏览器中输入 http://IPxx.xx.x:8807 就能看到登录界面

可以参考以下文档,都是中文的

donknap/dpanel: docker可视化管理面板

地址:https://github.com/donknap/dpanel

DPanel 可视化 Docker 管理面板

地址:https://dpanel.cc/#/

Docker

地址:https://dpanel.cc/#/zh-cn/install/docker

4.安装Jenkins

4.1 创建jenkins挂载目录文件夹/volume1/docker/jenkins

mkdir -p /volume1/docker/jenkins

4.2 授权目录,给/volume1/docker/jenkins 权限

chmod 777 /volume1/docker/jenkins

4.3 安装maven

处理maven安装问题

因为我们要部署的是SpringBoot,所以需要准备JDK和Maven环境

直接输入命令下载:

wget https://downloads.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz

创建一个maven文件夹

mkdir -p /volume1/docker/maven

然后使用命令进行解压,到对应文件夹下【-C /volume1/docker/maven】

tar -zxvf apache-maven-3.8.8-bin.tar.gz -C /volume1/docker/maven

配置maven环境

  1. 到maven对应的目录下设置setting文件,例如我的在 /volume1/docker/maven 下

    cd /volume1/docker/maven/apache-maven-3.8.8
    
  2. 编辑setting文件

    vim settings.xml

  3. 将原来的mirror删除掉,按i进入编辑

    加入新的mirror 和 localRepository

    xml 复制代码
     <localRepository>/volume1/docker/maven/repository</localRepository>
     
     <mirror> 
         <id>alimaven</id> 
         <name>aliyun maven</name> 
         <url>https://maven.aliyun.com/nexus/content/groups/public/</url> 
         <mirrorOf>central</mirrorOf> 
     </mirror>

    mirror是配置远程仓库:我们选aliyun 的仓库

    localRepository 是配置本地仓库 :我们选择本地对应的目录下

  4. 创建一个仓库文件夹

    mkdir -p /volume1/docker/maven/repository
    

    注意这里的仓库文件夹需要与我们配置的localRepository路径一致,不然找不到本地的maven仓

  5. 配置环境变量

    打开环境变量文件:按i编辑,进入到最后一行进行编辑

    vim /etc/profile
    

    添加配置信息:MAVEN_HOME 配置咱们的maven路径

    export MAVEN_HOME=/volume1/docker/maven/apache-maven-3.8.8
    export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
    
  6. 从新载入配置文件

    source /etc/profile

    测试maven安装结果

    mvn -v
    

    出现 以下内容即安装成功

    Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39)

    Maven home: /volume1/docker/maven/apache-maven-3.8.8

    Java version: 1.8.0_332, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.332.b09-1.el7_9.x86_64/jre

4.4 运行启动Jenkins命令:

docker run -u root -d --restart=always --privileged=true \
  -p 10240:8080 -p 10241:50000 \
  -v /volume1/docker/jenkins:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /usr/bin/docker:/usr/bin/docker \
  -v /volume1/docker/maven:/usr/local/maven \
  -v "$HOME":/home \
  --name jenkins jenkins/jenkins:lts

设置容器内的用户为 root。这意味着容器将以超级用户权限运行。

-d:以后台模式(即作为后台进程)启动容器。

--restart=always:

设置容器在宿主机重启后总是重新启动。

--privileged=true:

以特权模式运行容器,这给予了容器更多的权限,比如可以直接访问 Docker API。特权模式绕过了某些安全限制,因此只应在必要时使用。

-p 10240:8080:

映射容器的端口 8080 到宿主机的端口 10240。这意味着你可以通过访问宿主机的 10240 端口来连接到容器内的 Jenkins 服务。

-p 10241:50000:

类似地,映射容器的端口 50000 到宿主机的端口 10241。这通常是用于 Jenkins 的代理或者其他需要监听外部端口的服务。

-v //volume1/docker/jenkins :/var/jenkins_home:

将宿主机上的 /home/jenkins/workspace/ 目录挂载到容器内的 /var/jenkins_x 目录。这使得 Jenkins 可以在宿主机上存储工作空间数据。

-v /var/run/docker.sock:/var/run/docker.sock:

将 Docker 的 Unix socket 文件从宿主机挂载到容器内,使得容器内的 Jenkins 可以管理宿主机上的 Docker 服务。

-v /usr/bin/docker:/usr/bin/docker:

将宿主机上的 /usr/bin/docker 文件挂载到容器内的相同位置。虽然在特权模式下,容器内的 Docker 客户端可以连接到宿主机的 Docker 引擎,但这个选项可能是为了确保 Jenkins 能够直接访问 Docker 客户端。

-v /volume1/docker/maven:/usr/local/maven:

将宿主机上的 Maven 安装目录挂载到容器内的 /usr/local/maven 目录,这样容器内的 Jenkins 可以使用宿主机上的 Maven 版本。

-v "$HOME":/home:

将宿主机用户的主目录挂载到容器内的 /home 目录。这使得 Jenkins 可以访问宿主机用户的主目录下的文件。

--name jenkins:

给容器命名,便于后续管理。

jenkins/jenkins:lts:

4.5 Jenkins配置

可以参考以下博客

Jenkins+Docker+Gitee自动化项目部署上线

Docker+jenkins+Gitee自动构建部署SpringBoot项目

Jenkins + Docker + Github 自动部署-CSDN博客

基于Docker+Jenkins实现自动部署SpringBoot+Maven项目_gitee+jetkins+docker自动部署构建springboot+vue项目-CSDN博客

相关推荐
漫天转悠33 分钟前
Docker保存镜像和导入镜像文件(图文详解)
ubuntu·docker
m0_548514771 小时前
前端打印功能(vue +springboot)
前端·vue.js·spring boot
fen_fen1 小时前
Docker如何运行一个python脚本Hello World
运维·docker·容器
檀越剑指大厂2 小时前
【Docker系列】Docker 构建多平台镜像:arm64 架构的实践
docker·容器·架构
customer082 小时前
【开源免费】基于SpringBoot+Vue.JS加油站管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·maven
阿moments3 小时前
Docker - 速成
运维·docker·云原生·容器
T.O.P113 小时前
Spring&SpringBoot常用注解
java·spring boot·spring
落寞书生3 小时前
docker安装mysql 实现主从同步
运维·mysql·docker·主从同步·docker 安装mysql
IT界的奇葩4 小时前
基于springboot使用Caffeine
java·spring boot·后端·caffeine
rookiesx4 小时前
springboot jenkins job error console log
spring boot·后端·jenkins