在Docker容器中进行Flask应用的开发

通过docker在容器中通过Gunicorn运行flask 关于docker容器的学习和应用,通过docker在容器中通过Gunicorn运行flask 阅读详情

转自 http://blog.youkuaiyun.com/liuchunming033/article/details/51940972


Docker技术越来越得到广泛的应用。利用Docker可以创建一个隔离的、自包含的程序运行环境,并且非常方便的进行部署。这篇文章将详细介绍,如何在Docker中开发Flask应用以及如何在Docker中来运行、访问Flask应用。

Docker的优势

通常对于Python开发来讲,我们可以借助virtualenv来建立彼此独立的开发环境。比如应用程序A依赖Python2.7,而应用程序B依赖Python3.5。我们可以分别建立两个virtualenv,其中一个安装python2.7,另外一个安装python3.5。之后我们就可以在各自的虚拟环境中进行开发了。貌似,viertualenv完美解决了不同程序的环境依赖问题。可是,真的是这样吗?

想象一下,我们在开发环境搭建了一套virtualenv,如果部署到生产环境中,还需要再生产环境再部署一套完全一样的virtualenv,对不对?而且还需要在主机上安装必要的软件才能建立虚拟环境。

利用Docker就可以解决这个问题。Docker不但可以做到在同一台主机上开发时建立不同的环境,还可以将建立的Docker镜像搬到其他不同的主机上,而不需要再次安装环境就可以运行程序。这样就可以保证开发、测试、生产环境的服务器上的环境完全一致。

本篇文章默认已经在你的服务器上安装好了Docker服务。如不会安装请参考Docker的官方文档。本文重点是讲解如何构建Docker镜像、如何在镜像中开发Flask程序、如何在镜像中运行Flask应用。

创建Docker镜像

搭建Flask应用的框架

先创建一个Flask应用程序的目录,我们叫它toolbox_docker。

$ cd ~
$ mkdir -p toolbox_docker
$ cd toolbox_docker

在这个目录中,我们将创建Flask应用程序的源码文件夹toolbox、用于构建Docker镜像的Dockerfile以及Flask应用说明文件Readme.md。

.
├── Dockerfile
├── Readme.md
└── toolbox

Flask 应用程序源码toolbox目录结构如下:

├── app
├── manage.py
├── requirements.txt
└── start_server.sh

在这个程序的源码中,包含Flask应用的管理脚本、项目的依赖requirements.txt、以及Flask应用的启动脚本start_server.sh。

创建entry-point启动脚本

entry-point启动脚本是用来启动Flask应用程序的。这个脚本可以作为容器启动时的默认命令,这样在容器启动时,Flask应用程序就被启动了。
start_server.sh脚本如下:

#!/bin/bash
set -e
touch /opt/toolbox/log/gunicorn.log
touch /opt/toolbox/log/gunicorn.err
touch /opt/toolbox/log/access.log

# Start Gunicorn processes
echo Starting Gunicorn...
exec gunicorn manage:app \
        --bind 0.0.0.0:8000 \
        --workers 4 \
        --log-level=info \
        --log-file=/opt/toolbox/log/gunicorn.log \
        --access-logfile=/opt/toolbox/log/access.log \
        "$@"
echo Gunicorn is running...

在这个脚本中,我们创建了三个log files用于记录gunicorn的运行情况。并且通过gunicorn启动Flask应用。
最后,”$@”允许我们在容器启动时,再传递额外的参数给gunicorn。
另外,要记得修改start_server.sh的执行权限:
$ chmod u+x start_server.sh

创建Dockerfile

创建Docker镜像的构建文件Dockerfile。内容如下:

##########################################################
# Dockerfile to run a flask-based web application# Based on an centos:7 image
##########################################################

# Set the base image to use to centos
FROM centos:7

# Set the file maintainer
MAINTAINER liuchunming033,liuchunming033@163.com

# Set env varibles used in this Dockerfile (add a unique prefix, such as DOCKYARD)
# Local directory with project source
ENV DOCKYARD_SRC=toolbox
# Directory in Container for all project files
ENV DOCKYARD_SRCHOME=/opt
# Directory in container for project source files
ENV DOCKYARD_SRCPROJ=/opt/toolbox

# Update the defualt application repository source list
RUN yum -y install epel-release
RUN yum -y install python-pip
RUN yum clean all

# Copy application source code to SRCDIR
COPY $DOCKYARD_SRC $DOCKYARD_SRCPROJ

# Create application subdirectories
WORKDIR $DOCKYARD_SRCPROJ
RUN mkdir log
VOLUME [“$DOCKYARD_SRCPROJ/log/”]

