bingmous

欢迎交流,不吝赐教~

导航

Docker、Kubernetes命令清单

Docker

官网文档:https://docs.docker.com/reference/

docker命令

# docker是作为系统服务运行的,可以直接使用systemctl操作
systemctl status/stop/start/restart/enable/disable docker

帮助命令

# 帮助命令
docker version # 显示docker的版本信息
docker info    # 显示docker的系统信息,包括镜像和容器的数量
docker --help  # 帮助命令,https://docs.docker.com/reference/

镜像相关

# 镜像相关
docker images              # 查看镜像
    # -a 列出所有镜像
    # -q 只显示镜像id
    # --no-trunc 不截取id
docker search <name[:tag]> # 搜索镜像 --filter=STARS=3000 --limit n
docker pull image[:tag]    # 下载镜像
docker rmi -f <name/id>             # 删除多个镜像空格隔开
docker rmi -f $(docker images -qa)  # 删除所有镜像
docker commit -a="author" -m="description" <name/id> <newName[:TAG]>  # 根据当前容器生成新的镜像
docker image inspect <name/id>     # 显示镜像详细信息

# 构建镜像
docker build -t new_name .            # 对当前目录进行构建镜像 默认使用Dockerfile
    # -f path/to/dockerfile # 指定Dockerfile
docker tag old_name new_name      # 重命名镜像

# 保存、加载镜像
docker save -o xxx.tar xxx/xxx:1.1  # 将镜像保存成tar文件,可以保存多个镜像到一个tar包,相同的基础镜像只占用一份空间
docker load -i xxx.tar              # 从tar文件加载镜像

# 远程推送
docker login                       # 登录自己的id, logout退出
docker push szhang/kubia           # 推送镜像 推送前需要登录 需要将名字改成仓库要求的名字

运行相关

# 运行容器
docker run [options] IMAGE [command] [args ...]
    # --name="name" 指定容器名字,--name Name, --name=Name
    # -d     # 后台方式运行
    # -it    # 使用交互式方式运行
    # -p <主机端口:容器端口>
    # -p <ip:主机端口:容器端口>
    # -p <容器端口>
    # -P                    # 随机指定端口映射到容器内部端口
    # -v <主机目录:容器目录> # 挂载,目录不存在会自动创建,还可以加<主机目录:容器目录:ro>只读权限,默认rw,可以使用多个-v进行配置,如果有权限问题,可以增加--privileged=true,本地目录必须以/或./开头,否则会被认为是数据卷名称
    # -v <容器目录> # 使用匿名挂载
    # -e <Name>=<value>     # 指定环境变量
    # --rm                 # 用完就删
	# --restart=always # 是否自启动 默认no
docker exec [options] CONTAINER COMMAND [args ...]
docker exec -it <name/id> /bin/bash # 创建交互式伪终端,并执行bash命令,使用新终端,可以使用--表示命令结束,后面的命令是宿主机的命令
docker exec 1c cat /hi.txt -- | xargs echo >> abc.txt # 在容器中执行命令,将输出写入宿主机的文件中
docker attach <name/id> # 进入容器当前正在执行的终端,不会启动新的终端

# 更新容器配置 不能修改暴露的端口
docker update <name/id> --restart=always

# 删除容器
docker rm <name/id>    # 删除容器,删除多个空格隔开
    # -f               # 强制删除容器
docker rm -f $(docker ps -aq)       # 删除所有容器
docker ps -aq | xargs docker rm -f  # 删除所有容器

# 启动、停止、重启、杀死、退出容器
exit                        # 退出当前容器,终端也退出
Ctrl + P + Q                # 退出当前容器,不退出终端
docker start <name/id>     # 启动容器
docker restart <name/id>   # 重启容器
docker stop <name/id>      # 停止容器,停止主进程,容器还在,可以再启动
docker kill <name/id>      # 强制杀死容器

docker export <name/id> > xx.tar # 导出当前容器为归档文件
docker import xx.tar  # 将容器导出的归档文件再次导入

# 拷贝数据
docker cp <name/id>:<path> <path> # 从容器拷贝数据到主机
docker cp <path> <name/id>:<path> # 从主机拷贝到容器内部

数据卷

# 运行一个镜像时添加数据卷 -v参数
docker run -v /host/path:/container/path <name/id> # 参考docker run命令
docker volume --help    # 查看docker卷
docker volume ls  # 查看所有的卷(-v <内部路径> 是匿名挂载, -v <name:内部路径> 是具名挂载)
	# rm 删除指定卷
	# create 创建数据卷
