5 分钟,教你用 Docker 部署一个 Python 应用
在使用传统物理机或云服务器上部署项目都会存在一些痛点
比如:项目部署速度慢、资源浪费、迁移难且扩展低
而使用 Docker 部署项目的优势包含:
- 高效利用系统资源
- 服务启动更快
- 环境一致,迁移更加方便
本篇文章将介绍 Docker 部署一个 Python 项目的常规流程
1. Dockerfile 描述文件
Dockerfile 是一个放置在项目根目录下的描述文件,可以利用 Docker 命令基于该文件构建一个镜像
常用的指令包含:
FROM
用于定义基础镜像
MAINTAINER
指定维护者信息,可以省略不写
RUN
和「 安装命令 」连接在一起,可用于安装工具依赖包
ADD
将宿主机的文件,并进行解压
COPY
和 ADD 指令功能一样,但是不会进行解压操作
WORKDIR
用于切换工作目录
VOLUME
配置宿主机与容器的目录映射
EXPOSE
配置容器内项目对外暴露的端口号
CMD
指定容器启动后,运行的命令
比如,可以运行某个命令启动项目
2. 实战一下
使用 Docker 部署应用的常规流程是:
开发项目并本地测试通过
编写 Dockerfile 放置到项目根目录
打包镜像文件
运行镜像容器
测试
为了演示方便,这里以一个简单的 Flask 项目为例进行讲解
2-1 项目开发
from flask import Flask
# 安装依赖
# pip3 install -U flask
app = Flask(__name__)
@app.route('/')
def index():
return "测试容器部署!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8888)
# 浏览器访问测试
# http://127.0.0.1:8888/
项目开发完成,并在本地测试通过后就可以编写 Dockerfile 文件了
2-2 编写 Dockerfile
在项目根目录下,创建一个 Dockerfile 文件,使用上面的指令编写描述脚本
需要注意的是,这里使用「 EXPOSE 」指令暴露的端口号与入口文件定义的端口号保持一致
# Dockerfile
FROM centos:7.9.2009
RUN yum makecache fast;
RUN yum install python3-devel python3-pip -y
RUN pip3 install -i https://pypi.douban.com/simple flask
COPY main.py /opt
WORKDIR /opt
EXPOSE 8888
CMD ["python3","main.py"]
2-3 构建镜像
# 在当前文件夹下,根据Dockerfile文件构建一个镜像
# 镜像名称:xag/my_flask_web
# --no-cache:不使用旧的缓存进行镜像构建
docker build --no-cache -t "xag/my_flask_web" .
2-4 运行镜像容器
使用 docker run 命令基于镜像运行一个容器
其中
-d:代表容器在后台运行,不是基于前台运行
–name:用于执行容器的别名
-p:用于配置宿主机与容器的端口映射
# -d:后台运行
# 宿主机(9999)映射容器内的8888(上面Dockerfile已经暴露了8888端口)
docker run -d --name flask_web -p 9999:8888 xag/my_flask_web
2-5 测试一下
最后在浏览器中,通过宿主机暴露的端口号 9999 访问项目了
3. 总结
文章中以一个简单的 Web 项目阐述了利用 Docker 部署项目的常规流程
实际上,Dockerfile 非常的灵活,它还支持 ARG/ENV 设置环境变量,VOlUME 指令挂载目录,ENTRYPOINT 配置启动程序和参数等,这部分内容大家可以根据官网介绍自行进行扩展
https://docs.docker.com/engine/reference/builder/
最后: 可以在公众号:伤心的辣条 ! 自行领取一份216页软件测试工程师面试宝典文档资料【免费的】。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
学习不要孤军奋战,最好是能抱团取暖,相互成就一起成长,群众效应的效果是非常强大的,大家一起学习,一起打卡,会更有学习动力,也更能坚持下去。你可以加入我们的测试技术交流扣扣群:914172719(里面有各种软件测试资源和技术讨论)
喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一 键三连哦!
相关文章
- python执行脚本加参数_命令行运行Python脚本时传入参数的三种方式详解以及argparse子命令subparsers()方法
- Docker打包并运行python项目
- Python 包含u字符串转中文(u00)
- Python kafka操作实例(kafka-python)
- [Python] timeit测试代码运行效率
- Docker中mysql修改配置导致无法启动的docker容器
- 超全Python学习路线图+14张思维导图,让python初学者不走弯路
- 自从学会了Pandas,我用Python处理Excel更高效了
- Python安装模块出错(No module named setuptools)解决方法
- gyp ERR! stack Error: Can‘t find Python executable “python“, you can set the PYTHON env variable.
- Docker环境搭建与使用:docker配置镜像加速(已阿里云为例)
- python 利用pandas导入数据
- Python 数据分析教程之如何验证线性回归的假设,线性回归的假设是什么?以及如何用python验证它们?
- Python 如何自动完成A4标签排版打印功能
- 《Python硬件编程实战》——2.2 Python的两大版本
- 浅析Docker Volume理解:docker内文件系统是如何工作的、镜像启动容器是如何工作的、为什么要使用Volume、如何使用Volume、匿名卷与实名卷的区别
- python之itemgetter函数:对字典列表进行多键排序
- python之count()函数
- Python实例---爬取下载喜马拉雅音频文件
- Python 常见问题 之 python 安装包下载安装速度慢 的 快速解决方法(之一)
- Python计算美国总统的身高并实现数据可视化
- Docker启动报错docker: Error response from daemon: Conflict. The container name “/redis6“ is already in u
- Python每日一学 09——多文件操作