# Install Python dependencies
RUN pip install -r $DOCKYARD_SRCPROJ/requirements.txt

# Port to expose
EXPOSE 8000

# Copy entrypoint script into the image
WORKDIR $DOCKYARD_SRCPROJ
ENTRYPOINT [“./start_server.sh”]

Dockerfile表明了我们构建Docker镜像的步骤。
1、我们将centos:7作为基础镜像,后续的指令都是在此基础镜像中安装的;
2、使用ENV指令在Container中设置环境变量。这些环境变量可以在Dockerfile的后面指令中使用,也可以被在该容器中运行的程序使用。
3、执行YUM安装系统工具pip,pip用于安装后续requirements.txt中的依赖包
4、将Docker主机上的目录DOCKYARD_SRC内容,复制到镜像中的DOCKYARD_SRCPROJ目录。
5、使用requirements.txt来安装Python依赖。
6、使用EXPOSE指令暴露8000端口,以便容器外可以访问8000端口
7、ENTRYPOINT指令规定了在容器启动时执行的指令。这里是启动Flask应用的脚本。

构建Docker镜像

$ docker build -t automation/toolbox ~/toolbox_docker

将构建的Docker镜像命名为automation/toolbox。该构建执行过程中将经过一系列的Step。最终将输出类似Successfully built 08de9083be30的信息。表示构建镜像已经完成。构建完成后,执行docker images命名查看构建后的镜像:

REPOSITORY TAG IMAGE ID CREATED SIZE
automation/toolbox latest 08de9083be30 3 days ago 360.7 MB

启动Docker容器

执行docker run命令启动构建的镜像:
sudo docker run –rm -d -p 8002:8000 -v /var/log/toolbox:/opt/toolbox/log –name toolbox_server –restart=always automation/toolbox
上面这个命令的解释如下:
1、 –rm 表示每次启动容器时,删除旧的容器
2、-d 表示后台启动容器
3、-p 8002:8000 表示将Docker主机的8002端口与容器的8000接口绑定,这样访问Docker主机的8002端口时就相当于访问了容器内的8000端口。而容器内的8000端口正好是Flask应用提供的端口。
4、-v 表示将Docker主机的/var/log/toolbox目录与容器内的/opt/toolbox/log目录做映射。这样Flask应用在容器内产生的log文件就可以在主机的/var/log/toolbox目录里面直接读取了。
5、–name 选项给启动的容器起了一个名字
6、–restart=always表示当容器中的Flask应用停止或者崩溃时,要重新启动Docker容器
6、automation/toolbox是镜像的名字。

查看Docker容器

执行docker ps命令查看docer容器:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ce272d8960b4 automation/toolbox “/start_server.sh” 3 days ago Up 3 days 0.0.0.0:8002->8000/tcp toolbox_server1

管理Docker容器

下面的命令用于启动、停止、重启Docker容器:

$ docker stop toolbox_server1
$ docker start toolbox_server1
$ docker restart toolbox_server1

修改Gunicorn启动选项

Docker允许在容器启动时传递参数给容器中执行的命令,在本文中Docker容器启动时,执行的是start_server.sh。start_server.sh脚本中执行的是Gnicorn,因此传递参数给start_server.sh时,就相当于传递参数给Gnicorn了。比如要修改Gnicorn启动的线程数,可以这么做:
docker run automation/toolbox --workers 5

参考资料

http://michal.karzynski.pl/blog/2015/04/19/packaging-django-applications-as-docker-container-images/

在Docker容器中部署Flask应用:一步步的实践指南 Flask是一个灵活的Web应用框架,它没有默认的数据库、表单验证或任何其他具体功能,这使得开发者可以快速地开发简单的应用,同时也可以扩展构建复杂的应用。 阅读详情

相关推荐

从零到精通:用WDA+Python实现iOS自动化测试的完整工作流(含weditor定位技巧)

本文详细介绍了如何从零开始构建基于WDA和Python的iOS自动化测试完整工作流。内容涵盖环境搭建、核心依赖安装,并重点解析了使用weditor进行可视化元素定位的技巧与多种定位策略。通过实战案例展示了页面对象模型、等待策略等设计模式,旨在帮助测试工程师打造稳定、可维护的iOS自动化测试体系。

c8d9e0f1的博客 1051

docker_快速部署flask架构下的web容器

