Docker容器化技术

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5sgIesq7-1607930522952)(img/docker.jpg)]

Author:Allen_Huang

Version:1.0.0

文章目录

一、引言


1.1 什么是Docker(重要 - 部署)?

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

1.2 容器的特性

容器技术又称为容器虚拟化,是一种操作系统虚拟化,属于轻量级虚拟化
容器首先是一个相对独立的运行环境,并且在一个容器环境中,应该最小化对外界的影响,比如不能在容器中把宿主机上的资源全部消耗完,这就是资源控制。

1.3 为什么需要Docker?

1.3.1 思考

在开发中我们经常会遇到这样的问题,我的代码在本地是好好的,为什么放到其他机器上就跑不起来了呢?

1.3.2 原因

这时候就牵扯到了另一个因素环境。我们的开发环境受制很多因素,比如我用win或者mac os开发的,但是部署到了centos上面了,造成的环境影响。还有配置、版本等等一系列的问题。

1.3.3 方案

因为环境的不同,当运维拿到我们的代码的时候就会很头疼。所以急切的希望出现一种技术来统一这些环境。你开发就不要只提交代码给我了,把你的代码连着你的开发环境直接打包丢给我吧。或者说我来弄一套环境,你在我这上面开发。所以这时候docker就出现了,来解决我们这些一套环境的问题

1.4 容器 VS 虚拟机

1.4.1 虚拟机

1)虚拟机是用来进行硬件资源划分的完美解决方案,利用的是硬件虚拟化技术,如此VT-x 、AMD-V会通过一个 hypervisor 层来实现对资源的彻底隔离。
2)虚拟机会独占分配给自己的资源,不存在资源共享,各个虚拟机之间近乎完全隔离,更加重量级,也会消耗更多的资源。

虚拟机结构图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jTIx88ue-1607930523554)(img/虚拟机.png)]
1.4.2 容器

1)容器则是操作系统级别的虚拟化,仅仅是进程本身就可以实现互相隔离,不需要任何辅助。
2)Docker 容器与主机共享操作系统内核,不同的容器之间可以共享部分系统资源,因此更加轻量级,消耗的资源更少。

容器结构图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vh9kvoj2-1607930523556)(img/容器.png)]

1.5 Docker架构图

Docker架构图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DV5wejKa-1607930523558)(img/Docker架构图.png)]
1.5.1 仓库

Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。

1.5.2 镜像

Docker 镜像是用于创建 Docker 容器的模板,类似于Java中的概念。

1.5.3 容器

是独立运行的一个或一组应用。通过镜像创建生成,类似于Java中的对象概念。

二、Docker的安装


2.1 Docker的发行版

自2017年3月份 Docker 公司把 Docker 划分为了
社区版: Docker Community Edition(CE) 为社区版, 免费。
企业版: Docker Enterprise Edition(EE) 为企业版, 收费。支持安全扫描,LDAP集成,内容签名,多云支持等

2.2 Docker支持的操作系统

Docker最初依赖于linux kernel的一些功能,所以最开始只能在linux系统下运行,常用发行版本,CentOS, Ubuntu, Suse,Federa都是支持。
2015年微软在windows server 2016下实现了Docker,因此也能在windows下运行。

2.3 在CentOS上安装Docker(CentOS版本必须7+)

2.3.1 安装前置环境
yum install -y yum-utils device-mapper-persistent-data lvm2
2.3.2 设置docker-ce版安装源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum makecache fast
2.3.3 安装docker
yum -y install docker-ce
2.3.4 启动/停止docker
systemctl start/stop docker
2.3.5 基于阿里云配置镜像加速

登录网址: https://dev.aliyun.com/

需要注册个账号后登录上去,点击“管理中心”
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u2lwswJC-1607930523559)(img/阿里云管理中心.png)]
选择“镜像加速器”
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gWPYTQpf-1607930523561)(img/镜像加速器.png)]
按照官方的操作文档修改配置文件即可
注意:如果/etc/docker/daemon.json文件不存在,创建一个即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-smmso5Hf-1607930523561)(img/阿里云配置镜像加速.png)]
2.3.6 重启docker服务
systemctl restart docker
2.3.7 测试docker服务
docker run hello-world
测试结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6p8VjlJv-1607930523562)(img/Docker测试结果.png)]

三、Docker的基本命令

3.1 镜像相关的命令

3.1.1 搜索镜像
docker search [镜像名称]

参数介绍:

