# Docker和Kubernetes常用命令(持续整理)

# 前言

本文将持续整理收集日常开发和调试用到的DockerKubernetes命令,希望对大家有用。

# 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:

kubectl Cheat Sheet (opens new window)

上次更新: 2023/8/18 23:39:36