docker | jenkins 实现自动化部署项目,后端躺着把运维的钱挣了!(上)
前言
背景
最近在帮学校导师写项目,团队有4个人,项目前后端分离。如果是选择瀑布式开发:(在约定好接口的情况下)A、B同学写前端,C、D同学写后端,然后约定一个时间统一联调,最后将项目交付安装到客户机器上。
结合学校的背景,开发过程中会有几个问题:
- 项目需求可能会不定发生变化,客户希望能阶段性看到成果
- 等前后端开发完成之后再联调工作量大,容易出错,且开发bug容易堆积,愈演愈烈
如果前后端可以实现一边开发一边联调,一个小功能实现后就能立刻看到效果并且进行相应测试,这样即使中途遇到需求变动,也能较快作出修改,客户也能预览阶段性成果,并且在需求调整时更加有针对性。
既然如此,我能不能后端开发完一个功能就push到git仓库中,然后去部署,让前端可以使用接口,然后做一些测试工作呢?这样不就实现我的目的了?只是一开发一个小功能就要手动部署项目工作量略大...但我可以肝!

当然,讲到这就要引出本文的主角:docker + jenkins了,使用jenkins监听git仓库的变化,一旦发生变化就自动拉取git仓库代码,构建docker镜像,然后自动部署,运行容器。后端只要push了代码,则新一版的项目就会由jenkins自动部署到指定服务器(前端同理),这样后端一个功能开发完(jenkins自动部署),前端就能使用接口进行开发(前端push后,也自动部署),并完成后续相关测试。
当然,上面讲的jenkins使用与真实工作中使用相比不够规范,在工作中jenkins的部署环境会更多细分:开发环境、测试环境、生产环境等。但是基本原理流程相同。
计划
打算分两篇文章讲解,这篇文章讲解使用docker将我们的项目文件构建为镜像,然后部署到腾讯云的服务器上(相当于手动完成一次部署),然后进行外网访问测试。
下一篇文章讲解使用jenkins + docker完成自动化部署项目的功能,如果写第三篇文章就是docker + jenkins + k8s将项目部署到集群当中,并且完成自动化部署的过程(这就很大程度上偏向于运维工程师的工作了)。
当然我本身也是在学习这些技术,因此如果行文当中有所纰漏,请指出~
docker
安装
- 在自己电脑上安装Docker Desktop:https://www.docker.com/get-started,选择适合自己主机系统的版本,安装运行之后就可以在命令行窗口使用docker命令了,mac运行Docker Desktop会有一个docker的logo显示。

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

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

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

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

上传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的镜像也将出现在这个仓库中)

云服务器拉取镜像
(先保证你已经在云服务器上安装了docker,参考上面我给的文档)同样需要先登录Docker Hub
docker login -u 用户名 -p 密码
拉取刚刚上传到我们自己的Docker Hub中的镜像
docker pull baize1998/wood-app-backend:1.0
查看是否拉取docker镜像成功
docker images

借助镜像文件运行容器
# 有-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镜像并且部署使用的流程演示完毕

结束语
这篇文章算是抛砖引玉,因为后面要用的jenkins服务本身也是使用docker镜像部署的,所以为了平滑使用jenkins,所以写了这篇文章,那我们下期见~
建了一个春秋招备战/内推/闲聊群,欢迎大家加入。

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

