重温Docker 构建

server/2025/3/31 5:51:19/

Dockerfile

  • 单镜像生成
# 使用 Python 3.13-slim 作为基础镜像
FROM python:3.13-slim# 设置工作目录
WORKDIR /app# 复制要求的依赖文件到容器内
COPY requirements.txt /app/# 安装 Python 依赖
RUN pip install --no-cache-dir -r requirements.txt# 复制源代码到容器内
COPY . /app/# 设置环境变量(可选)
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0# 暴露 Flask 服务的端口
EXPOSE 5000# 使用 Gunicorn 启动 Flask 应用
# app:app:格式为 <module>:<application>。
# 第一个 app 是模块名(即包含 Flask 应用实例的 Python 文件名,不包括 .py 扩展名)。
# 第二个 app 是 Flask 应用实例的变量名
#(即在 app.py 文件中定义的 app = Flask(__name__) 中的 app)
CMD ["gunicorn", "--config", "gunicorn_config.py", "app:app"]

docker-compose

  • 多镜像综合管理
version: '3'services:flask-app:build:context: ./app  # 这里指向 Flask 应用代码目录,即 Dockerfile 所在目录image: flask-app:latest  # 使用构建好的 flask-app 镜像volumes:- ./app:/app  # 将代码目录挂载到容器,便于实时更新代码ports:- "8000:8000"  # 暴露 Flask 应用端口networks:- app-networkdepends_on:- emqx  # Flask 应用依赖 EMQX 服务emqx:image: emqx/emqx:latest  # 使用官方 EMQX 镜像ports:- "1883:1883"  # MQTT 默认端口- "8883:8883"  # MQTT over SSL- "8083:8083"  # WebSocket 默认端口- "8084:8084"  # WebSocket over SSLvolumes:- ./ssl:/opt/emqx/ssl  # 挂载 SSL 证书environment:- EMQX_LISTENER__TCP__DEFAULT=1883- EMQX_LISTENER__SSL__DEFAULT=8883- EMQX_LISTENER__WS__DEFAULT=8083- EMQX_LISTENER__WSS__DEFAULT=8084networks:- app-networknginx:image: nginx:latest  # 使用官方 Nginx 镜像volumes:- ./nginx.conf:/etc/nginx/nginx.conf  # 自定义 Nginx 配置- ./ssl:/etc/nginx/ssl  # 挂载 SSL 证书ports:- "80:80"  # HTTP- "443:443"  # HTTPSdepends_on:- flask-app- emqxnetworks:- app-networknetworks:app-network:driver: bridge
  • 简单示例
version: '3'services:my-python-app:    # 会根据dockerfile创建imagebuild: .expose:- "5000"  # 暴露给同一网络中的其他容器networks:- app-networknginx:image: nginx:latestvolumes:- ./nginx.conf:/etc/nginx/nginx.conf  # 挂载配置文件ports:- "80:80"  # 将容器的80端口映射到主机的80端口depends_on:- my-python-app  # 确保 Flask 容器启动后再启动 Nginxnetworks:- app-networknetworks:app-network:driver: bridge# 构建
docker-compose up --build
# 后台运行
docker-compose up -d
# 重启nginx,这个是yml里的名字
docker-compose restart nginx
# 进入到nginx里
docker exec -it helloproj_nginx_1 bash
# 再nginx里访问容器
curl http://my-python-app:5000


http://www.ppmy.cn/server/179729.html

相关文章

【Linux文件IO】Linux中标准IO的API的描述和基本用法

Linux中标准IO的API的描述和基本用法 一、标准IO相关API1、文件的打开和关闭示例代码&#xff1a; 2、文件的读写示例代码&#xff1a;用标准IO&#xff08;fread、fwrite&#xff09;实现文件拷贝(任何文件均可拷贝) 3、文件偏移设置示例代码&#xff1a; 4、fgets fputs fget…

【软件测试】:软件测试实战

1. ⾃动化实施步骤 1.1 编写web测试⽤例 1.2 ⾃动化测试脚本开发 common public class AutotestUtils {public static EdgeDriver driver;// 创建驱动对象public static EdgeDriver createDriver(){// 驱动对象已经创建好了 / 没有创建if( driver null){driver new EdgeDr…

Spring Boot 连接 MySQL 配置参数详解

Spring Boot 连接 MySQL 配置参数详解 前言参数及含义常用参数及讲解和示例useUnicode 参数说明&#xff1a; 完整配置示例注意事项 前言 在 Spring Boot 中使用 Druid 连接池配置 MySQL 数据库连接时&#xff0c;URL 中 ? 后面的参数用于指定连接的各种属性。以下是常见参数…

Docker+Ollama+Xinference+RAGFlow+Dify+Open webui部署及踩坑问题

目录 一、Xinference部署 &#xff08;一&#xff09;简介 &#xff08;二&#xff09;部署 &#xff08;三&#xff09;参数 &#xff08;四&#xff09;错误问题 &#xff08;五&#xff09;Xinference配置Text-embedding模型 &#xff08;六&#xff09;Xinference配…

mysqloracledb2 (uuid函数)

项目场景&#xff1a; 创建一个32位的UUID 问题描述 原因分析&#xff1a; 解决方案&#xff1a; mysql内置UUID函数 SELECT UUID(); SELECT UUID_SHORT();oracle内置UUID函数 SELECT sys_guid() FROM dual;db2&#xff0c;模拟UUID函数 SELECT TEST || substr (CONCAT…

MySQL的查询语句练习

单表查询部分&#xff1a; 素材&#xff1a; 表名&#xff1a;worker-- 表中字段均为中文&#xff0c;比如 部门号 工资 职工号 参加工作 等CREATE TABLE worker (部门号 int(11) NOT NULL,职工号 int(11) NOT NULL,工作时间 date NOT NULL,工资 float(8,2) NOT NULL,政治面貌…

使用ZMQ和protobuf实现C++程序与Python程序的通信

文章目录 背景一 应用场景与需求二 Protobuf: 跨语言数据交换的基石三 通信方案 ZMQ (ZeroMQ) —— 高性能消息中间件四 进阶: 安全性与性能优化五 实践例子: 工厂温度监控系统5.1 场景描述5.2 Protobuf数据结构定义5.3 C数据采集与发布5.4 Python数据接收与可视化5.5 关键实现…

Apache Shiro 统一化实现多端登录(PC端移动端)

Apache Shiro 是一个强大且易用的Java安全框架&#xff0c;提供了身份验证、授权、密码学和会话管理等功能。它被广泛用于保护各种类型的应用程序&#xff0c;包括Web应用、桌面应用、RESTful服务、移动端应用和大型企业级应用。 需求背景 在当今数字化浪潮的推动下&#xff…