开发常用命令合集(Docker、K8s、Linux、Windows等)

1 Docker

详情查看:https://blog.csdn.net/weixin_45565886/article/details/130130361

1.1 基础命令

①拉取、查看、删除镜像
docker pull nginx  #下载最新版

镜像名:版本名(标签)

docker pull nginx:1.20.1


docker pull redis  #下载最新
docker pull redis:6.2.4

## 下载来的镜像都在本地
docker images  #查看所有镜像

redis = redis:latest

docker rmi 镜像名:版本号/镜像id

案例:

# 1. 拉取镜像
docker pull nginx:1.20.1

# 2. 查看本地镜像
docker images
②运行、查看、停止容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

【docker run  设置项   镜像名  】 镜像启动运行的命令(镜像里面默认有的,一般不会写)

# -d:后台运行
# --restart=always: 开机自启
docker run --name=mynginx   -d  --restart=always -p  88:80   nginx

# 查看正在运行的容器
docker ps
# 查看所有
docker ps -a
# 删除停止的容器
docker rm  容器id/名字
docker rm -f mynginx   #强制删除正在运行中的

#停止容器
docker stop 容器id/名字
#再次启动
docker start 容器id/名字
#重启容器 -t 紧跟多少时间之后执行重启操作【下面演示的是立即重启】
docker restart -t 0 容器id/名字

#应用开机自启
docker update 容器id/名字 --restart=always

案例:

# -d    后台启动
# --restart=always 开机自启
# -p 88:80 将宿主机的88端口映射到nginx容器的80端口
# --name=mynginx 指定启动之后的容器名为mynginx
# nginx:1.20.1 启动版本号为1.20.1的nginx
docker run -d --restart=always -p 88:80 --name=mynginx nginx:1.20.1
③进入容器内部
# 进入容器内部修改[有些可能不是bash是sh,需灵活变化]
# -it 表示进入交互页面
#nginx容器可以当做一个小型的linux,然后里面运行了nginx
docker exec -it 容器id /bin/bash

案例:修改nginx的默认首页

docker ps,查看正在运行的nginx镜像,获取容器id
docker exec -it bcb /bin/bash,进入nginx交互页面
进入nginx的首页
cd /usr/share/nginx/html
修改首页内容:
echo "this is ziyi's pages, elcomclear > index.html
查看结果:你的ip+映射端口(宿主机的)
退出交互页面
exit
④日志查看:docker logs -f 容器名
# docker logs -f kafka
# docker-compose logs -f 容器名(通过docker-compose方式)
docker logs -f 容器名

1.2 进阶操作

①挂载容器数据到外部
docker run --name=mynginx   \
-d  --restart=always \
-p  88:80 -v /data/html:/usr/share/nginx/html:ro  \
nginx

# 修改页面只需要去 主机的 /data/html
# -v 挂载
/*
/data/html:/usr/share/nginx/html:ro
将容器中的/usr/share/nginx/html挂载到宿主机的/data/html目录,ro表示read only只读
nginx代表nginx:latest镜像名
*/

指定nginx版本

docker run -d -p 88:80 -v /data/html:/usr/share/nginx/html --restart=always --name=mynginx nginx:1.20.1
②提交改变

我们修改了容器中的内容之后,想要打包交给其他电脑去运行,此时就需要将我们修改好之后的镜像进行提交

  1. 提交修改
# docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
# -a "ziyi" 指明是谁修改的
# -m "首页变化" 指明做了什么
# 341d81f7504f guignginx:v1.0 指明哪个容器的修改了以及新容器的版本号
docker commit -a "ziyi"  -m "首页变化" 341d81f7504f guignginx:v1.0
  1. 压缩镜像并传输
# 将镜像保存成压缩包
docker save -o abc.tar nginx:v1.0

# 可以通过scp命令远程传输到指定服务器的指定文件夹下
# 别的机器加载这个镜像
docker load -i abc.tar

# 离线安装
③推送到远程hub
  1. 注册并登录自己的dockerhub账号
# 登录docker hub,输入命令然后输入自己用户名与密码
docker login
  1. 打包本地镜像
# 打包本地镜像
# 把旧镜像的名字,改成仓库要求的新版名字
docker tag nginx:v1.0 ziyigun/nginx:v1.0

综合命令:

# 把旧镜像的名字,改成仓库要求的新版名字
docker tag guignginx:v1.0 leifengyang/guignginx:v1.0

# 登录到docker hub
docker login       

docker logout(推送完成镜像后退出)

# 推送
docker push leifengyang/guignginx:v1.0

# 别的机器下载
docker pull leifengyang/guignginx:v1.0
④查看容器ip
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名

1.3 docker-compose操作

linux安装docker-compose
docker与docker-compose的关系:

  • docker是一个开发源代码的应用程序容器引擎,可以让我们快速搭建并运行程序
  • docker-compose是docker的一个子项目,能让我们更加轻松地管理多个容器
  1. 下载docker-compose
# 这个是官方地址,可能比较慢,推荐使用下面的国内镜像地址
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 国内镜像地址
curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

# 下载完之后可以看下 /usr/local/bin 这个目录有没有 docker-compose 这个文件
ll /usr/local/bin | grep docker-compose

在这里插入图片描述
2. 给docker-compose添加执行权限

# 给docker compose 目录授权
sudo chmod +x /usr/local/bin/docker-compose

# 查看一下version,显示有版本号那就说明安装成功了
docker-compose version
docker-compose -f xxx.yml up -d:应用某个yml文件
# 应用yml文件(进入到yml文件所在目录)
docker-compose up -d

# 指定应用某个yml文件
docker-compose 

docker-compose.yml:

yml文件样例:以启动一个kafka+zk为例

version: '3'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:6.2.0
    ports:
      - "2181:2181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
  kafka:
    image: confluentinc/cp-kafka:6.2.0
    ports:
      - "9092:9092"
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
    depends_on:
      - zookeeper
docker-compose ps:查看运行起来的容器
docker-compose exec servicename bash:进入容器

在这里插入图片描述

docker-compose exec serviceName bash
# docker-compose exec kafka bash
docker-compose -f xxx.yml stop:停止服务
docker-compose logs serviceName:查看日志
docker-compose down:停止并删除容器

2 K8s

# 查看持续查看workflow的pod日志
kubectl logs workflow-9c6468cb7-f4d6x -n xxx -f --tail=1

# 进入容器内容 -n xxx 指定命名空间
kubectl exec -it -n xxx compression-apk-v1-label-2-66bc688cf4-zgvvr -- sh
# kubectl exec -n ocpf-plugin pod-name -it -- /bin/bash

# -r 支持转义
kubectl logs -n ocpf s3batch-6697bb767f-lr7zx | less -r
# 查询错误,通过/查询包含ERROR
# /ERROR

# 获取xxx命名空间下的deployment【pod、svc同理】
kubectl get deployment -n xxx
# 删除xxx命名空间下名为delpoymentName的deployment【pod、svc同理】
kubectl delete deployment delpoymentName -n xxx

详情见:https://blog.csdn.net/weixin_45565886/article/details/130698024

在这里插入图片描述

2.1 基础命令

①deployment根据Pod的标签关联到Pod,是为了管理pod的生命周期
②service根据Pod的标签关联到pod,是为了让外部访问到pod,给pod做负载均衡

  • 需要注意:
    deployment控制器关联的Pod,Pod的name和hostname(如果不手动指定)就是deployment控制器的Name
    StatefulSet控制器关联的Pod,Pod的Name和Hostname(如果不手动指定)就是StatefulSet控制器的Name + 序号
①基础命令(pod等)
命令含义示例
kubectl run 容器名 --image=容器地址:版本通过命令部署容器kubectl run testapp --image=ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1
kubectl apply -f xxx.yaml通过配置文件部署kubectl apply -f app.yaml
kubectl describe pod pod-name查看pod详情信息kubectl describe pod test-k8s-8598bbb8c6-62c8m
kubectl logs pod-name查看pod日志(-f 持续查看日志)kubectl logs test-k8s-8598bbb8c6-ngmw9
kubectl exec -it pod-name – bash进入pod容器内部(-c参数可指定进入哪个容器)kubectl exec -it test-k8s-8598bbb8c6-knztk – bash
②Deployment

配置文件:

app.yml:

apiVersion: apps/v1
# 表示类型为Deployment
kind: Deployment
metadata:
  # 部署名字
  name: test-k8s
spec:
  replicas: 5
  # 用来查找关联的 Pod,所有标签都匹配才行
  selector:
    matchLabels:
      app: test-k8s
  # 定义 Pod 相关数据
  template:
    metadata:
      labels:
      	# 标签
        app: test-k8s
    spec:
      # 定义容器,可以多个【这一部分就是上面的单个pod】
      containers:
        - name: test-k8s # 容器名字【需要与labels对应】
          image: ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1 # 镜像[上传到了腾讯云]
命令含义示例
kubectl scale deployment deploymentName --replicas=xx指定deployment副本数kubectl scale deploymnet test-k8s --replicas=5
kubectl apply -f xxx.yaml修改配置文件来重新部署可修改replicas等参数
kubectl port-forward pod-name port:containerPort将外面端口映射到容器内部kubectl port-forward test-k8s-8598bbb8c6-2ff7w 8090:8080
kubectl rollout history deployment deployment-name将部署回退到上一个版本kubectl rollout history deployment test-k8s
kubectl rollout undo deployment deployment-name --to-revision=2回退到指定版本kubectl rollout undo deployment test-k8s --to-revision=2
kubectl delete deployment deployment-name删除部署kubectl delete deployment test-k8s
③Service

配置文件:

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: test-k8s
spec:
  selector:
    app: test-k8s
  type: ClusterIP # 默认
  ports:
    - port: 8080        # 本 Service 的端口
      targetPort: 8080  # 容器端口

应用配置文件:

# 应用配置
kubectl apply -f service.yaml
命令含义示例
kubectl get svc查看service服务kubectl get svc test-k8s
kubectl describe svc service-name查看服务详情kubectl describe svc test-k8s
④StatefulSet

StatefulSet是用来管理有状态的应用,例如数据库。
前面我们部署的应用,都是不需要存储数据,不需要记住状态的,可以随意扩充副本,每个副本都是一样的,可以替代的。

  • 但是像数据库、Redis这类有状态的,则不能随意扩充副本
  • StatefulSet会固定每个Pod的名字,但是Pod的IP不固定

mongo.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mongodb
spec:
  serviceName: mongodb
  replicas: 3
  selector:
    matchLabels:
      app: mongodb
  template:
    metadata:
      labels:
        app: mongodb
    spec:
      containers:
        - name: mongo
          image: mongo:4.4
          # IfNotPresent 仅本地没有镜像时才远程拉,Always 永远都是从远程拉,Never 永远只用本地镜像,本地没有则报错
          imagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Service
metadata:
  name: mongodb
spec:
  selector:
    app: mongodb
  type: ClusterIP
  # HeadLess
  clusterIP: None
  ports:
    - port: 27017
      targetPort: 27017

⑤Configmap & Secret
⑥Helm & namespace

2.2 进阶命令

1. kubectl dessribe pod-name:查看event信息
# 查看pod的Event日志信息(如果有命名空间则带上,否则删除)
kubectl describe pod -n pod的namepace pod名称

比如:我们的某个pod一直都不为Running状态
在这里插入图片描述

# 查看pod的event信息
kubectl describe pod redis-master-0

在这里插入图片描述

2. kubectl get pod pod-name -o wide:查看pod详细信息(所在node、pod的IP等)
# 查看pod的IP以及所在的节点名
kubectl get pod pod-name -o wide

在这里插入图片描述

3. kubectl delete pod pod-name --force
# 强制删除某个pod
kubectl delete pod pod名 --force
#kubectl delete pod redis-master-0 --force
4. kubectl edit deployments.apps -n namespace

修改deployment

kubectl edit deployments.apps -n 命名空间

3 Linux

3.1 创建和编译代码

mkdir myproject
cd myproject
git clone <repository_url>
cd <repository_name>
make
# mkdir myproject:创建一个名为myproject的目录。
# cd myproject:进入myproject目录。
# git clone <repository_url>:从远程仓库克隆代码到当前目录。
# cd <repository_name>:进入克隆的代码仓库目录。
# make:执行Makefile中的编译命令,编译代码。

3.2 安装和管理依赖包

sudo apt-get update
sudo apt-get install <package_name>
#sudo apt-get update:更新可用的软件包列表。
#sudo apt-get install <package_name>:安装指定的软件包。

3.3 运行和调试命令

./myprogram
gdb myprogram
# ./myprogram:运行名为myprogram的可执行文件。
# gdb myprogram:使用GDB调试器来调试myprogram程序。

3.4 查看日志和输出

tail -f <log_file>
grep <pattern> <file>
# tail -f <log_file>:实时查看日志文件的最新内容。
# grep <pattern> <file>:在文件中查找匹配指定模式的行。

3.5 版本控制和代码管理

git init
git add .
git commit -m "Initial commit"
git push origin master
# git init:初始化一个新的Git仓库。
# git add .:将当前目录下的所有文件添加到Git仓库。
# git commit -m "Initial commit":提交代码更改,并添加提交消息。
# git push origin master:将本地代码推送到远程仓库的master分支。

3.6 查询linux配置(版本信息、内存等)

cat /etc/*release:查询linux版本
free -mh:查询内存
lscpu:查询cpu版本核心数
top -d 2 -o %CPU:按照CPU使用率排序(2s刷新)
  • top:最基本的 top 命令,显示系统的整体性能概览,包括 CPU 利用率、内存使用、进程信息等。
  • top -d 1:指定 top 命令以 1 秒的间隔刷新并更新显示的信息。这样可以实现滚动更新的效果。
  • top -n 1:指定 top 命令只运行一次并显示结果后立即退出。适用于只需要一次性的快速查询。
  • top -b:以批处理模式运行 top 命令,将结果输出到标准输出流,适用于脚本和程序调用。
  • top -p PID:指定 top 命令只显示指定 PID 的进程信息。可以用于查看特定进程的 CPU 利用率。
  • top -o %CPU:指定 top 命令按照 CPU 利用率进行排序。这样将会使 CPU 使用率最高的进程排在前面。
  • top -U username:指定 top 命令只显示指定用户名的进程信息。可以用于查看特定用户的 CPU 利用率。
  • top -i:显示 top 命令的交互式菜单,可以在菜单中选择不同的排序和显示选项。
  • top -H:显示 top 命令中的线程信息,包括每个进程的线程数和线程的 CPU 利用率。
  • top -c:显示 top 命令中的命令行参数信息,包括每个进程的命令行参数和命令行参数的长度。
netstat -ant | grep tcp:查看tcp开放的端口
stat a.txt:查看a.txt的ATime、MTime、CTime
  • ATime ——文件的最近访问时间(只要读取时间,ATime就会更新)
  • MTime ——文件的内容最近修改的时间(当文件进行被写的时候,CTime就会更新)
  • CTime——文件属性最近修改的时间(当文件的目录被修改,或者文件的所有者,权限等被修改时)

注意📢:在inux内核(kernel)版本2.6.30之前,linux的核心开发人员针对Ext3/Ext4文件系统的性能进行了讨论,其中包括atime。在kernel 2.6.30之前,文件系统中默认会及时的更新atime,这样会带来两个问题:

(1) 系统中大量的文件访问,将atime写入到磁盘中,消耗时间,从而降低性能

(2) 这样的操作也会消耗电能
在Linux上运行的,很少的应用程序需要获取精确的atime时间,并且Linux核心开发人员从Ext3/Ext4文件系统的性能角度出发,决定在2.6.30版本的内核中修改atime的更新方式,只有在以下三种情况之一才会更新atime:

    1. 如果将分区mount的挂载的时候指定采用非relatime方式(默认采用relatime方式),如strictatime.
    1. atime小于ctime或者小于mtime的时候
    1. 本次的access time和上次的atime超过24个小时

其他高级用法

①grep相关
grep “2022” workflow.log | more :查询包含2022的字符
# 搜索workflow.log中包含2022的字符,并通过管道符转换到more中
grep "2022" workflow.log | more
cat /zabbix_agentd.conf | grep -vE "^$|^\s*#":过滤注释和空行
# 查看配置zabbix配置文件并过滤注释和空行
cat /etc/zabbix/zabbix_agentd.conf | grep -vE "^$|^\s*#"
②查询端口占用(lsof -i :port)
# 查询8080端口所占用的进程id
lsof -i :8080

# 强制删除进程
kill -9 进程id
③scp远程传输文件
  1. 上传文件
#scp 【本地文件路径】 【服务器用户名】@【服务器ip】:【服务器文件存放路径】
scp local_folder remote_username@remote_ip:remote_folder

#示例
scp /usr/123.txt root@192.168.31.200:/home

scp /Users/xxx/GolandProjects/MyTest/iris/main root@10.253.50.145:/~/main

上传文件夹,加-r参数

scp相关参数
-v 详细显示输出,显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题
-r 递归处理,递归复制整个目录
-C 使能压缩选项
-p 保留原文件的修改时间,访问时间和访问权限。
-P port 选择传输端口
-4 强行使用 IPV4 地址
-6 强行使用 IPV6 地址

scp -r local_folder remote_username@remote_ip:remote_folder
  1. 下载文件
#scp 【服务器用户名】@【服务器地址】:【服务器上存放文件的路径】【本地文件的路径】
scp -r remote_username@remote_ip:remote_folder local_folder
④vim快捷键

以下都是在英文输入法状态下

按下 0 键:将光标定位到当前行的行首。
按下 ^ 键:将光标定位到当前行的第一个非空字符处。
按下 $ 键:将光标定位到当前行的行尾。
按下 gg 键:将光标定位到第一行。
按下 G 键:将光标定位到最后一行。
#请注意,这些快捷键适用于Vim的正常模式。如果您当前处于插入模式,请按下 Esc 键返回正常模式,然后使用上述快捷键。
# 按下按键i,即可进入插入模式
# 按下 :wq 即可保存退出, :wq!强制保存退出
# 按下 :set nu,显示行号,输入 :20 即可定位到第20行
# 按下 :set paste,再按下 i,可进入粘贴模式
# 注释多行使用命令:
a. 进入 Normal 模式:按下 Esc 键以确保处于 Normal 模式。

b. 移动到要注释的起始行:使用上下箭头键或 j 和 k 键将光标移动到要注释的起始行。

c. 开始注释:按下 Ctrl + v 进入块选择模式。使用上下箭头键或 j 和 k 键选择要注释的行。

d. 注释选定的行:按下大写字母 I 进入插入模式,然后输入注释符号(如 #)。然后

e. 退出块选择模式:按下 连续按下两次Esc 键退出块选择模式,注释符号会应用在选定的行上。
⑤wc命令

wc 是一个用于统计文件中行数、字数和字符数的命令。它的语法如下:

  • wc [选项] 文件…
    选项:
    -l:显示行数。
    -w:显示字数。
    -c:显示字符数。
    -m:显示字符数,而不是字数。
    -L:显示最长行的长度。

第一个数字表示文件中的行数(包括空行)。
第二个数字表示文件中的字数。
第三个数字表示文件中的字符数(包括空格和标点符号)。
最后显示文件名。

[root@ocpf01 ~]# wc file1.txt file2.txt file3.txt
 1  1  7 file1.txt
 1  1  2 file2.txt
 1  1  3 file3.txt
 3  3 12 总用量

前三行分别显示了每个文件的行数、字数和字符数。
最后一行显示了所有文件的总计。

统计文件夹下子文件夹数量find test -type d | wc -l
# 统计test目录下子文件夹的数量
find test -type d | wc -l
统计文件名以filexx开头的数量
# 统计/root/test目录下以file开头的文件数
find /root/test -type f -name "file*" | wc -l
⑥rsync:同步文件

rsync是用于同步文件的工具

  1. 安装
# 安装
sudo apt-get install rsync
sudo yum install rsync
  1. 参数

-a:以归档模式同步文件,保留所有的权限、所有者和时间戳。
-v:详细输出同步过程中的文件信息。
-z:在传输过程中启用压缩,可以加快传输速度。
-r:是否传输目录
-t:是否同步mtime(修改时间)

# 远程同步,显示进度、保留mtime
rsync -rt /root/rsyncdemo/source/ root@10.253.50.147:/root/qing/destination3/
# 本机同步
rsync -rt /root/rsyncdemo/source/ /root/rsyncdemo/destination2/ 

# 查看目录下的mtime、amtime等
stat -c "File: %n
Size: %s bytes
Access: %x
Modify: %y
Change: %z
Birth: %w" /root/qing/destination/*

注意:linux的ls -l 命令默认展示的是accesstime

4 Windows

详情查看:https://editor.csdn.net/md/?articleId=127912183

4.1 常用脚本

①生成指定大小文件

genfile.bat:

@echo off
setlocal

REM 100G 文件大小
set FILE_SIZE=1024*1024*1024*100  
set FILE_NAME=output.txt

echo Generating %FILE_SIZE% bytes file...

powershell -Command "$size = %FILE_SIZE%; $path = '.\%FILE_NAME%'; $stream = [System.IO.File]::Create($path); $stream.SetLength($size); $stream.Close();"
if %errorlevel% neq 0 (
    echo Failed to generate file.
    exit /b 1
)

echo File generated successfully.

endlocal

或者直接通过cmd命令行操作:

  • fsutil file createnew D:\test20M.txt 20971520
②生成指定目录、指定文件数、指定文件大小

以管理员身份运行,下面脚本,保存为xxx.bat文件

@echo off
setlocal

REM 获取当前脚本的路径
set "script_path=%~dp0"

REM 提示用户输入目录数量
set /p directory_count="请输入目录数量:"

REM 提示用户输入文件数量
set /p file_count="请输入每个目录下的文件数量:"

REM 提示用户输入文件生成位置
set /p file_location="请输入文件生成位置:"

REM 提示用户输入每个文件的大小
set /p file_size="请输入每个文件的大小(单位:字节):"

REM 创建目录
for /L %%i in (1, 1, %directory_count%) do (
    mkdir "%file_location%\dir%%i"
    cd "%file_location%\dir%%i"
    
    REM 创建文件
    for /L %%j in (1, 1, %file_count%) do (
        fsutil file createnew "File%%j.txt" %file_size%
    )
)

echo 文件生成完成。
pause

REM 返回到执行脚本的位置
cd "%script_path%"

endlocal

4.2 小命令

telnet ip port:用于探测目标端口是否开放

5 其他开发概念

5.1 F12开发者工具之preview 与response的区别

预览与响应的区别

  1. 预览:
    在这里插入图片描述
  2. 响应:
    在这里插入图片描述
  • 这里所讲的的格式化是指:对后台传输过来的json、html、css等数据进行格式上的转换.

总结:
①Perview的意思是(response preview):响应-预览 (响应资源进行了格式处理的内容)
②Response的意思是:(Raw response data):原始-响应-的数据(响应资源未进行格式处理的内容)

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