# Docker 速查

## 镜像与容器

镜像是只读模板，容器是运行实例；run 常用短横 d 后台、短横 p 映射端口、短横 v 挂载、短横 e 注入环境变量，exec 进容器排查。容器删掉后内部改动就没了，要留数据必须挂卷。

```bash
docker run -d -p 8080:80 nginx
```

## Dockerfile 指令

基础镜像指令打底，工作目录指令设路径，复制与运行指令按层缓存；先单独拷依赖清单再装依赖，改代码时不必重装，默认进程用 CMD 指定。别用 latest 标签，构建结果将不可复现。

```docker
FROM php:8.3-fpm-alpine
WORKDIR /app
```

## 多阶段构建

用 AS 分阶段，最终镜像只从构建阶段拷产物，编译器和开发依赖不会进入运行时镜像，体积通常能减掉一大半。配合忽略文件排除依赖目录和版本库，构建上下文能小很多，推送也更快。

```docker
FROM node:22-alpine AS build
```

## docker compose

一份文件编排多服务，依赖顺序参数控制启动先后，环境变量段注入配置，具名卷在卷段统一声明。顺序只保证启动先后，不保证服务已就绪，连接重试还得应用自己处理，别省这一步。

```docker
services:
  web:
    build: .
```

## 网络与卷

自定义网络让容器按服务名互访，具名卷由 Docker 管理适合存数据库，绑定挂载把宿主机目录映射进去适合本地改代码。默认桥接网络里容器只能靠 IP 互访，别把端口全暴露到宿主机上。

```bash
docker network create appnet
```

## 常用排错

按状态、日志、进容器、资源占用的顺序排查，inspect 看详细配置，compose config 校验语法，最后再清理无用镜像。启动即退出多半是主进程跑完，stats 能看是否内存打满被杀掉。

```bash
docker compose config
```