-f, --filter 根据提供的条件过滤器输出
–format 用Go模板打印出漂亮的搜索结果
–limit [n] 搜索结果的最大数量(默认值为25)
–no-trunc 不要截断输出

3.1.2 拉取镜像(从仓库中下载镜像到本地)
docker pull [镜像名称][:标签]

注意:

拉取镜像时如果没有显示的指定tag标签,默认会拉取latest标签的版本镜像

3.1.3 查看本地镜像
docker images

参数介绍:

-q 只显示镜像唯一的标识信息

3.1.4 删除镜像
docker rmi [镜像名称:tag]/[镜像ID]

参数介绍:

-f 强制删除镜像

后面所有用到名称:tag的地方都可以用id代替,反过来也一样

3.2 容器相关的命令

3.2.1 根据镜像运行容器
docker run [镜像名称][:tag]

参数介绍:

-i 保持和 docker 容器内的交互
-t 为容器的标准输入,虚拟一个tty
-d 后台运行容器
–rm 容器在启动后,执行完成命令或程序后就销毁(不可于 -d 一起使用)
–name 给容器起一个自定义名称
–restart docker 1.12 新增加的参数,用来指定容器的重启策略, 当前提供的策略包括:
no 默认值,如果容器挂掉不自动重启。
on-failure,若容器的退出状态非0,则docker自动重启容器,还可以指定重启次数
always,只要容器退出,则docker将自动重启容器
-p 将宿主机中的某个端口映射到容器中的某个端口上
-e 动态设置容器的运行环境变量

注意:如果run的镜像在本地不存在,就会自动的进行拉取

3.2.2 查看容器
docker ps

参数介绍:

-a 查看所有容器(默认不查询停止的容器)
-q 只查询容器的id

3.2.3 容器启动/停止/重启
docker start/stop/restart 容器名称
3.2.4 查看容器的元数据(容器的详细信息)
docker inspect 容器名称
3.2.5 删除容器
docker rm 容器名称

参数介绍:

-f 表示强制删除一个容器(默认不能删除一个运行中的容器)

3.2.6 进入容器中
docker exec [option] 容器名称 [args]

参数介绍:

-i 保持和 docker 容器内的交互
-t 为容器的标准输入,虚拟一个tty
-w 指定进入容器后的工作路径

args:表示进入容器后执行的命令,如果需要和容器进行交互式访问,需要配置参数为-it,并且命令设置为bash(表示通过命令行的方式交互访问容器)

注意:

该命令只能进入到运行中的容器

3.2.7 查看容器运行日志
docker logs 容器名称

参数介绍:

–tail n 选项可以指定查看最后n条日志
-t 选项则可以对日志条目附加时间戳。
–until 显示在某个时间戳(例如:2018-05-25T 13:23:37)之前的日志,还可以相对时间(例如:42m 42 minutes)
-f 实时打印日志内容

3.2.7 宿主机和容器间的数据拷贝
docker cp [OPTIONS] 容器名称:容器内路径 宿主机路径 
docker cp [OPTIONS] 宿主机路径 容器名称:容器内路径

注意:
1、复制文件夹不需要添加任何参数(和Linux的命令有区别)
2、无论需要从哪儿拷贝到哪里,命令都是在宿主机执行

四、容器数据卷

4.1 什么是容器数据卷?

数据卷存在于宿主机中,独立于容器,和容器的生命周期是分离的
数据卷可以目录也可以是文件
容器可以利用数据卷与宿主机进行数据共享,实现了容器间的数据共享和交换

4.2 容器数据卷的特点

1、容器启动时初始化数据卷,如果容器使用的镜像包含了数据,这些数据也会拷贝到数据卷中
2、对 数据卷 的修改会立马生效
3、数据卷的变化不会影响镜像的更新
4、数据卷是宿主机中的一个目录

4.3 数据卷的运用场景

1、在多个运行容器之间共享数据。如果您没有明确创建它,则会在第一次将其装入容器时创建卷。当该容器停止或被移除时,该卷仍然存在。多个容器可以同时安装相同的卷,无论是读写还是只读。仅当您明确删除卷时才会删除卷

2、当您想要将容器的数据存储在远程主机或云提供商上而不是本地时

3、当您需要备份,还原或将数据从一台Docker主机迁移到另一台时,卷是更好的选择。您可以停止容器,然后备份卷的目录

4.4 数据卷的相关命令

4.4.1 创建容器数据卷
docker volume create 数据卷名称

注意

