使用 Docker 容器化部署 Python 应用

class Docker

使用 Docker 容器化部署 Python 应用是现代开发中常见的实践。Docker 提供了一种将应用及其依赖打包成容器的方式,保证在任何环境下都能一致地运行。下面是一个从创建 Dockerfile 到部署 Python 应用的详细指南。

1. 准备 Python 应用

首先,你需要一个 Python 应用。在这个例子中,我们使用一个简单的 Flask 应用作为示例。

创建一个新的目录并进入该目录:

mkdir my-python-app
cd my-python-app

创建一个简单的 app.py 文件:

# app.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, Docker!'

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

创建一个 requirements.txt 文件来管理依赖:

echo "Flask==2.3.2" > requirements.txt

2. 创建 Dockerfile

Dockerfile 是 Docker 用来构建镜像的配置文件,描述了从基础镜像开始如何设置环境、安装依赖以及运行应用。

my-python-app 目录中创建一个名为 Dockerfile 的文件,并添加以下内容:

# 使用官方的 Python 镜像作为基础镜像
FROM python:3.11-slim

# 设置工作目录
WORKDIR /app

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

# 安装 Python 依赖
RUN pip install --no-cache-dir -r requirements.txt

# 暴露容器内部使用的端口
EXPOSE 5000

# 运行应用
CMD ["python", "app.py"]

3. 构建 Docker 镜像

使用 Dockerfile 构建镜像:

docker build -t my-python-app .

这个命令会根据 Dockerfile 的配置构建一个名为 my-python-app 的镜像。-t 标志指定镜像的标签名。

4. 运行 Docker 容器

使用构建的镜像运行容器:

docker run -d -p 5000:5000 my-python-app
  • -d 表示在后台运行容器(detach mode)。
  • -p 5000:5000 将主机的 5000 端口映射到容器的 5000 端口。

现在你可以通过浏览器访问 http://localhost:5000,看到 "Hello, Docker!" 的输出。

5. 将镜像推送到 Docker Hub

如果你想在其他环境下运行这个镜像,可以将其推送到 Docker Hub。

首先,你需要登录 Docker Hub:

docker login

给镜像打上标签以便推送到 Docker Hub(替换 your-username 为你的 Docker Hub 用户名):

docker tag my-python-app your-username/my-python-app

将镜像推送到 Docker Hub:

docker push your-username/my-python-app

现在,你可以在任何支持 Docker 的地方拉取并运行这个镜像:

docker run -d -p 5000:5000 your-username/my-python-app

6. 部署到云服务器

在云服务器上安装 Docker 后,执行以下步骤:

  1. 拉取镜像:

    docker pull your-username/my-python-app
    
  2. 运行容器:

    docker run -d -p 80:5000 your-username/my-python-app
    

这里我们将容器的端口映射到服务器的 80 端口,以便通过 http://your-server-ip 访问应用。

7. Docker Compose(可选)

如果你的应用依赖于多个服务(例如数据库),你可以使用 Docker Compose 来定义和管理这些服务。

创建一个 docker-compose.yml 文件:

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/app

使用以下命令启动所有服务:

docker-compose up -d

总结

通过 Docker 容器化部署 Python 应用,能够确保应用在任何环境下都能一致运行。利用 Dockerfile 构建镜像、通过 Docker Hub 分发镜像,再通过 Docker 或 Docker Compose 进行部署,使得应用的开发、测试、部署和运维过程更加简洁、高效。

评论区
评论列表
menu