Docker容器操作完全指南:run/exec/ps/stop/rm 五大命令精讲
一、前言
要使用Docker,学会Docker常用的命令是我们必须掌握的知识,这里带大家了解Docker的run/exec/ps/stop/rm 五大命令精讲
二、核心命令深度解析
2.1 docker run
- 容器生命起点
关键参数解析:
# 基础启动
docker run -d --name web -p 8080:80 nginx:alpine
# 高级配置
docker run -it --rm \
-v /host/data:/container/data:ro \
--memory="512m" --cpus="1.5" \
--env MYSQL_ROOT_PASSWORD=secret \
mysql:8.0
参数 | 作用描述 | 使用频率 |
---|---|---|
-d | 后台运行(detach模式) | ★★★★★ |
--name | 指定容器名称(唯一标识) | ★★★★★ |
-p | 端口映射(主机:容器) | ★★★★★ |
-v | 卷挂载(主机路径:容器路径) | ★★★★★ |
--rm | 退出后自动删除容器 | ★★★★☆ |
-e /--env | 设置环境变量 | ★★★★☆ |
--network | 指定容器网络 | ★★★☆☆ |
经典场景:
场景1:调试模式启动
docker run -it --entrypoint=/bin/sh node:18
# 进入容器后手动启动应用
场景2:资源限额运行
docker run -d --name redis-limited \
--memory="1g" --memory-swap="2g" \
--cpus="2" --blkio-weight="500" \
redis:7
2.2 docker exec
- 进入运行中容器
操作模式对比:
模式 | 命令示例 | 适用场景 |
---|---|---|
交互式shell | docker exec -it web sh | 调试/配置变更 |
单次命令执行 | docker exec web nginx -t | 检查配置有效性 |
特权模式 | docker exec --privileged | 调试内核级问题 |
用户权限控制:
# 以root身份执行
docker exec -u 0 web whoami # 输出:root
# 以普通用户执行
docker exec -u 1000 web whoami # 输出:UID 1000用户
2.3 docker ps
- 容器状态监控
输出格式化:
# 自定义列显示
docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"
# JSON格式输出
docker ps -a --format '{{json .}}' | jq
过滤技巧:
# 按名称过滤
docker ps -f "name=web"
# 按状态过滤
docker ps -f "status=exited"
# 按标签过滤
docker ps -f "label=environment=prod"
2.4 docker stop
- 优雅终止容器
停止过程解析:
- 发送SIGTERM信号 → 等待默认10秒
- 若进程未退出 → 发送SIGKILL强制终止
超时调整:
docker stop -t 30 web # 给予30秒清理时间
批量操作:
# 停止所有运行中的容器
docker stop $(docker ps -q)
2.5 docker rm
- 容器清理艺术
删除策略:
# 安全删除(需先停止)
docker rm web
# 强制删除运行中容器
docker rm -f web
# 清理所有已停止容器
docker container prune
数据保全技巧:
# 删除前备份数据卷
docker run --volumes-from web -v $(pwd):/backup busybox \
tar czvf /backup/web_data.tar.gz /path/to/data
三、命令组合实战
3.1 全生命周期操作示例
# 1. 启动容器
docker run -d --name demo -p 3000:3000 node-app:v1
# 2. 查看状态
docker ps -f "name=demo"
# 3. 进入容器调试
docker exec -it demo bash
# 4. 停止容器
docker stop demo
# 5. 删除容器
docker rm demo
3.2 生产环境问题诊断流程
# 查看容器日志
docker logs --tail 100 -f app
# 进入容器检查进程
docker exec app ps aux
# 检查网络连接
docker exec app netstat -tulpn
# 导出核心转储
docker exec app gcore -o /tmp/core.dump <PID>
四、高阶操作技巧
4.1 容器热更新
# 1. 启动新版本容器
docker run -d --name app-v2 --network=app-net app:v2
# 2. 切换流量(通过服务发现或负载均衡器)
curl -X POST http://gateway/switch?version=v2
# 3. 保留旧版本以便回滚
docker stop app-v1 && docker rm app-v1
4.2 容器检查点
# 创建检查点
docker checkpoint create web checkpoint-202405
# 从检查点恢复
docker start --checkpoint checkpoint-202405 web
五、常见问题排障指南
5.1 容器启动失败
症状:docker run
后立即退出
排查步骤:
- 查看日志:
docker logs <container-id>
- 检查退出码:
docker inspect --format='{{.State.ExitCode}}' <container-id>
- 交互式调试:
docker run -it --entrypoint=/bin/sh <image>
5.2 端口冲突处理
解决方案:
# 查找占用端口的进程
sudo lsof -i :8080
# 或者直接停止冲突容器
docker stop $(docker ps -qf "publish=8080")
附:命令速查手册
操作目标 | 命令模板 | 关键参数说明 |
---|---|---|
启动MySQL容器 | docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=pass -v /data/mysql:/var/lib/mysql mysql:8 | -e设置环境变量,-v挂载数据卷 |
调试Python应用 | docker exec -it pyapp python debug.py | -it进入交互模式 |
批量清理容器 | docker rm -f $(docker ps -aq) | -f强制删除,-a查询所有容器 |
查看实时资源消耗 | docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" | 自定义监控指标 |
最佳实践:始终为容器命名(–name),使用–rm避免僵尸容器,生产环境务必设置资源限制(–memory, --cpus)!