Docker 常用指令
1、系统与服务管理
用于查看 Docker 版本、状态及系统级信息。
| 命令 | 说明 | 示例 |
|---|---|---|
| docker version | 查看 Docker 客户端和服务端版本信息 | docker version |
| docker info | 查看 Docker 系统详细信息(包括镜像/容器数量、驱动等) | docker info |
| systemctl start docker | 启动 Docker 服务 (Linux) | sudo systemctl start docker |
| systemctl stop docker | 停止 Docker 服务 (Linux) | sudo systemctl stop docker |
| systemctl restart docker | 重启 Docker 服务 (Linux) | sudo systemctl restart docker |
2、镜像管理 (Image)
镜像是容器的只读模板,以下指令用于获取、构建和管理镜像。
| 命令 | 说明 | 示例 |
|---|---|---|
| docker images | 列出本地所有镜像 | docker images |
| docker pull | 从仓库拉取镜像 | docker pull nginx:latest |
| docker build | 根据 Dockerfile 构建镜像 | docker build -t my-app:v1 . |
| docker rmi | 删除本地镜像 | docker rmi <image_id> |
| docker tag | 标记镜像(常用于推送到私有仓库前) | docker tag my-app:latest registry.com/my-app:v1 |
| docker push | 推送镜像到仓库 | docker push registry.com/my-app:v1 |
| docker save | 将镜像保存为 tar 归档文件 | docker save -o my-app.tar my-app:latest |
| docker load | 从 tar 归档文件加载镜像 | docker load -i my-app.tar |
| docker history | 查看镜像的构建历史层级 | docker history <image_id> |
3、容器生命周期管理 (Container)
这是日常使用最高频的部分,涉及容器的创建、运行、停止和删除。
3.1 创建与运行
docker run 是最核心的命令,常用参数如下:
-d: 后台运行(Detached mode)。
-p: 端口映射,格式为 宿主机端口:容器端口。
-v: 挂载数据卷,格式为 宿主机路径:容器路径。
--name: 指定容器名称。
-e: 设置环境变量。
--restart: 设置重启策略(如 always, on-failure)。
常用示例:
# 后台运行 Nginx,映射端口 8080:80,命名为 web-server
docker run -d -p 8080:80 --name web-server nginx
# 运行 MySQL,设置 root 密码,挂载数据卷
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /my/data:/var/lib/mysql --name mysql-db mysql:8.0
3.2 状态查询与控制
| 命令 | 说明 | 示例 |
|---|---|---|
| docker ps | 查看正在运行的容器 | docker ps |
| docker ps -a | 查看所有容器(包括已停止的) | docker ps -a |
| docker stop | 停止一个或多个运行中的容器 | docker stop <container_id> |
| docker start | 启动已停止的容器 | docker start <container_id> |
| docker restart | 重启容器 | docker restart <container_id> |
| docker rm | 删除已停止的容器 | docker rm <container_id> |
| docker kill | 强制停止容器(发送 SIGKILL 信号) | docker kill <container_id> |
3.3 容器内部操作与调试
| 命令 | 说明 | 示例 |
|---|---|---|
| docker exec | 在运行中的容器内执行命令 | docker exec -it <container_id> /bin/bash |
| docker logs | 查看容器日志 | docker logs -f <container_id> (实时跟踪) |
| docker inspect | 查看容器/镜像的详细底层信息 | docker inspect <container_id> |
| docker top | 查看容器内运行的进程 | docker top <container_id> |
| docker stats | 实时监控容器资源使用率 (CPU/Mem) | docker stats |
| docker cp | 在容器与主机之间复制文件 | docker cp <container_id>:/app/log.txt ./log.txt |
4、网络管理 (Network)
Docker 容器默认通过桥接网络通信,自定义网络可实现服务发现隔离。
| 命令 | 说明 | 示例 |
|---|---|---|
| docker network ls | 列出所有网络 | docker network ls |
| docker network create | 创建自定义网络 | docker network create my-net |
| docker network connect | 将容器连接到网络 | docker network connect my-net <container_id> |
| docker network disconnect | 断开容器与网络的连接 | docker network disconnect my-net <container_id> |
| docker network rm | 删除网络 | docker network rm my-net |
| docker network prune | 删除所有未使用的网络 | docker network prune |
5、数据卷管理 (Volume)
数据卷用于持久化容器数据,独立于容器生命周期存在。
| 命令 | 说明 | 示例 |
|---|---|---|
| docker volume ls | 列出所有数据卷 | docker volume ls |
| docker volume create | 创建数据卷 | docker volume create my-vol |
| docker volume inspect | 查看数据卷详细信息 | docker volume inspect my-vol |
| docker volume rm | 删除数据卷 | docker volume rm my-vol |
| docker volume prune | 删除所有未使用的数据卷 | docker volume prune |
6、系统清理与维护
随着开发进行,系统中会积累大量未使用的镜像、容器和网络,定期清理可释放磁盘空间。
| 命令 | 说明 | 注意 |
|---|---|---|
| docker system df | 查看 Docker 磁盘使用情况 | - |
| docker system prune | 清理所有未使用的容器、网络、悬空镜像 | 慎用,会删除停止的容器 |
| docker system prune -a | 深度清理,包括未使用的镜像 | 高危,会删除所有未被运行容器引用的镜像 |
| docker container prune | 仅清理已停止的容器 | - |
| docker image prune | 仅清理悬空镜像(无标签) | - |
7、Docker Compose (多容器编排)
虽然属于独立工具,但常与 Docker 配合使用,用于定义和运行多容器应用。
| 命令 | 说明 | 示例 |
|---|---|---|
| docker-compose up | 构建并启动服务 | docker-compose up -d (后台运行) |
| docker-compose down | 停止并移除容器、网络 | docker-compose down |
| docker-compose ps | 列出 Compose 项目中的容器 | docker-compose ps |
| docker-compose logs | 查看服务日志 | docker-compose logs -f web |
| docker-compose build | 构建或重新构建服务 | docker-compose build |
最佳实践建议
命名规范:尽量使用 --name 为容器指定有意义的名称,避免依赖随机生成的 ID。
资源限制:在生产环境中运行 docker run 时,建议使用 --memory 和 --cpus 限制容器资源,防止单个容器耗尽主机资源。
日志轮转:配置 Docker daemon 的日志驱动(如 json-file 配合 max-size),防止容器日志无限增长占满磁盘。
非 Root 运行:在 Dockerfile 中尽量使用 USER 指令切换到非 root 用户运行应用,提高安全性。