docker volume proune  # 删除所有不再使用的卷(容器已经被删除)
docker volume inspect <name>    # 查看卷详情,查看具名和匿名挂载的路径(没有指定目录的都在/var/lib/docker/volumes/xxx/_data下)

查看容器运行状态、网络、日志

# 查看正在运行的容器
docker ps    # 显示当前正在运行的容器
    # -a     # 显示所有运行过的容器
    # -q     # 只显示容器的id
    # -n 5   # 显示最近运行的5个容器
    # -l     # 列出最近运行的容器
    # --no-trunc    # 不截断输出
	# --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}" 指定格式输出

docker top <name/id>    # 查看容器中的进程,相当于容器内使用ps
docker stats <name/id>  # 查看cpu,内存状态
docker system df  # 查看镜像/容器/数据卷占用磁盘情况

# 查看docker网络
docker network ls # 查看有哪些网络
docker network create my_network_name  # 创建一个网络,默认是bridge模式
    # --network MODE # 指定模式 bridge host none container:name
docker network --help   # 查看docker网络的帮助命令
docker network connect <network_name> <container_name>  # 将容器连接上自定义网络

# 查看容器日志
docker logs <name/id>
docker logs -tf -n 10 <name/id>
    # -f 跟随查看
    # -t 显示时间戳
    # -n 10 显示的行数,--tail 10

inspect命令查询详细信息(镜像、容器、卷、网络)

# 查看元数据inspect
docker inspect <name/id> # 显示容器详细信息,ip,mac,port等
docker image inspect <name/id>     # 显示镜像详细信息
docker volume inspect volume_id  # 查看卷的详细信息
docker history <name/id>        # 查看镜像历史,即查看docker镜像的每一层都是什么
docker network inspect <network_id> # 查看docker网络详细信息

Kubernetes

kubectl命令

# 用法:kubectl [command] [type] [name] [flags]
# command:指定对资源的操作,如create/get/delete/describe/run
# type:指定操作的资源类型,大小写敏感,支持单数、复数、缩写形式
# name:指定资源的名称,大小写名称,如果不写,则显示所有资源,如kubectl get pods
# flags:可选参数

# 使用帮助可以查看具体的用法
kubectl --help # 查看所有命令
kubectl <command> --help # 查看指定命令的帮助
kubectl options # 查看全局的命令行选项(所有命令都可以使用)

# 基础命令(初级)
create	# 创建资源 从文件或标准输入
expose	# 将replication controller, service, deployment or pod暴露为一个新的k8s服务
run		# 运行一个具体的镜像
set		# 在对象上设置具体的特性

# 基础命令(中级)
explain	# 显示资源的文档
get		# 显示一个或多个资源
edit	# 编辑server上的一个资源
delete	# 删除资源 by filenames, stdin, resources and names, or by resources and label selector

# 部署命令
rollout	# 管理资源的推出
scale	# 设置新的容量 for a Deployment, ReplicaSet or Replication Controller
autoscale	# 自动扩缩容 Deployment, ReplicaSet, StatefulSet, or ReplicationController

# 集群管理命令
certificate	# 修改证书资源
cluster-info	# 显示集群信息
top		# 显示资源使用率(cpu/内存)
cordon	# 标记一个节点不可调度
uncordon	# 标记一个节点可以调度
drain	# 移出节点上所有的资源 为进入维护做准备?
taint	# 更新节点的污点

# 问题定位和调试命令
describe	# 显示一个具体资源或一组资源的详情
logs	# 打印pod中一个容器的日志
attach	# 进入一个正在运行的容器
exec	# 在一个容器中执行命令
port-forward	# 转发一个或多个本地端口到pod
proxy	# 运行一个到apiserver的代理
cp		# 在容器和宿主机之间进行拷贝文件或目录
auth	# 检查授权
debug	# 创建一个debug会话 来定位负载和节点

# 高级命令
diff	# 查看正在运行的八百和将要运行的版本的差异
apply	# 应用一个配置到某个资源 通过文件或者标准输入
patch	# 更新一个资源的一个字段
replace	# 替换一个资源 通过文件名或者标准输入
wait	# 实验特性:等待资源的一个具体的条件
kustomize	# 从目录或url构建一个定制的目标

# 设置命令
label	# 更新一个资源的标签
annotate	# 更新一个资源的注解
completion	# 对具体的shell(bash or zsh) 输出shell补全代码

# 其他命令
api-resources	# 打印支持的api资源
api-versions	# 打印支持的api版本 group/version形式
config	# 修改kubeconfig文件
plugin	# 提供与插件交互的工具
version	# 打印client和server的版本信息

运行相关