docker | jenkins 实现自动化部署项目,后端躺着把运维的钱挣了!(上)的更多相关文章
- docker | jenkins 实现自动化CI/CD,后端躺着把运维的钱挣了!(下)
前言 在上一篇文章中,我们使用docker编写Dockerfile文件,将我们自己的项目构建成镜像,然后发布到Docker Hub中,并且用自己的云服务器拉取Docker Hub上我们自己上传的项目镜 ...
- 基于Docker+Jenkins实现自动化部署
使用码云搭建Git代码存储仓库 https://gitee.com/login 使用码云创建私有私有git仓库 将本地springboot项目上传到git仓库中 基于Docker安装Jenkins环境 ...
- CentOS下Docker与.netcore(四)之 三剑客之一Docker-machine+jenkins简单自动化部署
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客 ...
- jenkins+git+maven搭建自动化部署项目环境
简介 折腾了两个晚上,趁着今晚比较有空,把jenkins+git+maven搭建自动化部署项目环境搭建的过程记录一下,这里我把github作为git的远程仓库(https://github.co ...
- jenkins自动化部署项目1--下载安装启动(windows)
年初以来断断续续研究jenkins自动化部署项目,前些天终于搞定了,接下来一点点把做的时候遇到的坑以及自己的心得写下来,方便以后复用. 我的jenkins服务是是部署在windows上的 一.下载安装 ...
- 基于 Jenkins Pipeline 自动化部署
最近在公司推行Docker Swarm集群的过程中,需要用到Jenkins来做自动化部署,Jenkins实现自动化部署有很多种方案,可以直接在jenkins页面写Job,把一些操作和脚本都通过页面设置 ...
- gitlab与jenkins的自动化部署(通过webhook与ansilble)
gitlab与jenkins的自动化部署(通过webhook与ansilble) 1.部署介绍 gitlab服务器:192.168.1.49:80jenkins服务器:192.168.1.49:818 ...
- 使用Docker+Jenkins自动构建部署
环境 Windows 10 Docker Version 18.06.1-ce-win73 (19507) 运行jenkins 运行jenkins 容器 docker run -d --name ln ...
- 搭建jenkins实现自动化部署
搭建jenkins实现自动化部署 一.安装jenkins 1.添加yum repos,然后安装 sudo wget -O /etc/yum.repos.d/jenkins.repo https://p ...
随机推荐
- IntelliJ IDEA 2020.1.1 x64 Debug 断点调试模式详解
前言 对于初入职场的萌新们来说,很多都还不会 Debug 断点模式.记得我刚写代码的时候,也是通过 System.out.println() 一行一行的把变量打印出来看.其实强大的编辑器已经帮我们做好 ...
- TypeScript中文教程基础部分上----翻译自TS官方
为什么使用TS? js中每一个值在不同的操作运行中表现出一系列不同的行为,比如说下面这个例子: message.toLowerCase();message(); 逐行看下,第一行调用了message的 ...
- Python中的GIL锁
在Python中,可以通过多进程.多线程和多协程来实现多任务. 在多线程的实现过程中,为了避免出现资源竞争问题,可以使用互斥锁来使线程同步(按顺序)执行. 但是,其实Python的CPython(C语 ...
- RabbitMQ --- 直连交换机 【 有回调方法,获取消费结果 】
1.前言 上一随笔详细记录了直连交换机的方法,发送的消息是异步的,如果消息未被消费者消费,那么可以一直存在消息队列中. 那么有没有办法做一个回调,当消息被消费后,被通知消息成功被消费者消费啦? 答案是 ...
- javaScript(笔记1)
一.JavaScript数据类型: 1.分类: 基本数据类型 & 高级引用数据类型 2.基本数据类型: 数字类型(number), 字符串类型(string), 布尔类型(boolean) 3 ...
- 离线环境安装使用 Ansible
之前写了一篇介绍 Ansible 的文章 ,今天回顾看来写的有些匆忙,一些具体的操作步骤都没有讲明白,不利于读者复现学习.最近又申请了一个几百台机器的环境,正好借此机会把如何在离线环境中使用 Ansi ...
- 万级K8s集群背后 etcd 稳定性及性能优化实践
1背景与挑战随着腾讯自研上云及公有云用户的迅速增长,一方面,腾讯云容器服务TKE服务数量和核数大幅增长, 另一方面我们提供的容器服务类型(TKE托管及独立集群.EKS弹性集群.edge边缘计算集群.m ...
- 只需两步在Linux系统安装百度网盘--Ubuntu20
Linux Ubuntu系统安装百度网盘 百度网盘已支持Linux系统下载和使用.使用Linux系统下载并安装一个百度网盘是非常简单的,只需要以下两个步骤: 第一步 进入官网下载.deb类型的百度网盘 ...
- Anaconda3+CUDA10.1+CUDNN7.6+TensorFlow2.6安装(Ubuntu16)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 使用HTMLTestRunner在目标目录下并未生成HTML文件解决办法
使用pycharm工具应用HTMLTestRunner模块时,测试用例可以顺利运行,但在目标目录下并未生成HTML文件.使用python的IDLE,能够正常运行并创建写入测试结果. 测试环境:pyth ...