容器卷默认保存在宿主机的/var/lib/docker/volumes路径下

4.4.2 创建容器时指定数据卷
docker run -it 
	--mount source=数据卷名称,target=容器中的挂载路径,type=volume 
	--name 容器别名 镜像名称

参数介绍:

source 指定宿主机中数据卷的名称
target 指定容器中对应的挂载路径
type 指定为数据卷的方式挂载,还可以选择bind、tmpfs,默认为volume

注意:

1、如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中
2、如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉

4.4.3 直接在创建容器时指定数据卷
docker run  ... [-v 宿主机数据卷:docker容器路径:ro] []...

注意:

1、通过这种方式可以任意指定宿主机的数据卷位置
2、如果随意指定数据卷的位置,容器中对应路径的文件就不会复制到宿主机的数据卷中,而是全部被清空
3、:ro表示以只读的方式挂载容器卷,不写再表示以读写的方式挂载
4、可以通过-v连续设置多个容器卷路径

总结:

数据卷未显示声明路径(默认在/var/lib/docker/volumes下)

1、数据卷为空,对应的容器路径有数据,则容器中的数据直接同步到数据卷中
2、数据卷有数据,对应的容器路径不存在,则启动容器时,自动创建该容器路径,并且将数据卷的数据同步到该路径下
3、数据卷有数据,对应的容器路径也有数据(数据不同),会把数据卷中的数据同步到容器路径中,容器路径中的文件会被隐藏(宿主机 覆盖 容器)

如果宿主机的数据卷为空,容器覆盖宿主机,如果数据卷不为空,则宿主机覆盖容器

数据卷声明指定路径

1、数据卷为空,对应的容器路径有数据,则直接将容器路径中的数据隐藏
2、数据卷有数据,对应的容器路径不存在,则启动容器时,自动创建该容器路径,并且将数据卷的数据同步到该路径下
3、数据卷有数据,对应的容器路径也有数据(数据不同),会把数据卷中的数据同步到容器路径中,容器路径中的文件会被隐藏(宿主机 覆盖 容器)

无论情况如何,永远是宿主机 覆盖 容器路径

数据卷是文件的情况

1、数据卷指定一个文件,对应的容器文件不存在,直接将数据卷文件覆盖到容器中
2、数据卷指定的文件不存在,容器的文件存在,启动容器会报错

如果需要绑定文件,则必须保证宿主机的数据卷中文件必须存在

五、Docker的应用

5.1 使用docker安装MySQL

5.1.1 拉取mysql的镜像
docker pull mysql:5.7
5.1.2 根据镜像创建容器
docker run -d 
    -v ~/mysql/conf:/etc/mysql/conf.d //2
	-v ~/mysql/logs:/logs //3
	-v ~/mysql/data:/var/lib/mysql //4
	-p 3306:3306 //5
	-e MYSQL_ROOT_PASSWORD='root' //6
	--name mysql
	mysql:5.7

代码解释

第二行:挂载mysql配置文件到宿主机

第三行:挂载mysql日志文件到宿主机

第四行:挂载mysql的数据路径到宿主机

第五行:将容器中3306端口映射到宿主机的3306端口上

第六方:设置MySQL的root账号密码为root

设置数据库编码

进入~/mysql/conf中,创建一个文件my.cnf,填写如下内容:

[mysqld]
character-set-server=utf8

重启mysql容器

5.2 使用docker安装tomcat

5.2.1 拉取tomcat的镜像
docker pull tomcat:8
5.2.2 运行tomcat容器
docker run -d 
	--name tomcat 
	-p 8080:8080 
	-v ~/tomcat/webapps:/usr/local/tomcat/webapps  
	tomcat:8
5.2.3 进入容器中进行相关拷贝
docker exec -it tomcat bash