# 运行镜像
kubectl run kubia --image=szhang/kubia --port=80 --generator=run-pod/v1 # 运行一个镜像,只创建pod
kubectl run kubia --image=szhang/kubia --port=80 # 会自动创建deployment,rs,pod,删除时需要删除deployment

# 暴露服务
kubectl expose rc kubia --type=LoadBalancer --name kubia-http # 创建服务,需要暴露创建pod的rc, rc是replicationcontroller的缩写
kubectl expose deploy hello --port 1000 --target-port 2000 # 默认type是ClusterIP,port是服务端口,target-port是pod端口,不指定name使用与deploy相同的名字
kubectl expose rs # rs必须是顶层控制资源,否则无效,比如deployment,也会创建rs,这时暴露rs无效

# 在pod中执行命令
kubectl exec kubia-xxxx --curl -s http:/xxxx # 在任意pod中执行命令,--指kubectl命令的结束,也不是必须,防止-s产生歧义
kubectl exec -it curl-with-ambassador -c main bash # -c 指明在哪个容器中运行,默认在第一个容器中
kubectl attach # 与exec类似,会附属到容器主进程,后者会创建一个新进程
# 扩容
kubectl scale rc kubia --replicas=3 # 改变rc期望的副本数,或者直接修改rc
kubectl scale rs
kubectl scale deploy # 如果是由高级资源控制的,必须修改高级资源才有效
kubectl scale job multi-completion-batch-job --replicas 3 # 在job运行时更改并行数
kubectl scale -f xxx.yaml --replicas 2 # 配置文件创建的用-f修改

# 删除资源
kubectl delete -f flannel.yml # 删除部署的资源
kubectl delete pod kubia-gpu # 按名称删除pod,也可以同时删除多个,空格隔开
kubectl delete pod kubia-0 --force --grace-period 0 # 强制删除pod,不需要等待确认信息,节点网络断开永远也无法收到确认信息
kubectl delete pod --all # 删除所有pod
kubectl delete ns custom-namespace # 删除命名空间,其下的pod将自动删除
kubectl delete all --all # 删除命名空间中所有资源rc、pod、svc,第一个all指定所有资源类型,第二个--all指定删除所有资源实例而不是按名称指定它们。(并非所有资源都会被删除)
kubectl delete rc kubia # 删除ReplicationsController及pod
kubectl delete rc kubia --cascade=false # 只删除rc,不删除pod
kubectl delete rs kubia # 删除ReplicaSet及pod
kubectl delete pvc mongodb-pvc # 删除pvc
kubectl delete deploy hello # 删除deployment hello,rs和pod也会被删除

# 宿主机端口与pod通信
kubectl port-forward kubia-manual 8888:8080 # 将一个或多个本地端口转发到pod

# 创建资源
kubectl create namespace custom-namespace # 创建命名空间
kubectl create -f kubia-manual.yam1 -n custom-namespace # 创建资源时指定命名空间
# 创建资源:ConfigMap
kubectl create configmap fortune-config --from-literal=sleep-interval=25 # 创建一个简单地ConfigMap,多个--from-literal创建多个条目
kubectl create configmap my-config --from-file=config.conf # 在当前目录下查找config-file.conf文件作为ConfigMap
kubectl create configmap my-config --from-file=mykey=config.conf # 重新定义key而不是文件名
kubectl create configmap my-config --from-file=/path/to/dir # 为目录下的每一个合法文件名创建一个条目
# 创建资源:secret
kubectl create secret generic forune-https --from-file=https.key --from-file=https.cert --from-file=foo # 从三个文件创建secret
# 创建资源:Deployment
kubect1 create -f kubia-deployment-vl.yaml --record # 创建Deployment,确保使用--record,记录历史版本号, 在之后的操作中非常有用

# 更新资源的方式:
kubectl edit rc kubia # 编辑rc kubia, export KUBE_EDITOR="/usr/bin/nano"可以修改默认编辑器
kubect1 edit configmap fortune-config # 编辑ConfigMap
kubectl patch deployment kubia -p '{"spec": {"minReadySeconds": 10}}' # 减慢升级速度,使用patch修改少数资源,无须通过编辑器编辑
kubectl set image deployment kubia nodejs=luksa/kubia:v2 # 更改任何包含容器资源的镜像rc、
rs、Deployment等),kubia为pod名字,nodejs为容器名字,对某个pod的某个容器的镜像进行修改

kubectl apply -f kubia-ingress-tls.yaml # 应用新的值来修改对象,需要包含资源的完整定义??
kubectl replace -f # 与apply相反,将原有对象替换为新对象
kubectl proxy # 启动一个代理服务,接受本地的http连接并转发至api server

