Dockerfile 和 docker-compose.yml 是 Docker 生态中相互协作的两个核心文件,它们共同定义并启动了您的整个应用环境。
如以下Dockerfile
            
            
              bash
              
              
            
          
          # 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
            
            
              bash
              
              
            
          
          version: '3.8'
services:
  web:
    build: .
    ports:
      - "8000:8000"
    volumes:
      - ./data:/app/data
    environment:
      - DATABASE_URL=sqlite:///./data/reservoir_emissions.db
    restart: unless-stopped
    container_name: reservoir-emissions-tool1. 执行命令
            
            
              bash
              
              
            
          
          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 服务下的:
            
            
              bash
              
              
            
          
          build: .这条指令告诉 Docker Compose:"要运行这个服务,你必须先在当前目录(.)下找到 Dockerfile,并用它来构建一个镜像。"
2. Dockerfile 执行制造任务
Docker 接收到构建任务后,开始执行 Dockerfile 中的所有步骤:
- 
拉取基础系统: FROM python:3.11-slim
- 
安装依赖: RUN ... gcc和RUN pip install ...
- 
复制代码: COPY . .
- 
声明入口: 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 命令启动后,会读取这个变量来连接数据库。                         |   |   |   |