这个文件包含了构建 Docker 镜像所需的指令和配置。Dockerfile 定义了如何从基础镜像开始,逐步添加应用程序所需的所有组件(例如安装依赖、复制文件、设置环境变量等)。这是一个配置文件,通常用于存储应用的配置设置,比如数据库连接信息、应用环境(开发、测试、生产)等。在包含Dockerfile目录下 : 末尾的 . 表示当前目录下 通过Dockerfile文件来构建一个名为my-flask的容器。这是你的项目根目录,包含了所有与 Flask 应用相关的文件和配置。

qq_43527128的博客 1090

Serv-U 15.1.2安装使用

1.9 添加Serv-U到windows 防火墙的例外列表中 下一步。安装文件:SU-FTP-Server-Windows-v15.1.2。1.7 创建桌面图标,将Serv-U 作为系统服务安装。1.6 开始菜单添加快捷方式,下一步。1.4 接受许可协议,下一步。1.5 安装路径选择,下一步。1.8 确认设置信息,安装。1.3 安装向导,下一步。设置目录访问,设置群组等等。退出Serv_U,进入。

爱意随风起,人生不可弃。 1万+

Serv-U FTP服务器搭建全攻略:从内网到外网的完整配置流程

本文提供Serv-U FTP服务器从内网搭建到外网访问的完整配置指南。详细讲解了Serv-U软件的核心安装、精细化用户权限管理,并重点介绍了如何结合内网穿透工具(如快解析)实现无公网IP环境下的稳定外网访问,同时涵盖安全加固与性能优化等关键运维要点。

night的博客 934

ftp客户端源代码,使用VC+SOCKET编程,在SERV-U6.0服务器上测试通过,能断点续传

程序复杂,注释我就不多写了,函数名在上面,都是模块化的,可以随时调用#include #include #include #include #include #include typedef struct Hoststruct{ char HostName[128]; unsigned int HostIp;  char Hostport[32]; char UserName[128]; 

guokeno1--JEFF的技术博客 7597

FTP Serv-U密码问题