# 版本控制
kubectl rollout status deployment kubia # 专门用来查看部署状态
kubectl rollout history deployment kubia # 显示升级的版本
kubectl rollout undo deployment kubia # 取消最后一次部署的Deployment,也可以在升级过程中使用
kubectl rollout undo deployment kubia --to-revision=l # 回滚到特定版本
kubect1 rollout pause deployment kubia # 暂停滚动升级
kubect1 rollout resume deployment kubia # 恢复滚动升级

查看相关

kubectl cluster-info # 查看集群信息
kubectl version # 查看 client 和 server 的版本信息
kubectl api-resources # 查看服务器上所有api资源
kubectl api-versions # 查看服务器上所有api版本

# get查看
kubectl get nodes # 查看所有节点,查看单个node在后面加node名称,-o wide查看详细信息,node/nodes通用
kubectl get pods # 查看所有pods,pods/pod/po通用
kubectl get pods -A # 查看所有命名空间的pods,--all-namespaces
kubectl get pods -n <namespace> # 查看指定命名空间下的pod
kubectl get pods <pod> -o yaml # 获取pod的yaml定义,json也可以
kubectl get pods -o custom-columns=POD:metadata.name,NODE:spec.nodeName --sort-by spec.nodeName -n <namespace> # 查看pod信息时,自定义显示列,排序
kubect1 get ns # 查看命名空间

kubectl get svc # 查看service, 简写svc,分配了Cluster-IP
kubectl get rs # 查看ReplicaSet,简写rs
kubectl get ds # 查看DaemonSet,简写ds
kubectl get jobs # 查看job
kubect1 get endpoints kubia # endpoint也是资源,也可以查看
kubectl get ingress # 查看ingress,获取ingress的ip
kubectl get pv # 查看持久卷PersistentVolume
kubectl get pvc # 查看持久卷声明PersistentVolumeClaim
kubectl get sc # 查看存储类storageClass
kubectl get secrets # 查看secrets
kubectl get deploy # 查看Deployment
kubect1 get cs # 获取控制平面组件状态ComponentStatus

# describe查看详细内容
kubectl describe nodes # 查看详细信息,单个node在后面加名称
kubectl describe pods # 描述pod
kubectl describe svc # 描述service
kubectl describe rs # 描述rs
kubectl describe secrets # 描述secrets
kubectl describe deployment # 描述Deployment

# 容器异常检查
kubectl logs mypod # 查看pod日志
kubectl logs mypod --previous # 查看前一个容器的日志(容器重启)
kubectl describe pod kubia-liveness # 查看容器的描述信息

# yaml字段查找
kubectl explain pods # 查看可能的api属性,打印出解释及包含的属性,检查默认值
kubectl explain pods.spec # 深入了解属性的更多信息

标签、注解

# 查看标签:pod、node
kubectl get pod --show-labels # 查看pod时显示pod的标签
kubectl get pod -L creation_method,env # 在列中显示标签,而不是显示一个pod的所有标签
kubectl get pod -l creation_method=manual # 使用标签选择器列出指定标签的pod
kubectl get pod -l creation_method!=manual # 列出有creation_method标签且不等于manual的pod
kubectl get pod -l '!env' # 列出没有env标签的pod,使用''避免bash解释感叹号
kubectl get pod -l env in (prod,devel) # 带有env标签,值为prod或devel
kubectl get pod -l env notin (prod,devel)
kubectl get pod -l app=pc,rel=beta # 一次使用多个标签
kubectl get nodes -l gpu=true # 列出标签gpu=true的节点
kubectl get nodes -L gpu # 列出所有节点,及gpu标签

# 添加、修改标签
kubectl label pod kubia-manual creation_method=manual # 添加标签creation_method=manual
kubectl label pod kubia-manual-v2 env=debug --overwrite  # 更改现有标签必须添加--overwrite
kubectl label node gke-kubia-85f6-node-Orrx gpu=rue # 给node添加标签

# 添加注解:pod
kubect1 annotate pod kubia-manual mycompany.com/someannotation="foo bar" # 添加注解

# 自动补全
## vi /etc/profile.d/xxx.sh,添加以下命令,然后source /etc/profile
alias k=kubectl
alias d=docker
source <(kubectl completion bash) # 只在使用完整的kubectl起作用,需要改变kubectl completion 的输出来修复
source <(kubectl completion bash | sed s/kubectl/k/g) # 改变输出


posted on 2023-11-13 22:16  Bingmous  阅读(30)  评论(0编辑  收藏  举报