cp -r webapps.dist/* webapps

注意:

docker镜像tomcat8之后容器中webapps中没有任何内容,需要将欢迎页导入

5.2.4 将自定义工程部署到tomcat中

1、使用maven命令或者工具将自定义工程打包
2、到工程的target目录下找到打的war包
3、将war包拷贝到宿主机的tomcat数据卷中
4、重启tomcat容器 docker restart tomcat

六、Docker镜像的制作与管理

6.1 什么是Dockerfile?

Dockerfile简单来说就是docker镜像的描述文件,最基础原始的镜像文件都是通过dockerfile文件构建而来

6.2 Dockerfile模板指令介绍

FROM:指定基础镜像,必备的指令,并且必须是第一条指令。

MAINTAINER:指明该镜像的维护者和点子邮件。
比如:MAINTAINER xxxx “[email protected]

ENV:设置环境变量。
比如:EVN key1=value1 key2=value2…

RUN:在新镜像内部执行的命令,比如安装一些软件、配置一些基础环境,可使用\来换行。
比如:RUN yum install -y mysql-server

COPY:将主机的文件复制到镜像文件中,如果目标位置不存在会自动创建。
比如:COPY application.yml /etc/resources

ADD:和COPY一样,但是ADD会加上解压操作

EXPOSE:暴露镜像的端口供主机做映射,可以暴露多个端口。
比如:EXPOSE 8080

WORKDIR:在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录,而且在进入容器时,会默认定位到该路径下。
比如:WORKDIR /usr/local

VOLUME:用来向基础镜像中添加数据卷
比如 VOLUME /root/mydata /root/condata

CMD:容器启动时需要执行的命令。
比如 CMD /bin/bash

6.3 案例:使用Dockerfile构建自定义工程的运行镜像

6.3.1 准备好Dockerfile文件以及需要部署的工程war包
制作镜像1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GnkA5rlA-1607930523563)(img/制作镜像1.png)]
6.3.2 Dockerfile文件内容
FROM tomcat:8 
WORKDIR /usr/local/tomcat
COPY test.war ./webapps
EXPOSE 8080 
RUN ./bin/startup.sh 

解释:

第一行:该镜像时基于tomcat:8镜像构建

第二行:设置当前基础路径,也是后续命令的相对路径

第三行:将工程war包复制到tomcat的webapps路径下

第四方:对外暴露8080端口,也就是tomcat访问路径

第五行:设置容器启动时命令,即启动tomcat

6.3.3 通过Dockerfile构建镜像

执行命令

docker build -f ./Dockerfile -t mytest:v1 .

解释:

-f 用来指定Dockerfile模板文件
-t 用来指定自定义镜像的名称以及tag
最后的.表示当前路径

6.4 将自定义镜像推送至镜像中心(私服、阿里云等,这里以阿里云举例)

登录阿里云,并且选择容器镜像服务

创建容器仓库

登录阿里云的仓库并且通过命令推送镜像到阿里云

docker login --username=账号 registry.cn-hangzhou.aliyuncs.com
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/ken-hub/myhub:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/ken-hub/myhub:[镜像版本号]

七、Docker-Compose

7.1 什么是Docker-compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务

7.2 Docker-Compose安装

前置条件:安装好Docker

下载docker-compose二进制文件到服务器指定目录

curl -L https://github.com/docker/compose/releases/download/1.24.0/docker_x0002_compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

执行授权操作

chmod +x /usr/local/bin/docker-compose

测试

docker-compose version

7.3 Docker-Compose模板文件

7.3.1 什么是模板文件?

模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多。但是这里面大部分指令跟 docker run 相关参数的含义都是类似的。

默认的模板文件名称为 docker-compose.yml ,格式为 YAML 格式。

7.3.2 docker-compose模板基本格式案例
version: "3.1" 
services: 
    webapp:
        image: examples/web
        ports:
            - 80:80
        volumes:
            - /data
7.3.3 docker-compose模板文件常用指令

image:指定为镜像名称或镜像 ID
ports:设置暴露端口,容器端口 (HOST:CONTAINER) 格式
volumes:数据卷所挂载路径设置
command:覆盖容器启动后默认执行的命令
container_name:指定容器名称
environment:设置环境变量
build:指定 Dockerfile 所在文件夹的路径

7.3.4 docker-compose基本命令

创建并运行容器

docker-compose up -d

参数:

-d 表示后台运行

启动容器

 docker-compose start

停止容器

docker-compose stop

停止并移除容器

docker-compose down

注意:命令必须在docker-compose.yml文件所在位置执行

八、持续集成/持续交付/持续部署(CI/CD)

8.1 什么是持续集成?

持续集成(Continuous Integration,简称CI),是一种软件开发实践,指的是只要代码有变更,就自动运行构建和测试,反馈运行结果。通俗一点来讲,就是绑定项目的代码仓库,SVN或者Git库,自动抓取新的代码,完成构建,甚至执行测试,反馈结果。

持续集成
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ff5glDct-1607930523564)(img/持续集成.png)]

8.2 什么是持续交付?

持续交付(Continuous delivery,简称CD),指的是将集成后的代码部署到更贴近真实运行环境的「类生产环境」中,进行系统测试。如果代码没有问题,可以继续手动部署到生产环境中。

持续交付
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gx75MA7g-1607930523565)(img/持续交付.png)]

8.3 什么是持续部署?

持续部署(continuous deployment,简称CD)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。持续部署的目标是,代码在任何时刻都是可部署的,可以进⼊生产阶段。

持续部署
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9fkrcLoX-1607930523565)(img/持续部署.png)]

8.4 CI/CD中相关名词

​ 持续 (Continuous):不断的获取反馈,响应反馈

​ 集成 (Integration):编译、测试、打包

​ 部署 (Deployment):应用组件或基本设施的代码或配置变更在产品环境生效称为“部署”

​ 发布 (Release):具有业务影响的功能变化对最终用户可见称为“发布”

​ 交付 (Delivery):可以理解为从开发分支到测试分支之间的阶段,更多的强调的是一种能力。开发有能力频繁的部署,业务有能力随时发布

8.5 CI/CD的优点

​ 1、能够快速暴露错误

​ 2、保证代码提交质量

​ 3、定位错误更加容易

​ 4、降低整体集成风险

​ 5、促进产品快速迭代

九、CI/CD工具Jenkins

9.1 什么是jenkins?

简单来说,Jenkins是一款开源 CI/CD 软件,用于自动化各种任务,包括构建、测试和部署软件。Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序

官网地址

https://jenkins.io/zh/

9.2 使用Jenkins实现CI/CD的具体流程

jenkins实现CI/CD的流程图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kKxsg3ke-1607930523566)(img/流程图.png)]

9.3 Jenkins安装

​ 1、准备一台CI服务器(CentOS系统),提前安装好jdk、tomcat

​ 2、下载Jenkins的war包,上传部署到CI服务器的tomcat中的webapps文件夹下

jenkins安装流程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5fMfx0vo-1607930523568)(img/安装1.png)]

​ 3、启动tomcat

​ 4、通过浏览器访问CI服务器:http://CI-Server-IP/jenkins/

jenkins安装流程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mqq2nQBt-1607930523568)(img/安装2.png)]

​ 5、根据提示获取管理员账号,并且登录

​ 6、Jenkins插件的安装,选择第一个安装默认插件(比较耗时甚至失败,可以忽略)

jenkins安装流程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VykjPqpj-1607930523569)(img/安装3.png)]

​ 7、重新设置管理员账号后,登录进首页

jenkins安装流程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q7iTEXlf-1607930523570)(img/安装4.png)]

9.4 CI服务器上安装Git

9.4.1 为什么需要在CI服务器上安装GIT?

因为CI服务器需要从代码仓库上拉取最新的代码,所以需要安装git

9.4.2 基于yum安装git

执行命令

yum -y install git

注意

yum安装git被安装在/usr/libexec/git-core目录下

9.5 CI服务器上安装Maven

9.5.1 为什么需要在CI服务器上安装GIT?

因为CI服务器需要将最新拉取的代码进行编译打包,对于Java工程都是基于Maven构建,所以需要安装Maven工具(如果集成部署的工程是基于其他构建工具需要根据实际场景调整)

9.5.2 基于yum安装git

​ 1、创建并进入文件夹:/usr/local/maven

​ 2、执行命令下载maven

wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz

​ 3、解压

tar -zvxf apache-maven-3.6.1-bin.tar.gz

​ 4、编辑配置文件/usr/local/maven/apache-maven-3.6.1/conf/settings.xml,设置阿里云加速

<mirror>
	<id>alimaven</id>
	<mirrorOf>central</mirrorOf>
	<name>aliyun maven</name>
	<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>

注意

可以不用配置环境变量,最后maven的执行者是jenkins,我们告诉jenkins绝对路径即可,环境变量是方便执行人工命令的

9.6 Jenkins安装相应的插件

​ 1、进入插件管理页面

jenkins安装插件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lZ6IOTzr-1607930523571)(img/插件1.png)]

​ 2、搜索相关插件

jenkins安装插件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vptae7Xt-1607930523572)(img/插件2.png)]

​ 3、安装如下插件

git(用于git服务器拉取代码)
Maven Integration(用来构建Maven工程)
Publish Over SSH(用于将相关代码发布到远程服务器上)

9.7 配置Jenkins全局工具

​ 1、进入全局工具配置

jenkins全局工具配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-llRwQQkR-1607930523573)(img/全局配置1.png)]

​ 2、配置JDK

配置JDK
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3X9rLNmU-1607930523573)(img/配置jdk.png)]

​ 3、配置git(如果没有这个选项,说明git插件没有安装成功,需要重新安装git插件)

配置GIT
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lJ9x7Leo-1607930523574)(img/配置git.png)]

​ 4、配置Maven

配置GIT
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XIBJdeok-1607930523575)(img/配置maven.png)]

9.8 配置Jenkins系统设置

​ 1、进入系统设置

配置系统设置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dCArxnqb-1607930523575)(img/配置系统设置.png)]

​ 2、准备一台部署服务器(部署服务器上安装好docker/docker-compose)

​ 3、配置SSH连接远程部署服务器(如果没有这个配置,说明ssh插件未安装成功)

配置ssh远程连接
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yVDO35te-1607930523576)(img/配置ssh.png)]

9.10 创建Jenkins项目

​ 1、选择新建项目

​ 2、设置项目名称,并且选择maven项目(如果没有maven项目选择,说明maven插件安装失败)

构建项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4CeNsNon-1607930523576)(img/构建项目1.png)]

​ 3、配置项目源码管理

构建项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vDHKFBNG-1607930523577)(img/构建项目2.png)]

​ 4、配置构建命令

构建项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0wOSS3Mp-1607930523578)(img/构建项目3.png)]

​ 5、配置构建后操作,这里选择ssh,将构建结果发送到部署服务器进行部署

构建项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tKzVLvhz-1607930523579)(img/构建项目5.png)]

​ 6、设置远程发布的配置

构建项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RtSQKwoT-1607930523580)(img/构建项目6.png)]

source files 设置我们需要将什么文件上传到部署服务器
remote diretory 用于设置远程目录,所有上传的文件会上传到部署服务器的这个目录下
exec command 文件上传完成后,执行的命令(我们这里设置的是制作镜像并且运行的命令)

9.11 Jenkins构建并且部署项目

​ 1、将最新的代码上传到代码仓库

​ 2、在Jenkins端执行代码构建

构建项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b82aMRIo-1607930523582)(img/开始构建1.png)]

​ 3、查看构建日志

构建项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sbQdHcdA-1607930523583)(img/开始构建2.png)]

​ 4、访问部署服务器,查看最新的服务是否已经可以访问

9.12 附录

9.12.1 源码结构图
源码结构图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zUxyJrW2-1607930523583)(img/源码结构.png)]
9.12.2 Dockerfile内容
FROM openjdk:8
WORKDIR /usr/local/software
COPY ./jenkinsTest.jar ./
EXPOSE 8888
CMD java -jar jenkinsTest.jar

仅供参考,具体写法需要根据实际业务改变

9.12.3 docker-compose.yml内容
version: "3.1"
services:
  jenkinstest:
    build:
      context: ./docker
      dockerfile: Dockerfile
    ports:
      - 8888:8888
    container_name: myproject

------------------: |
| [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zZu2YI4f-1607930523584)(img/构建项目6.png)] |

source files 设置我们需要将什么文件上传到部署服务器
remote diretory 用于设置远程目录,所有上传的文件会上传到部署服务器的这个目录下
exec command 文件上传完成后,执行的命令(我们这里设置的是制作镜像并且运行的命令)

9.11 Jenkins构建并且部署项目

​ 1、将最新的代码上传到代码仓库

​ 2、在Jenkins端执行代码构建

构建项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z2fMswKI-1607930523584)(img/开始构建1.png)]

​ 3、查看构建日志

构建项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eaXxRFva-1607930523585)(img/开始构建2.png)]

​ 4、访问部署服务器,查看最新的服务是否已经可以访问

9.12 附录

9.12.1 源码结构图
源码结构图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wmH1m6VY-1607930523586)(img/源码结构.png)]
9.12.2 Dockerfile内容
FROM openjdk:8
WORKDIR /usr/local/software
COPY ./jenkinsTest.jar ./
EXPOSE 8888
CMD java -jar jenkinsTest.jar

仅供参考,具体写法需要根据实际业务改变

9.12.3 docker-compose.yml内容
version: "3.1"
services:
  jenkinstest:
    build:
      context: ./docker
      dockerfile: Dockerfile
    ports:
      - 8888:8888
    container_name: myproject

仅供参考,具体写法需要根据实际业务改变

猜你喜欢

转载自blog.csdn.net/m0_46487331/article/details/111172179