我们利用Serv-U的obdc功能,可以把FTP用户信息存在数据库中,这样对Web操作方便了很多。ServU密码加密算法为随机码与MD5 32 位加密,例如:两个随机字母:ab用户输入密码:123456生成的密码为: MD5(ab123456)MD5代码略Public function ServU(strpass) Randomize AA = chr(Int((97 - 122 + 1) *

子网'Blog 4257

Serv-U FTP服务器安装带绿化版工具

Serv-U是一个非常好的FTP服务器软件,它设置简单,功能强大,性能稳定。你现在就可以建立你自己的FTP服务器了。 设置简单,但功能却不错。做个人的 FTP 服务器是很好的选择。它并不是简单地提供文件的下载,还为用户的系统安全提供了相当全面的保护。 FTP server绿化版:百度网盘 提取码:bees 安装及绿化教程: 执行SU-FTP安装文件基本安装是默认。 创建图...

qq_45436217的博客 1808

Win10下Serv-U远程服务器的搭建如此简单

Serv-U 服务器通常部署在内网环境中,外部用户无法直接访问。为了解决这一问题,可以搭配内网穿透技术来解决。内网穿透通过将Seruv-U服务映射到公网,使得外部用户可以通过互联网访问内网资源。

qq_41369921的博客 1736

Windows Server企业级FTP搭建:Serv-U集成AD与MySQL认证实战

文件传输协议(FTP)是企业IT基础设施中实现文件共享的核心技术之一,其原理基于客户端-服务器模型,通过控制连接和数据连接完成文件的上传与下载。随着企业对数据传输安全与管理效率要求的提升,传统的明文FTP已无法满足需求,FTPS与SFTP等加密协议成为标准配置。其技术价值在于构建安全、可控、高效的文件交换通道,广泛应用于开发协作、数据分发、备份归档等场景。本文聚焦于在Windows Server环境下,利用专业的Serv-U FTP服务器软件,通过集成Windows Active Directory实现统一

weixin_33806859的博客 298

Windows Server FTP服务部署与Serv-U配置实战指南

文件传输协议(FTP)作为经典的网络文件交换标准,其核心原理基于客户端-服务器模型,通过独立的命令通道和数据通道实现文件的上传与下载。在技术价值层面,FTP协议因其简单、通用、兼容性广的特点,在企业内部数据交换、系统间文件同步等场景中,依然扮演着可靠传输层的角色。尤其在需要与遗留系统集成或进行大文件定点传输的工程实践中,部署于受控内网环境的FTP服务,能有效平衡易用性、可控性与成本。本文聚焦于在Windows Server环境下,利用Serv-U软件构建安全、稳定的企业级FTP服务,详细阐述了从网络规划、被

weixin_31710909的博客 308

Serv-u 外网访问FTP服务器指定其他端口

1. 背景简介 最近研究如何在内网搭架FTP服务器,同时要保证外网(公网)能访问的到。终成正果,但走了一些弯路,在此记下,以飨后人。 2. 基础知识 FTP 使用 2 个端口,一个数据端口和一个命令端口(也叫做控制端口)。这两个端口一般是21 (命令端口)和 20 (数据端口),当然你也可以自定义。控制 Socket 用来传送命令,数据 Socket 是用于传送数据。每一个 FTP 命令发送之后,FTP 服务器都会返回一个字符串,其中包括一个响应代码和一些说明信息。其中的返回码主要是用于判断命令是否被

Dxiaoqi 5129

serv-u 提权

主要提权方法: 一、serv-u ftp本地溢出权限提升(使用6.0以及以前版本) 1、用Serv-U提权综合工具生成提权工具serv_u.exe 2、先上传 serv_u.exe 到一个盘符下 比如是d盘 3、执行命令 d:\serv_u.exe 4、d:\serv_u.exe “net user username password /add” (注意命令要有引号) 5、d:\se

Is0Man的博客 4147

Serv-U 部署windows FTP

Serv-U 部署windows FTP 网络数据对接时,有的使用是时时API对接,而有的使用FTP服务器方式对接。正如我们和国外的交互信息都是使用FTP交换的。我们把数据放上去,国外拿下来,然后修改再放回去,我们再拿下来解析。 FTP的优点: 1. 跨语言的数据交互 2. 允许客户指定存储文件文件+文件大小+设置IP访问 3. 等。 当然也有缺点,单纯说数据交互来说,或者数据量比较大时是不错的选择。 如何使用Serv-U 在windows机器上部署FTP http://www.serv-u.com.cn

jzhanfeng123的博客 998

Serv-U搭建FTP后提示信息乱码解决

Serv-U搭建FTP后提示信息乱码解决

qq_43685346的博客 567

运用serv-u 、快解析搭建serveru ftp个人服务器方法教程

为了便于数据信息的共享和沟通,很多企业甚至个人都想搭建自己的ftp服务器,今天,小编在这里给大家推荐一种运用serv-u ftp server、快解析两种软件工具搭建serveru ftp个人服务器的方法。设置Serv-U的IP地址与域名,可以一路单击“下一步”跳过系统提示信息,来到“您的IP地址”窗口,输入本机的IP地址。现在就可以建立你自己的ftp服务器了,同时,如果搭配快解析专业软件使用,就可以可以实现个人ftp服务器的外部访问,对于现代化网络时代的办公,可以说是必须且必要的。

asdaddsd的博客 2445

Windows Server部署Serv-U FTP服务器:从规划到安全加固的完整指南

FTP(文件传输协议)作为经典的网络文件交换标准,其核心原理是通过客户端-服务器模型,在命令通道和数据通道上实现可靠的文件上传与下载。在需要可控、可审计的内部文件共享或系统间自动化数据交换场景中,自建FTP服务提供了云存储之外的重要基础设施选择。Serv-U作为一款成熟的商业FTP服务器软件,其技术价值在于为Windows Server环境提供了原生集成、功能全面且管理直观的解决方案,尤其擅长通过精细的目录访问规则和虚拟路径映射实现复杂的权限模型,并能通过FTPS加密、IP访问控制与详尽日志满足企业级安全与

weixin_33462927的博客 302

FTP服务器漏洞

题目 目标系统通过Serv-U搭建了一个FTP服务。请尝试利用软件的漏洞获取目标服务器系统的FLAG.txt文件内的flag值并提交。 题目分析 1.FTP服务器 (1)定义:FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。 FTP是File Transfer Protocol(文件传输协议)。顾名思...

qq_35266419的博客 3172

高分六号GF-6 WFV数据处理全流程:从原始数据解压到经纬度投影转换

本文详细解析了高分六号GF-6 WFV遥感数据的完整处理流程。从原始数据解压与分块结构理解入手,指导如何安装ENVI国产卫星支持工具进行自动拼接,并重点阐述了利用RPC模型进行正射校正以消除几何畸变,以及将UTM投影转换为地理经纬度坐标的关键步骤。文章旨在帮助用户高效地将原始卫星数据转化为可直接用于农业监测、生态环境分析等领域的标准地理空间图像。

weixin_29047919的博客 195
上一篇: Flask-WTF 示例
下一篇: Django之model admin自定义后台管理
SmallTankPy
博客等级 码龄10年 26粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值