# Docker 常用命令总结

## 🐳 容器生命周期管理

### 容器操作
```bash
# 运行容器
docker run [选项] 镜像名 [命令]
docker run -d --name myapp -p 8080:80 nginx  # 后台运行并命名
docker run -it ubuntu bash  # 交互式运行

# 启动/停止/重启容器
docker start 容器名/ID
docker stop 容器名/ID
docker restart 容器名/ID

# 暂停/恢复容器
docker pause 容器名/ID
docker unpause 容器名/ID

# 删除容器
docker rm 容器名/ID
docker rm -f 容器名/ID  # 强制删除运行中的容器
docker container prune  # 删除所有停止的容器

# 查看容器
docker ps      # 查看运行中的容器
docker ps -a   # 查看所有容器
docker ps -aq  # 查看所有容器ID
```

### 容器信息
```bash
# 查看日志
docker logs 容器名/ID
docker logs -f 容器名/ID  # 实时跟踪日志
docker logs --tail 100 容器名/ID  # 查看最后100行

# 查看容器信息
docker inspect 容器名/ID
docker stats  # 查看资源使用情况
docker top 容器名/ID  # 查看容器进程
```

## 📦 镜像管理

```bash
# 搜索镜像
docker search 镜像名

# 拉取镜像
docker pull 镜像名:标签
docker pull nginx:latest

# 查看镜像
docker images
docker image ls

# 删除镜像
docker rmi 镜像名/ID
docker rmi -f 镜像名/ID  # 强制删除
docker image prune  # 删除悬空镜像
docker image prune -a  # 删除所有未使用镜像

# 构建镜像
docker build -t 镜像名:标签 .
docker build -f Dockerfile.dev -t myapp:dev .

# 保存/加载镜像
docker save -o 文件名.tar 镜像名
docker load -i 文件名.tar

# 导出/导入容器
docker export 容器名 > 容器名.tar
docker import 容器名.tar 镜像名:标签
```

## 🔄 容器与主机交互

```bash
# 进入容器
docker exec -it 容器名/ID bash
docker exec -it 容器名/ID sh

# 复制文件
docker cp 主机文件路径 容器名:容器内路径
docker cp 容器名:容器内路径 主机文件路径

# 端口映射查看
docker port 容器名/ID
```

## 🌐 网络管理

```bash
# 网络操作
docker network ls
docker network create 网络名
docker network inspect 网络名
docker network connect 网络名 容器名
docker network disconnect 网络名 容器名
docker network prune  # 删除未使用的网络

# 运行容器指定网络
docker run --network=网络名 镜像名
docker run --network=host 镜像名  # 使用主机网络
```

## 💾 数据卷管理

```bash
# 数据卷操作
docker volume ls
docker volume create 卷名
docker volume inspect 卷名
docker volume rm 卷名
docker volume prune  # 删除未使用的卷

# 使用数据卷
docker run -v 卷名:容器内路径 镜像名
docker run -v 主机路径:容器内路径 镜像名
docker run --mount type=bind,source=主机路径,target=容器内路径 镜像名
```

## 🏷️ 标签与清理

```bash
# 标签操作
docker tag 源镜像名:标签 新镜像名:标签

# 系统清理
docker system df  # 查看磁盘使用
docker system prune  # 清理所有未使用资源
docker system prune -a  # 更彻底清理（包括未使用的镜像）
```

## 🛠️ 实用组合命令

```bash
# 批量停止所有容器
docker stop $(docker ps -aq)

# 批量删除所有容器
docker rm $(docker ps -aq)

# 批量删除所有镜像
docker rmi $(docker images -q)

# 清理所有未使用资源
docker system prune -a -f

# 查看容器IP地址
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名

# 一键进入最新创建的容器
docker exec -it $(docker ps -lq) bash
```

## ⚙️ 常用选项说明

| 选项 | 说明 |
|------|------|
| `-d` | 后台运行（守护进程模式） |
| `-it` | 交互式终端 |
| `-p` | 端口映射 `主机端口:容器端口` |
| `-v` | 卷挂载 `主机路径:容器路径` |
| `-e` | 设置环境变量 |
| `--name` | 为容器指定名称 |
| `--rm` | 容器退出时自动删除 |
| `--network` | 指定网络 |
| `--restart` | 重启策略（always, on-failure等） |

## 📝 使用建议

1. **命名容器**：总是使用 `--name` 为容器命名，便于管理
2. **使用数据卷**：重要数据应保存在数据卷中，而不是容器内
3. **标签管理**：为镜像打上有意义的标签
4. **清理策略**：定期使用 `prune` 命令清理未使用资源
5. **日志查看**：使用 `docker logs` 调试容器问题
6. **组合命令**：将常用命令写入脚本或使用 docker-compose

记住这些命令可以帮助你高效地使用 Docker 进行容器化管理！