docker | jenkins 实现自动化部署项目,后端躺着把运维的钱挣了!(上)

简介: 打算分两篇文章讲解,这篇文章讲解使用docker将我们的项目文件构建为镜像,然后部署到腾讯云的服务器上(相当于手动完成一次部署),然后进行外网访问测试。

前言

背景

最近在帮学校导师写项目,团队有4个人,项目前后端分离。如果是选择瀑布式开发:(在约定好接口的情况下)A、B同学写前端,C、D同学写后端,然后约定一个时间统一联调,最后将项目交付安装到客户机器上。

结合学校的背景,开发过程中会有几个问题:

  1. 项目需求可能会不定发生变化,客户希望能阶段性看到成果
  2. 等前后端开发完成之后再联调工作量大,容易出错,且开发bug容易堆积,愈演愈烈

如果前后端可以实现一边开发一边联调,一个小功能实现后就能立刻看到效果并且进行相应测试,这样即使中途遇到需求变动,也能较快作出修改,客户也能预览阶段性成果,并且在需求调整时更加有针对性。

既然如此,我能不能后端开发完一个功能就push到git仓库中,然后去部署,让前端可以使用接口,然后做一些测试工作呢?这样不就实现我的目的了?只是一开发一个小功能就要手动部署项目工作量略大...但我可以肝!

image-20220212230402982

当然,讲到这就要引出本文的主角:docker + jenkins了,使用jenkins监听git仓库的变化,一旦发生变化就自动拉取git仓库代码,构建docker镜像,然后自动部署,运行容器。后端只要push了代码,则新一版的项目就会由jenkins自动部署到指定服务器(前端同理),这样后端一个功能开发完(jenkins自动部署),前端就能使用接口进行开发(前端push后,也自动部署),并完成后续相关测试。

当然,上面讲的jenkins使用与真实工作中使用相比不够规范,在工作中jenkins的部署环境会更多细分:开发环境、测试环境、生产环境等。但是基本原理流程相同。

计划

打算分两篇文章讲解,这篇文章讲解使用docker将我们的项目文件构建为镜像,然后部署到腾讯云的服务器上(相当于手动完成一次部署),然后进行外网访问测试。

下一篇文章讲解使用jenkins + docker完成自动化部署项目的功能,如果写第三篇文章就是docker + jenkins + k8s将项目部署到集群当中,并且完成自动化部署的过程(这就很大程度上偏向于运维工程师的工作了)。

当然我本身也是在学习这些技术,因此如果行文当中有所纰漏,请指出~

docker

安装

  1. 在自己电脑上安装Docker Desktop:https://www.docker.com/get-started,选择适合自己主机系统的版本,安装运行之后就可以在命令行窗口使用docker命令了,mac运行Docker Desktop会有一个docker的logo显示。

  1. 在腾讯云主机上安装docker:https://dockerdocs.cn/engine/install/centos/index.html,参考docker中文文档,即可快速完成安装(这个文档也是大家学习docker最好的参考书)。

image-20220212203327261

项目目录

项目是由python的flask微框架构建的,编辑器是PyCharm,只是这个项目要求用python,换做是go、java都是一样的,这里可以完全忽略,因为项目本身也只有一个app.py文件,它定义了一个接口,访问http://主机IP:5000/,就可以返回Hello World

image-20220212204002284

Docker Hub

首先请大家到Docker Hub上注册一个账号,这个平台就像GitHub一样,是所有人发布Docker镜像的平台。然后在自己的主页创建一个Repository,这里我创建了一个名为wood-app-backend的Repository,用于后面我本地构建镜像之后,将镜像上传到自己的Docker Hub,然后再登录腾讯云主机,从Docker Hub上拉取镜像,就可以部署到云服务器上了。

image-20220212205725119

Dockerfile

这里重点关注Dockerfile文件内容,要将你的项目文件构建成docker镜像,先在项目中建立Dockerfile文件,然后编写构建镜像的逻辑,这里是一行一行执行的。每行都是一个关键字+若干参数,具体可以参考菜鸟教程:https://www.runoob.com/docker/docker-dockerfile.html,了解每个关键字作用。

# 一个镜像都是从一个原始镜像基础上构建的,这里我去Docker Hub上找了一个python3.6的镜像作为基本镜像
FROM quoinedev/python3.6-pandas-alpine:latest
# 工作目录
WORKDIR /usr/src/app
# 复制文件
COPY requirements.txt ./
# 构建镜像过程中可以执行命令,这里是为了下载对应的python依赖包(其他语言同理,导包)
RUN pip install --no-cache-dir -r requirements.txt
# 将当前目录下文件拷贝到工作目录
COPY . .
# 运行python的项目(容器运行时的命令要先定义好)
CMD ["python", "./app.py"]

