当前位置: 首页 > news >正文

重温Docker 构建

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-network
    depends_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 SSL
    volumes:
      - ./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=8084
    networks:
      - app-network

  nginx:
    image: nginx:latest  # 使用官方 Nginx 镜像
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf  # 自定义 Nginx 配置
      - ./ssl:/etc/nginx/ssl  # 挂载 SSL 证书
    ports:
      - "80:80"  # HTTP
      - "443:443"  # HTTPS
    depends_on:
      - flask-app
      - emqx
    networks:
      - app-network

networks:
  app-network:
    driver: bridge
  • 简单示例
version: '3'

services:
  my-python-app:    # 会根据dockerfile创建image
    build: .
    expose:
      - "5000"  # 暴露给同一网络中的其他容器
    networks:
      - app-network

  nginx:
    image: nginx:latest
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf  # 挂载配置文件
    ports:
      - "80:80"  # 将容器的80端口映射到主机的80端口
    depends_on:
      - my-python-app  # 确保 Flask 容器启动后再启动 Nginx
    networks:
      - app-network

networks:
  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

相关文章:

  • 3110. 字符串的分数
  • java版嘎嘎快充玉阳软件互联互通中电联云快充协议充电桩铁塔协议汽车单车一体充电系统源码uniapp
  • Thinkphp(TP)漏洞攻略
  • python基础语法中的内置函数与拆包
  • 我的创作纪念日暨六年编程路的回顾
  • Select多路转接
  • 深入理解 Bitmap 索引:原理、场景与应用案例
  • ccf2202邻域均值
  • PostgreSQL并行化内容
  • API接口文档(人力资源管理系统)
  • 给网站配置https访问
  • JVM(基础篇)
  • gitlab将其他分支设置为master分支
  • 机器学习之回归
  • MOSN(Modular Open Smart Network)是一款主要使用 Go 语言开发的云原生网络代理平台
  • Java中static final才是修饰常量的,单独的final并不能修饰常量这样理解对吗?
  • 【Linux】线程基础
  • 全星FMEA软件系统——助力汽车部件行业高效管控质量风险
  • [计算机三级网络技术]第二章:中小型网络系统总体规划与设计方法
  • VSTO(C#)Excel开发进阶1:设计功能区Ribbon 对话框加载器 多个功能区 多个组
  • 杭州北京网站建设公司哪家好/最近三天的新闻大事
  • 网站建设有哪些常用行为/如何做免费网络推广
  • 淘宝联盟网站怎么做/郑州疫情最新情况
  • 罗湖网站建设优化/seo小白入门教学
  • wordpress网站名称函数/谷歌优化技巧
  • 教做幼儿菜谱菜的网站/大数据培训班需要多少钱