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

【Docker技术】docker-compose.yml与Dockerfile解析

Dockerfiledocker-compose.yml 是 Docker 生态中相互协作的两个核心文件,它们共同定义并启动了您的整个应用环境。

如以下Dockerfile

# Use lightweight Python image
FROM python:3.11-slim# Set working directory
WORKDIR /app# Install system dependencies (minimal)
RUN apt-get update && apt-get install -y --no-install-recommends \gcc \&& rm -rf /var/lib/apt/lists/*# Copy requirements first for better caching
COPY requirements.txt .# Install Python dependencies
RUN pip install --no-cache-dir -r requirements.txt# Copy application code
COPY . .# Create directory for database
RUN mkdir -p /app/data# Expose port
EXPOSE 8000# Run the application
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

docker-compose.yml

version: '3.8'services:web:build: .ports:- "8000:8000"volumes:- ./data:/app/dataenvironment:- DATABASE_URL=sqlite:///./data/reservoir_emissions.dbrestart: unless-stoppedcontainer_name: reservoir-emissions-tool

1. 执行命令

docker compose up --build -d

--build (强制重建): Docker 忽略本地已有的镜像缓存,重新执行 Dockerfile 中的所有指令,构建一个新的镜像。

up (服务启动): 使用新构建的镜像,创建名为 reservoir-emissions-tool 的容器实例,并设置好端口映射和数据卷挂载。

-d (后台运行): 容器在后台(detached mode)启动并运行,将控制台释放给您,让您可以继续使用命令行。

文件角色关键指令
docker-compose.yml服务定义与配置build: .
Dockerfile镜像构建步骤

FROM、RUN、COPY 等

当您运行 docker compose up --build -d 时,Compose 工具会读取 docker-compose.yml 文件。它看到 web 服务下的:

build: .

这条指令告诉 Docker Compose:“要运行这个服务,你必须先在当前目录(.)下找到 Dockerfile,并用它来构建一个镜像。”

2. Dockerfile 执行制造任务

Docker 接收到构建任务后,开始执行 Dockerfile 中的所有步骤:

  1. 拉取基础系统: FROM python:3.11-slim

  2. 安装依赖: RUN ... gccRUN pip install ...

  3. 复制代码: COPY . .

  4. 声明入口: CMD ["uvicorn", ...]

这一系列步骤的结果,就是一个名为 reservoir-emissions-tool_web (默认名称) 的 Docker 镜像,这个镜像就是您应用的“可执行包”。

默认自动命名规则:

当您在 docker-compose.yml 中使用 build: . 而没有明确指定 image: 字段时,Docker Compose 会自动生成一个名称,格式通常是:

<项目目录名>_<服务名>

  • 项目目录名: 假设您的 docker-compose.yml 位于 IPCC-Tier-2 文件夹下。

  • 服务名:docker-compose.yml 中,您服务的名字是 web

所以,当您运行 docker compose up --build -d 时,生成的镜像名称通常会是:ipcc-tier-2_web

3. docker-compose.yml 运行配置环境

镜像构建完成后,Docker Compose 使用这个新镜像来启动容器,同时应用 docker-compose.yml 中定义的运行时环境配置

配置项作用

对应 Dockerfile 的声明

ports: "8000:8000"外部访问:将容器的 8000 端口映射到宿主机。

对应 Dockerfile 中的 EXPOSE 8000 声明(让外部知道容器会用到这个端口)。

volumes: ./data:/app/data数据持久化:将本地目录挂载到容器内的 /app/data。

对应 Dockerfile 中的 RUN mkdir -p /app/data(确保容器内存在该目录)。

environment: DATABASE_URL=...配置注入:告诉应用数据库在哪。

应用的 CMD 命令启动后,会读取这个变量来连接数据库。

http://www.dtcms.com/a/462301.html

相关文章:

  • C++兼容性规则
  • 数据中台与数据生态:组织与平台的双轮驱动
  • 建站行业如何快速成第一单上海it公司有哪些
  • linux kernel v6.18 PCIe新增sysfs节点显示serial number
  • 音乐介绍网站怎么做天眼查网站建设公司
  • Quartz 定时 7 篇精选:从 32.768 kHz 到 100+ MHz(可视化与工具)
  • 苏州新区城乡建设网站怎么在百度上免费做广告
  • 开源金融数据平台的架构革命:OpenBB Platform深度技术解析
  • 西安买公司的网站建设荣耀手机品牌介绍
  • 树的遍历算法
  • 360做网站吗用哪个登录网址最好
  • nginx+springboot+redis+mysql+elfk
  • 基于springboot的在线商城系统设计与开发
  • Python自动化测试实战:深度解析Scripts脚本层结构!
  • 天津住房和城乡建设建造师网站与市场营销有关的网站
  • 系统移植篇之uboot-2:编译微观实验
  • 第一章 网络基础
  • 建筑网站起名东道设计公司logo
  • LC175 组合两个表
  • 个人怎么注册网站网站301跳转
  • MongoDB 集合更新后通过 Socket.IO 自动推送数据到前端 (FastAPI 实现)
  • 东胜网站建设医疗网站前置审批查询
  • windows如何设置mongodb的副本集
  • 物流网站有哪些网站被做301跳转了怎么办
  • shell脚本命令删除Zookeeper提供者服务中的指定IP节点
  • 六安网站制作公司价格龙口网络
  • Node.js使用Express框架解决中文乱码问题
  • 设计模式--桥接模式:解耦抽象与实现的灵活设计
  • 做竞价的网站怎么做网站数据库备份
  • 基于FireBeetle 2 ESP32-C5的智能植物光照系统——物联网农业实践