然后在Dockerfile同级目录下执行下面的命令就可以将当前项目文件所有内容构建成一个docker镜像,至于baize1998/wood-app-backend:1.0,表明了该image所属的仓库以及对应的Tag版本(注意对应自己的Docker Hub上创建的仓库)

docker build -t baize1998/wood-app-backend:1.0 .

输入命令查看是否构建镜像成功(现在还是在本地处理docker命令,即Docker Desktop)

docker images

image-20220212211411884

上传docker镜像

登录Docker Hub

docker login -u 用户名 -p 密码

上传docker镜像(因为在构建镜像的时候已经将名称对应我们的Docker Hub仓库名称,所以直接push即可)

docker push baize1998/wood-app-backend:1.0

查看Docker Hub的wood-app-backend仓库中已经显示有一个1.0的tag(同理push一个tag为2.0的镜像也将出现在这个仓库中)

image-20220212210846893

云服务器拉取镜像

(先保证你已经在云服务器上安装了docker,参考上面我给的文档)同样需要先登录Docker Hub

docker login -u 用户名 -p 密码

拉取刚刚上传到我们自己的Docker Hub中的镜像

docker pull baize1998/wood-app-backend:1.0

查看是否拉取docker镜像成功

docker images

image-20220212210233712

借助镜像文件运行容器

# 有-d参数表示后台运行
docker run -d -p 5000:5000 镜像ID
# 补充几个常用命令
# 进入运行中的docker容器(因为一个容器可能是后台运行的,可以进入去了解容器运行情况)
docker exec -it 镜像ID sh 
# 或者
docker exec -it 镜像ID bash
# 或者
docker exec -it 镜像ID /bin/bash
# 从容器中退出
exit
# 也可以通过命令查看容器中端口占用情况去分析容器是否成功运行,自行搜索了解~

外网访问测试

访问成功,手动使用Dockerfile构建docker镜像并且部署使用的流程演示完毕

image-20220212212430571

结束语

这篇文章算是抛砖引玉,因为后面要用的jenkins服务本身也是使用docker镜像部署的,所以为了平滑使用jenkins,所以写了这篇文章,那我们下期见~

关注公众号【程序员白泽】,带你走近一个有点话痨的程序员/学生党。

相关文章
|
19天前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
53 3
|
1月前
|
测试技术
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
本文介绍了如何使用Pytest和Allure生成自动化测试报告。通过安装allure-pytest和配置环境,可以生成包含用例描述、步骤、等级等详细信息的美观报告。文章还提供了代码示例和运行指南,以及重构项目时的注意事项。
187 1
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
|
29天前
|
运维 监控 jenkins
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
|
29天前
|
监控 jenkins 持续交付
Docker和Jenkins有什么不同
【10月更文挑战第18天】Docker和Jenkins有什么不同
|
1月前
|
缓存 运维 Docker
容器化运维:Docker Desktop 占用磁盘空间过大?教你轻松解决!
Windows Docker Desktop 使用过程中,因镜像、容器数据及构建缓存的累积,可能导致磁盘空间占用过高。通过删除无用镜像与容器、压缩磁盘以及清理构建缓存等方法,可有效释放空间。具体步骤包括关闭WSL、使用`diskpart`工具压缩虚拟磁盘、执行`docker buildx prune -f`清理缓存等。这些操作能显著减少磁盘占用,提升系统性能。
346 4
|
1月前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
【10月更文挑战第8天】本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
36 5
|
1月前
|
Java jenkins 持续交付
Centos7下docker的jenkins下载并配置jdk与maven
通过上述步骤,您将成功在CentOS 7上的Docker容器中部署了Jenkins,并配置好了JDK与Maven,为持续集成和自动化构建打下了坚实基础。
105 1
|
1月前
|
测试技术 Python
自动化测试项目学习笔记(四):Pytest介绍和使用
本文是关于自动化测试框架Pytest的介绍和使用。Pytest是一个功能丰富的Python测试工具,支持参数化、多种测试类型,并拥有众多第三方插件。文章讲解了Pytest的编写规则、命令行参数、执行测试、参数化处理以及如何使用fixture实现测试用例间的调用。此外,还提供了pytest.ini配置文件示例。
28 2
|
1月前
|
运维 jenkins 持续交付
自动化部署的魅力:如何用Jenkins和Docker简化运维工作
【10月更文挑战第7天】在现代软件开发周期中,快速且高效的部署是至关重要的。本文将引导你理解如何使用Jenkins和Docker实现自动化部署,从而简化运维流程。我们将从基础概念开始,逐步深入到实战操作,让你轻松掌握这一强大的工具组合。通过这篇文章,你将学会如何利用这些工具来提升你的工作效率,并减少人为错误的可能性。
|
1月前
|
测试技术 Python
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
本文主要介绍了自动化测试中setup、teardown、断言方法的使用,以及unittest框架中setUp、tearDown、setUpClass和tearDownClass的区别和应用。
63 0
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法

热门文章

最新文章

下一篇
无影云桌面