Docker 与 Kubernetes 常用命令速查,含日常运维与故障排查。
Docker 基础命令
镜像(Image)
- 检索镜像
1
docker search image_name
- 下载镜像
1
docker pull image_name
- 列出镜像;
-a显示所有,-q仅显示 ID,--no-trunc不截断输出1
docker images
- 删除镜像;
-f强制,按 ID 或名称指定1
docker rmi image_name
- 查看镜像的历史
1
docker history image_name
- 查看镜像详细信息
1
docker inspect image_name
容器(Container)
容器可以理解为在沙盒中运行的进程。沙盒包含进程运行所必需的资源(文件系统、系统类库、shell 环境等),默认不运行任何程序。你需要运行一个进程来启动容器,该进程是容器的唯一进程,进程结束容器也随之停止。
- 运行容器执行命令
1
docker run image_name echo "hello world"
- 交互式进入容器
1
docker run -i -t image_name /bin/bash
- 列出运行中的容器
1
docker ps
- 列出所有容器(含已停止)
1
docker ps -a
- 列出最近一次启动的容器
1
docker ps -l
- 启动 / 停止 / 重启 / 杀死容器
1 2 3 4
docker start container_name docker stop container_name docker restart container_name docker kill container_name
- 删除容器;
-f强制,-v同时删除关联卷1
docker rm container_name
- 查看容器日志;
-f实时跟踪,-t显示时间戳,--tail N只看末尾 N 行1
docker logs -f container_name
- 显示运行中容器的进程信息
1
docker top container_name
- 查看容器内被改动的文件/目录(
A增加,D删除,C修改)1
docker diff container_name
- 在容器与宿主机之间拷贝文件
1 2
docker cp container_name:/container_path to_path docker cp ID:/container_path to_path
- 附加到运行中的容器(
Ctrl-C退出,容器内进程会收到信号)1
docker attach container_name
- 进入运行中的容器(推荐,比 attach 更灵活)
1
docker exec -it container_name /bin/bash
- 查看容器端口映射
1
docker port container_name
提交与发布
- 将容器固化为镜像(image 相当于类,container 相当于实例)
1
docker commit container_id new_image_name
- 登录 registry
1
docker login
- 推送镜像
1
docker push new_image_name
镜像迁移
把一台机器上的镜像迁移到另一台机器:
- 保存镜像为 tar 包
1
docker save image_name -o image.tar
- 从 tar 包加载镜像
1
docker load -i image.tar
- 或配合 scp 使用
1 2
docker save image_name > image.tar docker load < image.tar
构建镜像
- 根据 Dockerfile 构建镜像;
-t指定名称和标签,--no-cache不使用缓存,-q抑制输出1
docker build -t image_name Dockerfile_path
清理
- 停止所有容器
1
docker stop $(docker ps -a -q)
- 删除所有容器
1
docker rm $(docker ps -a -q)
- 删除所有镜像
1
docker rmi $(docker images -q)
- 删除悬空镜像(
<none>的 untagged 镜像)1
docker rmi $(docker images -f "dangling=true" -q)
- 清理不用的镜像、容器、网络、构建缓存(
-f跳过确认,慎用)1 2
docker system prune -af docker volume prune
Docker 运维与排查命令
常用运维命令
- 查看磁盘占用(镜像、容器、卷、构建缓存)
1
docker system df
- 查看容器/镜像资源占用(CPU、内存),
--no-stream只输出一次1 2
docker stats docker stats --no-stream
- 查看容器详情(JSON:环境变量、挂载、网络、健康状态)
1
docker inspect container_name
- 查看网络
1 2
docker network ls docker network inspect network_name
排查命令
- 容器启动失败/异常退出:看退出码与错误
1 2 3
docker inspect -f ' ' container_name docker logs container_name docker events --since 30m
- 容器不断重启:查看重启次数与健康检查状态
1 2
docker inspect -f '' container_name docker inspect -f '' container_name
- 端口映射与占用排查
1 2
docker ps -a --format 'table \t\t' ss -lntp | grep 8080
- 镜像拉取失败/认证失败:观察报错,确认仓库权限后重新登录
1 2
docker pull image_name docker login registry_host
- 容器内 DNS/网络不通
1 2 3
docker exec container_name cat /etc/resolv.conf docker exec container_name nslookup host docker network inspect network_name
Kubernetes(K8s)常用命令
资源查看
- 查看节点、Pod、Service 等资源;
-A全部命名空间,-o wide显示更多信息1 2 3 4 5
kubectl get nodes kubectl get nodes -o wide kubectl get pods -A kubectl get pods -n <ns> -o wide kubectl get svc,deploy,rs,cm,secret -n <ns>
- 查看资源详情(含 Events 调度信息)
1 2
kubectl describe pod <pod> -n <ns> kubectl describe node <node>
日志与进入容器
1
2
3
4
5
kubectl logs <pod> -n <ns>
kubectl logs -f --tail 100 <pod> -n <ns>
kubectl logs <pod> -c <container> -n <ns> # 多容器场景指定容器
kubectl exec -it <pod> -n <ns> -- /bin/sh
kubectl exec -it <pod> -c <container> -n <ns> -- /bin/sh
排查命令
- Pod 状态异常:常见 CrashLoopBackOff / ImagePullBackOff / Pending / Error
1 2 3
kubectl get pods -n <ns> # 先看状态 kubectl describe pod <pod> -n <ns> # 再看 Events kubectl get events --sort-by=.lastTimestamp -n <ns>
- CrashLoopBackOff:查看上一次崩溃的日志与退出码
1 2
kubectl logs --previous <pod> -n <ns> kubectl describe pod <pod> -n <ns> | grep -A5 ExitCode
- ImagePullBackOff:Events 会写明具体报错(镜像名拼写、仓库权限、认证)
- Pending:多为节点资源不足或调度失败
1 2
kubectl top nodes kubectl top pods -n <ns>
- 端口转发(调试用)
1 2
kubectl port-forward <pod> 8080:80 -n <ns> kubectl port-forward svc/<svc> 8080:80 -n <ns>
- 重启应用:Deployment 场景下滚动重建
1 2
kubectl rollout restart deploy/<name> -n <ns> kubectl delete pod <pod> -n <ns>
- 查看容器环境变量与配置
1 2
kubectl exec <pod> -n <ns> -- env kubectl get cm <name> -n <ns> -o yaml