手把手教你使用Docker 和 Python Flask 框架构建你的第一个Web项目

1,737 阅读4分钟

image.png

猫猫震图

Docker是一个广泛使用的容器化平台,可用于部署和运行各种应用程序。使用Docker,您可以轻松地将应用程序打包成容器并在任何环境中运行,从而实现更高效的开发和部署。

在本文中,我们将学习如何使用Docker来发布我们的第一个Web项目。我们将使用Python Flask框架创建一个简单的Web应用程序,并将其打包成Docker容器。

步骤1:安装Docker

首先,您需要在本地计算机上安装Docker。Docker提供了适用于各种操作系统的安装程序。您可以从Docker官网下载并安装Docker。

步骤2:创建Python Flask应用程序

我们将使用Python Flask框架创建一个简单的Web应用程序。首先,创建一个名为“app.py”的Python文件,并使用以下代码编写应用程序:

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello, World!"

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

这个应用程序只是简单地返回“Hello, World!”,但它足以演示如何将一个Python Flask应用程序打包成Docker容器。

步骤3:编写Dockerfile

接下来,我们将编写一个Dockerfile,用于将Python Flask应用程序打包成Docker容器。在项目根目录下创建一个名为“Dockerfile”的文件,并使用以下代码编写Dockerfile:

# 使用官方 Python 基础镜像
FROM python:3.8-slim-buster

# 将工作目录设置为 /app
WORKDIR /app

# 将当前目录中的内容复制到 /app 中
COPY . /app

# 安装应用程序所需的依赖项
RUN pip install --no-cache-dir -r requirements.txt

# 暴露容器的端口
EXPOSE 5000

# 定义环境变量
ENV FLASK_APP=app.py

# 在容器启动时运行应用程序
CMD ["flask", "run", "--host=0.0.0.0"]

Dockerfile中的第一行指定了我们将使用官方Python 3.8基础镜像作为基础镜像。接下来,我们将工作目录设置为“/app”,并将当前目录中的所有文件复制到容器的“/app”目录中。然后,我们使用“pip”安装所需的依赖项,并暴露容器的端口。最后,我们定义了一个名为“FLASK_APP”的环境变量,并在容器启动时使用“flask run”命令来运行应用程序。

步骤4:构建Docker镜像

接下来,我们将使用Dockerfile来构建Docker镜像。在项目根目录下打开终端,并执行以下命令:

docker build -t my-flask-app .

该命令将使用当前目录中的Dockerfile文件,并为该文件创建一个名为“my-flask-app”的Docker镜像。请确保在命令的结尾包含一个点“.”,这表示使用当前目录作为构建上下文。

在镜像构建完成后,可以运行以下命令来查看所有可用的Docker镜像:

docker images

步骤5:运行Docker容器

现在,我们已经成功地将Python Flask应用程序打包成了Docker容器。接下来,我们将运行该容器并测试Web应用程序是否能够正常工作。

在终端中执行以下命令,运行Docker容器:

docker run -p 5000:5000 my-flask-app

该命令将在本地计算机上运行一个名为“my-flask-app”的Docker容器,并将容器的端口映射到本地计算机的端口5000。

现在,在Web浏览器中输入http://localhost:5000,您应该能够看到“Hello, World!”的消息。这表示我们已经成功地使用Docker发布了我们的第一个Web项目!

结论

Docker提供了一种简单且强大的方法来打包、部署和运行应用程序。通过使用Docker,我们可以轻松地将应用程序打包成容器,并在任何环境中运行。本文中,我们学习了如何使用Python Flask框架创建一个简单的Web应用程序,并将其打包成Docker容器。我们还学习了如何使用Dockerfile来定义容器,并使用Docker构建和运行容器。现在,您可以开始将您自己的Web应用程序打包成Docker容器,并在生产环境中部署它们!