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,所以写了这篇文章,那我们下期见~

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

相关文章
|
24天前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
47 9
|
1月前
|
关系型数据库 MySQL Java
【Docker最新版教程】一文带你快速入门Docker常见用法,实现容器编排和自动化部署上线项目
Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+docker网络+DockerCompose项目实战一文搞定!
|
26天前
|
机器学习/深度学习 运维 监控
智能化运维:从自动化到AIOps的演进之路####
本文深入探讨了IT运维领域如何由传统手工操作逐步迈向高度自动化,并进一步向智能化运维(AIOps)转型的过程。不同于常规摘要仅概述内容要点,本摘要将直接引入一个核心观点:随着云计算、大数据及人工智能技术的飞速发展,智能化运维已成为提升企业IT系统稳定性与效率的关键驱动力。文章详细阐述了自动化工具的应用现状、面临的挑战以及AIOps如何通过预测性分析和智能决策支持,实现运维工作的质变,引领读者思考未来运维模式的发展趋势。 ####
|
26天前
|
机器学习/深度学习 数据采集 人工智能
智能化运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的崛起背景,深入分析了其核心概念、关键技术、应用场景及面临的挑战,并对比了传统IT运维模式,揭示了AIOps如何引领运维管理向更高效、智能的方向迈进。通过实际案例分析,展示了AIOps在不同行业中的应用成效,为读者提供了对未来智能运维趋势的洞察与思考。 ####
62 1
|
1月前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
43 2
|
1月前
|
机器学习/深度学习 数据采集 人工智能
智能运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的兴起背景、核心组件及其在现代IT运维中的应用。通过对比传统运维模式,阐述了AIOps如何利用机器学习、大数据分析等技术,实现故障预测、根因分析、自动化修复等功能,从而提升系统稳定性和运维效率。文章还深入分析了实施AIOps面临的挑战与解决方案,并展望了其未来发展趋势。 ####
|
1月前
|
机器学习/深度学习 数据采集 运维
智能化运维:机器学习在故障预测和自动化响应中的应用
智能化运维:机器学习在故障预测和自动化响应中的应用
61 4
|
2月前
|
测试技术
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
本文介绍了如何使用Pytest和Allure生成自动化测试报告。通过安装allure-pytest和配置环境,可以生成包含用例描述、步骤、等级等详细信息的美观报告。文章还提供了代码示例和运行指南,以及重构项目时的注意事项。
280 1
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
|
2月前
|
运维 监控 jenkins
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
|
2月前
|
测试技术 Python
自动化测试项目学习笔记(四):Pytest介绍和使用
本文是关于自动化测试框架Pytest的介绍和使用。Pytest是一个功能丰富的Python测试工具,支持参数化、多种测试类型,并拥有众多第三方插件。文章讲解了Pytest的编写规则、命令行参数、执行测试、参数化处理以及如何使用fixture实现测试用例间的调用。此外,还提供了pytest.ini配置文件示例。
56 2