# Dockerfile 基础语法

URL: https://caijiao.org/docker/dockerfile/basics
Source: docs/docker/dockerfile/basics.md
Description: 本章节介绍 Dockerfile 的基本语法和常用指令，包括 FROM、RUN、COPY、CMD 等，用于构建自定义镜像和管理容器应用，帮助开发者快速上手 Docker 镜像构建。

Dockerfile 是构建 Docker 镜像的文本文件，定义了镜像的基础镜像、环境配置、应用代码和运行指令。

## 1. Dockerfile 基础结构

一个简单的 Dockerfile 示例：

```dockerfile
# 使用官方基础镜像
FROM ubuntu:22.04

# 作者信息
LABEL maintainer="yourname@example.com"

# 设置环境变量
ENV APP_HOME=/app

# 创建工作目录
WORKDIR $APP_HOME

# 拷贝本地文件到镜像
COPY . .

# 安装依赖
RUN apt-get update && apt-get install -y python3

# 容器启动时执行命令
CMD ["python3", "app.py"]
````

## 2. 常用指令

| 指令             | 功能                     |
| -------------- | ---------------------- |
| `FROM`         | 指定基础镜像，必须在文件首行         |
| `LABEL`        | 添加元数据，如作者、版本等          |
| `ENV`          | 设置环境变量                 |
| `WORKDIR`      | 设置工作目录                 |
| `COPY` / `ADD` | 拷贝文件到镜像，ADD 支持 URL 和解压 |
| `RUN`          | 构建镜像时执行命令              |
| `CMD`          | 容器启动时默认执行命令            |
| `ENTRYPOINT`   | 配合 CMD 定义入口点，增强可执行性    |
| `EXPOSE`       | 声明容器监听端口               |
| `VOLUME`       | 声明卷用于数据持久化             |
| `USER`         | 设置容器运行用户               |
| `ARG`          | 构建时参数                  |

## 3. 构建镜像

```bash
docker build -t myapp:1.0 .
```

* `-t` 指定镜像名称和标签
* `.` 指定 Dockerfile 所在目录

## 4. 启动容器

```bash
docker run -d -p 8080:80 myapp:1.0
```

* 使用构建的镜像启动容器
* 映射端口使服务可访问

## 5. 最佳实践

* 尽量使用官方基础镜像，减小镜像体积
* 合理使用 `RUN` 指令，减少镜像层数
* 使用 `.dockerignore` 排除无关文件，优化构建速度
* 将 CMD 与 ENTRYPOINT 结合，实现灵活启动

---

掌握 Dockerfile 基础语法，可以快速构建自定义镜像，并高效管理容器化应用。
