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) # 改变输出
---
本文来自博客园,作者:Bingmous,转载请注明原文链接:https://www.cnblogs.com/bingmous/p/17811353.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?