随着云计算与虚拟化技术的普及,Docker 技术已经成为现代应用程序开发、测试、部署与运维的重要工具之一。通过将代码、库、配置等打包成一个可移植的容器,Docker 提供了强大的隔离性、可重复性和可扩展性,方便开发者快速构建和部署应用程序,降低了 IT 管理和运维的成本和难度。
在前端应用程序中,Flask 是一种轻量级、灵活且易于使用的 Web 框架,它提供了路由、模板、会话管理、错误处理等基本功能,并支持多种插件、数据库、测试工具等扩展。结合 Docker 技术,我们可以快速搭建起一个可靠的 Flask 应用部署环境,让我们的程序更加高效、安全和稳定。
本文将介绍如何使用 Docker 部署 Flask 应用,涉及以下内容:
- Docker 安装与配置
- Flask 应用程序示例
- Dockerfile 文件编写与构建
- Docker Compose 文件编写与部署
- 镜像推送与其他操作
Docker 安装与配置
在 Linux 中安装 Docker 通常有两种方式,一种是使用包管理器,另一种是直接从官网下载安装包。在本文中,我们将以 Ubuntu 为例,介绍如何使用 apt-get 命令来安装 Docker。
首先,确保系统已经安装了 curl 工具:
$ sudo apt-get install curl
然后,使用 curl 下载 Docker 部署脚本:
$ curl -fsSL https://get.docker.com -o get-docker.sh
运行该脚本,安装 Docker:
$ sudo sh get-docker.sh
当安装完成后,使用下面的命令检查 Docker 版本:
$ docker version
如果输出了 Docker 版本信息,说明安装成功。
注意,在某些系统中,Docker 命令需要使用 sudo 权限才能正常运行。这时可以将当前用户加入 docker 组中,以免每次运行 Docker 命令都要输入 sudo 密码:
$ sudo usermod -aG docker $USER
然后注销并重新登录,使用户组的变化生效。
Flask 应用程序示例
为了方便演示,我们将创建一个简单的 Flask 应用程序,它只有一个路由和一个模板。首先,创建一个名为 app.py 的 Python 脚本,添加以下代码:
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def index():
return render_template("index.html")这个脚本导入了 Flask 库和渲染模板所需的 render_template 函数,创建了一个 Flask 应用实例 app,并定义了一个路由 /,它返回一个名为 index.html 的模板。我们需要创建 index.html 文件,并放在一个名为 templates 的目录下。可以使用如下命令快速创建目录和文件:
$ mkdir templates $ echo '<h1>Hello Flask!</h1>' > templates/index.html
这个文件只包含一个大标题,用来测试 Flask 是否能够正确地渲染它。接下来,我们需要在脚本末尾添加 main 函数和一个运行指令:
if __name__ == "__main__":
app.run(host="0.0.0.0")这个函数判断当前模块是否作为主模块运行,如果是,则启动 Flask 应用并监听所有的 IP 地址。这样就能在浏览器中访问该应用程序,并查看渲染后的模板了。
Dockerfile 文件编写与构建
为了将 Flask 应用程序打包成 Docker 容器,我们需要编写一个 Dockerfile 文件,它描述了容器镜像的构建过程。在当前目录下创建一个名为 Dockerfile 的文件,然后添加以下代码:
-- -------------------- ---- ------- ---- ---------------------- ----- ---------------- ---- ------------------ ------- ---- ---- ---------------- - --- --- ------- -------------- -- ---------------- ---- - - ------ ---- --- ---------- ---------
这个文件用了一个 Python 3.9 镜像作为基础镜像,添加了一个维护者信息(可选),设置了工作目录为 /app,将 requirements.txt 文件复制到容器中并执行 pip 安装所需的库,将当前目录下的所有文件复制到容器中,暴露了 Flask 应用程序使用的端口 5000,最后启动了 Flask 应用程序。
在当前目录下创建一个名为 requirements.txt 的文件,添加以下内容:
Flask==2.0.1
这个文件指定了 Flask 库的依赖版本。其他需要使用的库可以在这里添加。
现在,我们可以使用 Docker 命令来构建 Docker 镜像了。在当前目录下运行以下命令:
$ docker build -t myflaskapp .
这个命令指定了镜像的名称为 myflaskapp,使用当前目录下的 Dockerfile 文件来构建镜像,最后一个点表示当前目录为构建上下文。构建过程可能需要一段时间,视网络情况和本地多有镜像库等因素而异。当构建成功后,我们可以通过以下命令来查看新构建的镜像:
$ docker images myflaskapp
这个命令将列出所有的名为 myflaskapp 的镜像的基本信息,包括镜像 ID、大小、创建时间等。
Docker Compose 文件编写与部署
Docker Compose 是 Docker 官方提供的一个工具,它可以管理多个 Docker 容器实例的生命周期,简化多镜像应用程序的部署配置。在本文中,我们将使用 Docker Compose 文件来定义和部署 Flask 应用程序。
在当前目录下创建一个名为 docker-compose.yml 的文件,然后添加以下代码:
-- -------------------- ---- -------
-------- -----
---------
----
------ ----------
------
- -----------
-------- ------
------------
---------- ----------这个文件定义了一个服务名为 web 的容器实例,使用 myflaskapp 镜像作为基础镜像,并将容器的 5000 端口映射到宿主机的 5000 端口,在容器异常终止时自动重启,同时传递了 FLASK_ENV 环境变量为 production。这个环境变量用来告诉 Flask 应用程序处于生产环境下,可以关闭调试模式和自动重载功能。
现在,我们可以使用 Docker Compose 命令来启动和停止容器了。在当前目录下运行以下命令:
$ docker-compose up -d
这个命令将启动服务,并在后台运行。可以使用以下命令查看容器运行状态:
$ docker-compose ps
这个命令将列出所有的容器实例的基本信息,包括服务名、容器 ID、启动时间、状态等。
当需要停止和删除容器时,可以使用以下命令:
$ docker-compose down
这个命令将停止并删除所有的容器实例。
镜像推送与其他操作
当需要将 docker 镜像推送到镜像库时,可以使用 docker push 命令。需要先在 Docker Hub 或者其他的镜像库中创建一个项目,然后根据项目的名称、用户名、密码等信息,执行以下命令:
$ docker login $ docker tag myflaskapp myusername/myflaskapp $ docker push myusername/myflaskapp
这个命令登录到镜像库,将本地的 myflaskapp 镜像重命名为 myusername/myflaskapp,然后将镜像推送到库中。在其他机器上就可以直接拉取这个镜像进行部署了。
如果需要在容器内修改代码或者调试应用程序时,可以使用 docker exec 命令进入运行中的容器:
$ docker ps $ docker exec -it <container-id> /bin/bash
这个命令将列出当前运行的容器实例,并通过 /bin/bash 进入一个交互式的 shell 环境。在这里,可以访问容器内的文件、运行进程、查看日志等操作。
在进行设计和测试时,可以使用 docker-compose.yml 中的 build 指令来使用本地的 Dockerfile 构建镜像,而不是使用已经发布的镜像。这样可以快速修改和构建应用程序,并反复测试和调整,提高开发效率。
总的来说,使用 Docker 部署 Flask 应用程序具有很多优点,如快速部署、强大的隔离性和可移植性、可扩展性和可管理员控制性等。但是,在实际操作中,还需要注意一些细节问题,如镜像大小和优化、安全和权限管理、部署策略和监控等。希望本文对读者有所帮助,可以进一步深入学习和应用 Docker 技术。
Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/6780baeece7f48612546a240