使用Docker Compose配置Python Flask应用并绑定自定义IP地址

在当今的软件开发中,容器化技术已经成为提高开发效率和部署一致性的重要工具。Docker作为容器化技术的代表,极大地简化了应用的打包、分发和运行。而Docker Compose则进一步简化了多容器应用的编排和管理。本文将详细介绍如何使用Docker Compose配置一个Python Flask应用,并将其绑定到自定义IP地址。

前提条件

  1. 安装Docker:确保你的系统中已安装Docker。你可以从Docker官网下载并安装。
  2. 安装Docker Compose:Docker Compose通常随Docker Desktop一起安装,如果没有,可以从Docker Compose GitHub页面下载安装。
  3. Python环境:虽然我们将使用Docker来运行Python应用,但在开发过程中,本地有Python环境会更为方便。

步骤一:创建Flask应用

首先,我们需要创建一个简单的Flask应用。假设我们的项目目录结构如下:

my_flask_app/
├── app.py
├── requirements.txt
└── docker-compose.yml

app.py

from flask import Flask

app = Flask(__name__)

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

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

requirements.txt

Flask==2.0.1

步骤二:编写Dockerfile

为了将Flask应用容器化,我们需要编写一个Dockerfile。在项目根目录下创建一个名为Dockerfile的文件,内容如下:

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

# 设置工作目录
WORKDIR /app

# 复制当前目录内容到工作目录
COPY . /app

# 安装依赖
RUN pip install -r requirements.txt

# 暴露5000端口
EXPOSE 5000

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

步骤三:编写docker-compose.yml

接下来,我们需要编写docker-compose.yml文件来定义和运行多容器应用。

docker-compose.yml

version: '3.8'

services:
  flask_app:
    build: .
    ports:
      - "5000:5000"
    networks:
      - custom_network
    environment:
      - FLASK_ENV=development

networks:
  custom_network:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.28.0.0/16
          gateway: 172.28.0.1

在这个配置文件中,我们定义了一个名为flask_app的服务,使用了自定义网络custom_network,并指定了子网172.28.0.0/16和网关172.28.0.1

步骤四:绑定自定义IP地址

为了将Flask应用绑定到自定义IP地址,我们需要在docker-compose.yml中进一步配置网络设置。假设我们希望将Flask应用绑定到172.28.0.10这个IP地址,可以在services部分添加extra_hosts配置。

修改后的docker-compose.yml

version: '3.8'

services:
  flask_app:
    build: .
    ports:
      - "5000:5000"
    networks:
      custom_network:
        ipv4_address: 172.28.0.10
    environment:
      - FLASK_ENV=development

networks:
  custom_network:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.28.0.0/16
          gateway: 172.28.0.1

通过添加ipv4_address: 172.28.0.10,我们确保了Flask应用在启动时绑定到指定的IP地址。

步骤五:启动应用

一切配置就绪后,我们可以使用以下命令启动应用:

docker-compose up --build

总结

通过以上步骤,我们成功使用Docker Compose配置了一个Python Flask应用,并将其绑定到了自定义IP地址。这不仅展示了Docker和Docker Compose的强大功能,也为复杂应用的容器化部署提供了参考。希望这篇文章能帮助你更好地理解和应用容器化技术,提升你的开发效率。