# Docker和Kubernetes常用命令(持续整理)
# 前言
本文将持续整理收集日常开发和调试用到的Docker
和Kubernetes
命令,希望对大家有用。
# Docker常用命令
登陆仓库:
# 账号密码显示登陆
docker login --username xxx --password xxx nexus.pkslow.com:8081
# 密码保存在文件
docker login --username xxx --password-stdin < password.txt nexus.pkslow.com:8081
# 镜像管理
列出镜像:
docker images
docker images -a
拉取镜像:
docker pull grafana/grafana:4.0.0
删除镜像:
docker rmi imageId
docker rmi -f imageId
# 删除空悬镜像
docker rmi $(docker images -f "dangling=true" -q)
# 删除空悬镜像另一种形式
docker images -f "dangling=true" -q | xargs docker rmi
# 有选择地删除
docker images | grep tianchi| awk {'print $3'} | xargs docker rmi -f
# 查看更多细节
docker image inspect
通过Dockerfile创建镜像:
docker build -t pkslow/springboot:1.0.0 -f /xxx/Dockerfile /contextDir
导出镜像到文件(保留layer):
docker save -o ./pkslow.tar pkslow/springboot:1.0.0
从文件导入镜像:
docker docker load -i /opt/pkslow/pkslow.tar
导出容器到文件:
docker export containerId > ./springboot.tar
从上面文件导入镜像:
cat springboot.tar | docker import - pkslow/springboot
打新标签:
docker tag pkslow/springboot:latest nexus.pkslow.com/pkslow/springboot:3.6.6
推送镜像到远程仓库:
docker push nexus.pkslow.com/pkslow/springboot:3.6.6
# 容器管理
启动容器:
docker run -itd --name pkslow -p 8000:8080 -v /mylocal:/container-dir -e "SERVER_PORT=8080" pkslow/springboot:1.0.0
启动设置重启策略:
docker run --restart=always
更新容器重启策略:
docker update --restart=on-failure:10 redis
查看正在运行的容器:
docker ps
查看所有容器:
docker ps -a
查看日志:
docker logs containerId
docker logs -f containerId
到容器执行命令:
docker exec -it containerId /bin/bash
删除容器:
docker rm containerId
强制删除容器:
docker rm -f containerId
文件管理:
# 从宿主复制文件到Docker容器
docker cp pkslow/pkslow.txt 6619ff360cce:/opt/h2-data
# 从宿主复制目录到Docker容器
docker cp pkslow 6619ff360cce:/opt/h2-data
# 从容器复制文件或目录到宿主机器
docker cp 6619ff360cce:/opt/h2-data/pkslow ./
docker cp 6619ff360cce:/opt/h2-data/pkslow/pkslow.txt ./
# Kubernetes常用命令
查看:
# 查看Pod
kubectl get pods
# 查看services
kubectl get services
# 查看pvc
kubectl get pvc
# 查看ConfigMap
kubectl get configmaps
# 查看Ingress
kubectl get ingress
标签过滤:
# 显示标签
kubectl get pod -A --show-labels
# 列出某个标签的所有pod
kubectl get pod -A --show-labels -l 'myapp'
# 列出没有某个标签的pod
kubectl get pod -A --show-labels -l '!myapp'
# 列出特定标签值
kubectl get pod -A --show-labels -l 'myapp=nginx'
排序:
# 按名字排序
kubectl get services --sort-by=.metadata.name
# 根据重启次数排序
kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'
查看扩展信息:
kubectl get pods -o wide
扩容:
# 扩容rs
kubectl scale --replicas=3 rs/foo
# 如果当前为2个Pod,则扩容为3个
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql
# 同时扩容多个
kubectl scale --replicas=5 rc/foo rc/bar rc/baz
删除Pod:
kubectl delete pod podName
# 删除失败的Pod
kubectl get pods | grep Error | awk '{print $1}' | xargs kubectl delete pod
# 删除失败的Pod
kubectl delete pod $(kubectl get pods | grep Error | awk '{print $1}')
# 删除不在运行的Pod
kubectl delete pod --field-selector=status.phase!=Running
查看详情:
kubectl describe quota
kubectl describe pod podName
kubectl describe node docker-desktop
API方式操作资源:
# 指定文件
kubectl apply -f pkslow-springboot-deployment.yaml
# 指定目录
kubectl apply -f /opt/pkslow/k8s
查看日志:
kubectl logs podName
kubectl logs -f podName
进入Pod执行命令:
kubectl exec
查看配置信息:
kubectl config view
指定命令空间:
kubectl get pods -n pkslow-namespace
修改默认命令空间:
kubectl config set-context --current --namespace=pkslow-namespace
命令空间基本操作:
# 查看
kubectl get namespaces
# 创建
kubectl create namespace pkslow
# 删除
kubectl delete namespace pkslow
查看命名空间下所有资源:
kubectl get all --namespace={namespace}
# 或者
kubectl api-resources -o name --verbs=list --namespaced | xargs -n 1 kubectl get --show-kind --ignore-not-found -n {namespace}
删除命名空间下所有资源(强制删除--force --grace-period=0
):
kubectl delete all --all -n {namespace}
# 或
kubectl delete ns {namespace}
文件管理:
# 从客户端复制文件或目录到Pod
kubectl cp pkslow.txt h2-db-5967bf999f-8qr87:/opt/h2-data
kubectl cp pkslow h2-db-5967bf999f-8qr87:/opt/h2-data
# 从Pod复制文件回来
# 目标目录要指定,与源文件类型匹配
$ kubectl cp default/h2-db-5967bf999f-8qr87:/opt/h2-data/pkslow ./pkslow
# 目标文件要指定,与源文件类型匹配
$ kubectl cp default/h2-db-5967bf999f-8qr87:/opt/h2-data/pkslow.txt ./pkslow.txt
查看集群的Resources:
kubectl api-resources
查看Events:
kubectl get events --sort-by=.lastTimestamp
Reference: