前言
本文整理了 Docker 和 Kubernetes 最常用的命令,方便日常开发和运维工作中快速查阅。
一、Docker 常用命令
1.1 镜像管理
docker search nginx
docker pull nginx:latest
docker pull nginx:1.24
docker images
docker image ls
docker rmi nginx:latest
docker image rm nginx
docker save -o nginx.tar nginx:latest
docker load -i nginx.tar
1.2 容器管理
docker run -d --name my-nginx -p 80:80 nginx
docker ps
docker ps -a
docker inspect my-nginx
docker logs my-nginx
docker logs -f my-nginx
docker stop my-nginx
docker start my-nginx
docker restart my-nginx
docker rm my-nginx
docker rm -f my-nginx
1.3 容器交互
docker exec -it my-nginx bash
docker exec my-nginx cat /etc/nginx/nginx.conf
docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf
docker cp ./nginx.conf my-nginx:/etc/nginx/nginx.conf
1.4 网络管理
docker network ls
docker network create my-network
docker network connect my-network my-nginx
docker network disconnect my-network my-nginx
1.5 数据卷
docker volume create my-volume
docker volume ls
docker volume rm my-volume
1.6 资源限制与统计
docker run -m 512m --cpus=1.0 nginx
docker stats
docker stats my-nginx
docker pause my-nginx
docker unpause my-nginx
docker inspect --format='{{.State.Health.Status}}' my-nginx
1.7 镜像构建
docker build -t myapp:v1 .
docker build -t myapp:v2 -f Dockerfile.prod .
docker history nginx:latest
docker inspect nginx:latest
1.8 系统管理
docker info
docker version
docker system prune -a
docker system prune -a --volumes
docker system df
二、Kubernetes (kubectl) 常用命令
2.1 集群管理
kubectl cluster-info
kubectl get nodes
kubectl describe node <node-name>
kubectl version --client
kubectl version --short
2.2 资源管理
kubectl get pods
kubectl get pods --all-namespaces
kubectl get pods -n kube-system
kubectl api-resources
kubectl get all
kubectl describe pod <pod-name>
kubectl edit pod <pod-name>
kubectl delete pod <pod-name>
kubectl delete svc <service-name>
kubectl delete deployment <deployment-name>
2.3 Pod 管理
kubectl run nginx --image=nginx
kubectl get pods
kubectl describe pod nginx
kubectl logs nginx
kubectl logs -f nginx
kubectl logs nginx -c <container-name>
kubectl exec -it nginx -- bash
kubectl exec nginx -- ls /
kubectl delete pod nginx
2.4 Deployment 管理
kubectl create deployment nginx --image=nginx
kubectl scale deployment nginx --replicas=3
kubectl get deployments
kubectl describe deployment nginx
kubectl set image deployment/nginx nginx=nginx:1.24
kubectl rollout undo deployment nginx
kubectl rollout status deployment nginx
kubectl rollout history deployment nginx
2.5 Service 管理
kubectl expose pod nginx --port=80 --type=NodePort
kubectl expose deployment nginx --port=80 --type=LoadBalancer
kubectl get svc
kubectl describe svc nginx
kubectl get endpoints
2.6 StatefulSet 和 DaemonSet 管理
kubectl get statefulsets
kubectl get sts
kubectl scale statefulset web --replicas=3
kubectl describe statefulset web
kubectl get daemonsets
kubectl get ds
kubectl edit daemonset flannel -n kube-flannel
kubectl describe daemonset kube-proxy -n kube-system
2.7 Ingress 管理
kubectl get ingress
kubectl get ing
kubectl create ingress ing1 --rule=foo.com/bar=svc1:8080,tls=foo-tls
kubectl describe ingress ing1
kubectl edit ingress ing1
2.8 存储管理
kubectl get pv
kubectl get pvc
kubectl get sc
kubectl apply -f pvc.yaml
kubectl describe pv pv-name
2.9 配置管理
kubectl create configmap my-config --from-file=config.txt
kubectl get configmaps
kubectl get cm
kubectl describe configmap my-config
kubectl edit configmap my-config
kubectl create secret generic my-secret --from-literal=key=value
kubectl create secret tls tls-secret --cert=path/to/cert.crt --key=path/to/cert.key
kubectl get secrets
kubectl get secrets -a
kubectl get secret my-secret -o jsonpath='{.data.password}' | base64 -d
2.10 命名空间
kubectl get ns
kubectl create namespace my-namespace
kubectl run nginx --image=nginx -n my-namespace
kubectl delete namespace my-namespace
kubectl config set-context --current --namespace=my-namespace
2.11 标签与选择器
kubectl label pod nginx app=backend
kubectl label node node1 disk=ssd
kubectl get pods --show-labels
kubectl get pods -l app=nginx
kubectl get pods -l app!=nginx
kubectl get pods -l 'app in (nginx,redis)'
kubectl get pods -l 'app notin (nginx,redis)'
kubectl label pod nginx app-
kubectl delete pods -l app=nginx
2.12 输出格式化
kubectl get pods -o wide
kubectl get pods -o json
kubectl get pods -o yaml
kubectl get pods -o custom-columns=NAME:.metadata.name,IP:.status.podIP
kubectl get pods --sort-by=.metadata.name
kubectl get pods -o jsonpath='{.items[*].metadata.name}'
kubectl get all -o wide
2.13 资源配额与限制
kubectl create quota my-quota --hard=cpu=1,memory=1G,pods=2
kubectl describe quota
kubectl create limitrange my-limits --max=cpu=1,memory=1G --min=cpu=0.1,memory=128Mi
kubectl describe limits
2.14 高级操作
kubectl diff -f deployment.yaml
kubectl wait --for=condition=Ready pod/nginx
kubectl wait --for=jsonpath='{.status.phase}'=Running pod/nginx
kubectl top nodes
kubectl top pods -n kube-system
kubectl get events --sort-by=.metadata.creationTimestamp
kubectl get events -n kube-system --watch
kubectl get --raw /metrics
kubectl apply -f deployment.yaml --dry-run=server
2.15 YAML 文件管理
kubectl apply -f deployment.yaml
kubectl create -f deployment.yaml
kubectl delete -f deployment.yaml
kubectl apply -f deployment.yaml --dry-run=client
kubectl apply -f deployment.yaml --dry-run=client -o yaml
2.16 故障排查
kubectl describe pod <pod-name>
kubectl logs <pod-name>
kubectl logs -f <pod-name>
kubectl logs <pod-name> --previous
kubectl logs <pod-name> -c <container-name>
kubectl logs <pod-name> --all-containers=true
kubectl logs --tail=100 <pod-name>
kubectl logs --since=1h <pod-name>
kubectl get pods -o wide
kubectl port-forward pod/nginx 8080:80
kubectl port-forward svc/nginx 8080:80
kubectl port-forward pod/nginx 8000 8100
kubectl debug -it <pod-name> --image=busybox
kubectl top nodes
kubectl top pods
kubectl get events --sort-by=.metadata.creationTimestamp
kubectl get events -n kube-system --watch
kubectl logs -l app=nginx --all-containers=true
kubectl wait --for=condition=Ready pod/nginx --timeout=60s
三、常用技巧
3.1 自动补全
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc
echo "source <(kubectl completion zsh)" >> ~/.zshrc
source ~/.zshrc
3.2 别名设置
alias k='kubectl'
alias kgp='kubectl get pods'
alias kgs='kubectl get svc'
alias kdp='kubectl delete pod'
alias kcp='kubectl create pod'
3.3 上下文管理
kubectl config current-context
kubectl config get-contexts
kubectl config use-context <context-name>
kubectl config set-context --current --namespace=my-namespace
kubectl config delete-context <context-name>
kubectl config rename-context <old-name> <new-name>
3.4 批量操作
kubectl delete pods -l app=nginx
kubectl rollout restart deployment/nginx
kubectl label pods -l app=v1 app=v2 --all
kubectl get all -n my-ns -o yaml > backup.yaml
kubectl apply -f ./manifests/
kubectl delete -f ./manifests/
3.5 性能优化
kubectl logs <pod-name> --tail=10
kubectl get pods --request-timeout=5s
kubectl get pods --cache-dir=/tmp/kubectl-cache
kubectl get pods --compress=true
四、命令对比
| 操作 |
Docker |
Kubernetes |
| 运行容器 |
docker run |
kubectl run |
| 查看容器/Pod |
docker ps |
kubectl get pods |
| 查看日志 |
docker logs |
kubectl logs |
| 进入容器 |
docker exec |
kubectl exec |
| 停止容器 |
docker stop |
kubectl delete pod |
| 查看镜像 |
docker images |
kubectl get pods -o wide |
五、实战示例
5.1 部署 Nginx 应用
kubectl create deployment nginx --image=nginx:latest
kubectl scale deployment nginx --replicas=3
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get svc nginx
kubectl get svc nginx -o jsonpath='{.spec.ports[0].nodePort}'
5.2 滚动更新
kubectl set image deployment/nginx nginx=nginx:1.24
kubectl rollout status deployment nginx
kubectl rollout pause deployment nginx
kubectl rollout resume deployment nginx
kubectl rollout undo deployment nginx
kubectl rollout undo deployment nginx --to-revision=2
5.3 调试 Pod
kubectl get pods
kubectl describe pod <pod-name>
kubectl logs <pod-name>
kubectl logs -f <pod-name>
kubectl exec -it <pod-name> -- bash
kubectl copy ./local.txt <pod-name>:/path/
kubectl copy <pod-name>:/path/file.txt ./local.txt
5.4 完整部署流程
kubectl create namespace myapp
kubectl create configmap app-config --from-file=config.properties -n myapp
kubectl create secret generic app-secret --from-literal=db-password=secret123 -n myapp
kubectl create deployment myapp --image=myapp:v1 -n myapp
kubectl scale deployment myapp --replicas=3 -n myapp
kubectl expose deployment myapp --port=8080 --type=LoadBalancer -n myapp
kubectl get all -n myapp
kubectl logs -l app=myapp -n myapp --all-containers=true
六、常见问题与解决方案
6.1 Pod 一直处于 Pending 状态
kubectl describe pod <pod-name>
6.2 镜像拉取失败
kubectl describe pod <pod-name> | grep Image
6.3 容器崩溃重启
kubectl get pods
kubectl logs <pod-name> --previous
kubectl describe pod <pod-name> | grep exit code
6.4 网络连接问题
kubectl exec -it <pod-name> -- ping <target-ip>
kubectl get endpoints <service-name>
kubectl exec -it <pod-name> -- nslookup <service-name>
七、最佳实践
7.1 资源管理
kubectl set resources deployment nginx --limits=cpu=1,memory=512Mi --requests=cpu=0.5,memory=256Mi
kubectl create namespace dev
kubectl create namespace prod
7.2 安全最佳实践
kubectl run nginx --image=nginx --security-context=runAsUser=1000
kubectl apply -f network-policy.yaml
7.3 监控与日志
kubectl top nodes
kubectl top pods --all-namespaces
kubectl logs -l app=myapp --all-containers=true > app.log
kubectl get all -o yaml > backup.yaml
八、速查表总结
Docker 核心命令
| 操作 |
命令 |
| 运行容器 |
docker run |
| 查看容器 |
docker ps |
| 停止容器 |
docker stop |
| 删除容器 |
docker rm |
| 查看镜像 |
docker images |
| 删除镜像 |
docker rmi |
| 查看日志 |
docker logs |
| 进入容器 |
docker exec |
| 构建镜像 |
docker build |
Kubernetes 核心命令
| 操作 |
命令 |
| 查看 Pod |
kubectl get pods |
| 查看 Pod 详情 |
kubectl describe pod |
| 查看日志 |
kubectl logs |
| 进入 Pod |
kubectl exec |
| 创建部署 |
kubectl create deployment |
| 扩展副本 |
kubectl scale deployment |
| 更新镜像 |
kubectl set image |
| 暴露服务 |
kubectl expose |
| 应用配置 |
kubectl apply -f |
| 删除资源 |
kubectl delete |
参考资源