码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Docker学习笔记


    Docker学习笔记

    • 1.初始Docker
      • 1.1解决不同组件依赖的兼容性问题
      • 1.2安装Docker
      • 1.3Docker架构
        • 1.3.1镜像
        • 1.3.2容器
      • 1.4Docker换源,换成国内镜像
    • 2.Docker命令
      • 2.1Docker服务相关命令
        • 2.1.1启动Docker服务
        • 2.1.2停止Docker服务
        • 2.1.3重启Docker服务
        • 2.1.4查看Docker服务状态
        • 2.1.5开机启动Docker服务
      • 2.2镜像相关命令
        • 2.2.1查看本地镜像
        • 2.2.2搜索远程镜像
        • 2.2.3拉取远程镜像
        • 2.2.4删除本地镜像
      • 2.3容器相关命令
        • 2.3.1查看容器
        • 2.3.2创建容器
        • 2.3.3进入容器
        • 2.3.4启动容器
        • 2.3.5停止容器
        • 2.3.6删除容器
        • 2.3.7查看容器信息
    • 3.Docker应用部署
      • 3.1MySql部署
        • 3.1.1搜索MySQL镜像
        • 3.1.2拉取MySQL镜像
        • 3.1.3创建容器,设置端口映射、目录映射
        • 3.1.4操作容器中的MySQL
      • 3.2Tomcat部署
        • 3.2.1搜索Tomcat镜像
        • 3.2.2拉取Tomcat镜像
        • 3.2.3创建容器,设置端口映射、目录映射
        • 3.2.4操作容器中的Tomcat
      • 3.3Nginx部署
        • 3.3.1搜索Nginx镜像
        • 3.3.2拉取Nginx镜像
        • 3.3.3创建容器,设置端口映射、目录映射
        • 3.3.4操作容器中的Nginx
      • 3.4Redis部署
        • 3.4.1搜索Redis
        • 3.4.2拉取redis
        • 3.4.3创建容器
        • 3.4.4测试访问
    • 4.备份与迁移
    • 5.Dockerfile(构建镜像)
      • 5.1Docker镜像原理与制作
        • 5.1.1原理
        • 5.1.2制作镜像
      • 5.2DockerFile概念及作用
      • 5.3案例1:定义dockerfile,发布springboot项目
        • 5.3.1springboot项目准备
        • 5.3.2将项目打包
        • 5.3.2将文件传输到虚拟机
        • 5.3.4将文件移动至dockerfiles目录下
        • 5.3.5编辑dockerfile将jar包添加到镜像中
      • 5.4案例2:自定义centos7镜像
        • 5.4.1查看原来的centos7挂载目录
        • 5.4.2查看原来的centos7是否带有vim
        • 5.4.3开始自定义自己的centos7
        • 5.4.4构建镜像自己的镜像
        • 5.4.5创建容器执行
    • 6.Docker服务编排
      • 6.1服务编排概念
      • 6.2Docker Compose(服务编排工具)
      • 6.3DockerCompose安装使用
      • 6.4案例:DockerCompose编排Nginx+springboot项目
        • 6.4.1创建docker-compose目录
        • 6.4.2编写docker-compose.yml文件
        • 6.4.3创建./nginx/conf.d目录
        • 6.4.4在./nginx/conf.d目录下编写itdocker.conf文件
        • 6.4.5在~/docker-compose目录下 使用dockers-compose 启动容器
        • 6.4.6测试访问
        • 6.4.7错误:services.nginx Additional property app is not allowed
    • 7.Docker容器数据卷
      • 7.1数据卷的概念及作用
      • 7.2配置数据卷
        • 7.2.1挂载目录
        • 7.2.2多个容器挂载同一个数据卷
      • 7.3配置数据卷容器
        • 7.3.1配置
    • 8.Docker私有仓库(管理自己的镜像)
      • 8.1搭建私有仓库(注意ip变化)
        • 8.1.1拉取私有仓库镜像
        • 8.1.2启动私有仓库容器
        • 8.1.3打开浏览器 访问私有仓库
        • 8.1.4修改deamon.json
        • 8.1.5重启docker 服务与registry仓库
      • 8.2上传镜像到私有仓库
        • 8.2.1标记镜像为私有仓库的镜像
        • 8.2.2上传标记的镜像
      • 8.3从私有仓库拉取镜像
    • 9.Docker容器虚拟化与传统虚拟机比较

    1.初始Docker

    容器技术:解决软件跨环境迁移问题
    解决

    • 开发
    • 测试
    • 生产
      环境之间差异,版本+代码
      在这里插入图片描述在这里插入图片描述在这里插入图片描述

    1.1解决不同组件依赖的兼容性问题

    在这里插入图片描述

    1.2安装Docker

    命令行安装即可

    1.3Docker架构

    • 客户端:
    • 服务端:镜像和容器
    • 仓库Registry:DockerHUB

    在这里插入图片描述

    1.3.1镜像

    将应用程序及其依赖、环境、配置打包在一起

    1.3.2容器

    镜像运行起来就是容器,一个镜像可以运行多个容器

    1.4Docker换源,换成国内镜像

    在这里插入图片描述
    在这里插入图片描述

    2.Docker命令

    可参照菜鸟教程

    2.1Docker服务相关命令

    2.1.1启动Docker服务

    systemctl start docker
    
    • 1

    2.1.2停止Docker服务

    systemctl stop docker
    
    • 1

    在这里插入图片描述

    2.1.3重启Docker服务

    systemctl restart docker
    
    • 1

    在这里插入图片描述

    2.1.4查看Docker服务状态

    systemctl status docker
    
    • 1

    在这里插入图片描述

    2.1.5开机启动Docker服务

     systemctl enable docker
    
    • 1

    2.2镜像相关命令

    在这里插入图片描述

    2.2.1查看本地镜像

    docker images
    
    • 1

    在这里插入图片描述

    2.2.2搜索远程镜像

    docker search redis
    
    • 1

    在这里插入图片描述

    2.2.3拉取远程镜像

    Docker HUB 拉取相关软件的镜像

    docker pull redis:3.5(3.5版本号)
    
    • 1

    在这里插入图片描述

    2.2.4删除本地镜像

    docker rmi imageid
    docker rmi redis:3.5(Image id 重复时)
    
    • 1
    • 2

    在这里插入图片描述
    删除所有镜像

    docker remi `docker images -q`
    
    • 1

    2.3容器相关命令

    2.3.1查看容器

    docker ps
    
    • 1

    在这里插入图片描述
    查看所有容器

    docker ps -a
    
    • 1

    2.3.2创建容器

    方式1

    docker run -i -t --name=c1 redis
    -i 保持容器运行
    -t 容器退出后自动关闭
    
    • 1
    • 2
    • 3

    方式2

    docker run -id --name=c2 redis
    -d 守护,后台运行容器
    -- name 为容器起名
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    2.3.3进入容器

    docker exec -it c2 /bin/bash
    
    • 1

    在这里插入图片描述

    2.3.4启动容器

    docker start c1
    
    • 1

    在这里插入图片描述

    2.3.5停止容器

    docker stop c2
    
    • 1

    2.3.6删除容器

    运行的容器不可以删除

    docker rm c2(容器名称)
    
    • 1

    在这里插入图片描述

    docker rm `docker ps -aq`
    
    • 1

    2.3.7查看容器信息

    docker inspect c1
    
    • 1

    在这里插入图片描述

    3.Docker应用部署

    3.1MySql部署

    在这里插入图片描述端口映射 -p
    在这里插入图片描述

    3.1.1搜索MySQL镜像

    docker search mysql
    
    • 1

    3.1.2拉取MySQL镜像

    去DockerHUb

    docker pull mysql:5.6
    
    • 1

    3.1.3创建容器,设置端口映射、目录映射

    # 在/root目录下创建mysql目录用于存储mysql数据信息
    mkdir ~/mysql
    cd ~/mysql
    
    • 1
    • 2
    • 3
    docker run -id \
    -p 3306:3306 \
    --name=c_mysql
    -v $PWD/conf:/etc/mysql/conf.d\
    -v $PWD/logs:/logs \
    -v $PWD/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=123456 \
    mysql:5.6
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    $PWD:当前路径
    docker run :就是创建并运行容器
    -- name mn :给容器起个名字叫mn
    -v $PWD/conf:/etc/mysql/conf.d :将主机目录下conf/my.cnf挂载到容器的/etc/mysql/my.cnf 配置目录
    -p 8080:80 :把宿主机的8080端口映射到容器内的80端口
    -e MYSQL_ROOT_PASSWORD=123456:初始化root密码
    mysql:5.6 :镜像名称

    3.1.4操作容器中的MySQL

    docker exec -it c_mysql /bin/bash
    
    • 1

    登录mysql

    mysql -uroot -p123456
    
    • 1

    在这里插入图片描述

    3.2Tomcat部署

    3.2.1搜索Tomcat镜像

    docker search tomcat
    
    • 1

    3.2.2拉取Tomcat镜像

    docker pull tomcat
    
    • 1

    3.2.3创建容器,设置端口映射、目录映射

    #在/root目录下创建tomcat目录用于存放tomcat数据信息
    mkdir ~/tomcat
    cd ~/tomcat
    
    • 1
    • 2
    • 3
    docker run -id --name=c_tomcat \
    -p 8080:8080 \
    -v $PWD:/usr/local/tomcat/webapps \
    tomcat
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    -p 8080:8080:将容器的8080端口映射到主机的8080端口
    -v $PWD:/usr/local/tomcat/webapps:将主机中当前目录挂载到容器的webapps

    3.2.4操作容器中的Tomcat

    使用外部机器访问Tomcat
    在这里插入图片描述

    3.3Nginx部署

    3.3.1搜索Nginx镜像

    docker search nginx
    
    • 1

    3.3.2拉取Nginx镜像

    docker pull nginx
    
    • 1

    3.3.3创建容器,设置端口映射、目录映射

    #在/root目录下创建nginx目录用于存储nginx数据信息
    mkdir ~/nginx
    cd ~/nginx
    mkdir conf
    cd conf
    #在~/nginx/conf/下创建nginx.conf文件,粘贴下面代码块的内容
    vim nginx.conf
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    user  nginx;
    worker_processes  1;
    
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    
    events {
        worker_connections  1024;
    }
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        keepalive_timeout  65;
    
        #gzip  on;
    	
    	include /etc/nginx/conf.d/*.conf;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    创建容器

    docker -run -id --name=c_nginx \
    -p 80:80 \
    -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
    -v $PWD/logs:/var/log/nginx \
    -v $PWD/html:/usr/share/nginx/html \
    nginx
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    -p 80:800:将容器的80端口映射到宿主机的80端口
    -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:将主机当前目录下的/conf/nginx.conf挂载到容器的:/etc/nginx/nginx.conf配置目录
    -v $PWD/html:/usr/share/nginx/html:将主机当前目录挂载到容器的/val/log/nginx日

    3.3.4操作容器中的Nginx

    外部访问Nginx即可

    3.4Redis部署

    3.4.1搜索Redis

    docker search redis
    
    • 1

    3.4.2拉取redis

    docker pull redis:5.0
    
    • 1

    3.4.3创建容器

    docker run -id --name=c_redis -p 6379:6379 redis:5.0
    
    • 1

    3.4.4测试访问

    redis-cli.exe -h 192.168.187.129 -p 6379
    -h 192.168.187.129 宿主机的ip地址
    
    • 1
    • 2

    4.备份与迁移

    5.Dockerfile(构建镜像)

    5.1Docker镜像原理与制作

    5.1.1原理

    复用
    分层的文件系统
    在这里插入图片描述在这里插入图片描述

    5.1.2制作镜像

    在这里插入图片描述容器转镜像

    docker commit 容器id 镜像名称:版本号
    
    • 1

    在这里插入图片描述
    镜像不可以传输,可以将镜像转换成压缩文件

    docker save -o 压缩文件名称 镜像名称:版本号
    
    • 1

    压缩文件还原成镜像

    docker load -i 压缩文件名称
    
    • 1

    在这里插入图片描述
    目录挂载的不生效

    5.2DockerFile概念及作用

    统一,开发、测试、运维的运行环境
    在这里插入图片描述
    更新详细语法说明,请参考官网文档: https://docs.docker.com/engine/reference/builder

    作用
    在这里插入图片描述

    5.3案例1:定义dockerfile,发布springboot项目

    5.3.1springboot项目准备

    在这里插入图片描述

    5.3.2将项目打包

    在这里插入图片描述
    根据路径找到打好的文件
    在这里插入图片描述在这里插入图片描述

    5.3.2将文件传输到虚拟机

    1. 参照别人安装Xshell教程安装
      在这里插入图片描述

    2. 使用rz命令进行查看是否安装了lrzsz程序

    3. 如果没有安装,使用yum -y install lrzsz进行安装

    4. 输入 rz进行文件上传
      在这里插入图片描述

    5.3.4将文件移动至dockerfiles目录下

    如果没有目录docker-files,先进行创建

    mkdir ~/docker-files
    
    • 1
    mv springboot-hello-0.0.1-SNAPSHOT.jar ./docker-files/
    
    • 1

    5.3.5编辑dockerfile将jar包添加到镜像中

    1. 定义父镜像:FROM java:8
    2. 定义作者信息:MAINTAINER jqqq007
    3. 将jar包添加到容器:ADD springboot-hello-0.0.1-SNAPSHOT.jar app.jar
    4. 定义容器启动执行的命令:CMD java -jar app.jar
    5. 通过dockerfile 构建镜像:docker build -f dockerfile文件路径 -t 镜像名称:版本
    vim springboot_dockerfile  编辑一个文件
    添加以上命令
    
    • 1
    • 2

    在这里插入图片描述
    执行,就可生成镜像

    docker build -f ./springboot_dockerfile -t app .
    
    • 1

    在这里插入图片描述
    查看镜像
    在这里插入图片描述
    通过镜像app,创建运行容器

    docker run -id -p 9000:8080 app
    
    • 1

    访问
    在这里插入图片描述

    5.4案例2:自定义centos7镜像

    要求:

    1. 默认登录路径为/usr
    2. 可以使用vim

    5.4.1查看原来的centos7挂载目录

    在这里插入图片描述是挂载在根目录/下

    5.4.2查看原来的centos7是否带有vim

    在这里插入图片描述结果不带

    5.4.3开始自定义自己的centos7

    创建一个dockerfile

    vim centos_dockerfile
    
    • 1

    添加以下命令

    FROM centos:7
    MAINTAINER JQ<jq.cn>
    RUN yum install -y vim
    WORDIR /usr
    CMD/bin/bash
    
    • 1
    • 2
    • 3
    • 4
    • 5

    RUN yum install-y vim:执行安装vim命令
    WORDIR /usr:定义默认的工作目录
    CMD/bin/bash:定义容器启动执行的命令

    5.4.4构建镜像自己的镜像

    通过dockerfile 构建镜像:docker build -f dockerfile文件路径 -t 镜像名称:版本

    docker build -f ./centos_dockerfile -t appcentos:1 
    
    • 1

    5.4.5创建容器执行

    在这里插入图片描述

    6.Docker服务编排

    6.1服务编排概念

    在这里插入图片描述

    6.2Docker Compose(服务编排工具)

    在这里插入图片描述
    DockerCompose的详细语法参考官网:https://docs.docker.com/compose/compose-file/

    在这里插入图片描述

    6.3DockerCompose安装使用

    #Compose 目前已经完全支持Linux、MAC OS、Windows,在安装Compose之前,需要先安装Docker。下面以编译好的二进制包方式安装在Linux中
    curl -L https://get.daocloud.io/docker/compose/releases/download/v2.0.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    
    #设置文件可执行权限
    chmod +x /usr/local/bin/docker-compose
    #查看版本信息
    docker-compose -version
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    卸载dockerCompose

    #二进制包方式安装的,删除二进制文件即可
    rm /usr/local/bin/docker-compose
    
    
    • 1
    • 2
    • 3

    6.4案例:DockerCompose编排Nginx+springboot项目

    6.4.1创建docker-compose目录

    mkdir docker-compose/
    cd ~/docker-compose
    
    • 1
    • 2

    6.4.2编写docker-compose.yml文件

    vim docker-compose.yml
    
    • 1
    version: '3'
    services:
      nginx:
       image: nginx
       ports:
        - 80:80
       links:
        - app
       volumes:
       	- ./nginx/conf.d:/etc/nginx/conf.d
      app:
        image: app
        expose:
          - "8080"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    6.4.3创建./nginx/conf.d目录

    mkdir -p ./nginx/conf.d
    cd ./nginx/conf.d
    
    • 1
    • 2

    6.4.4在./nginx/conf.d目录下编写itdocker.conf文件

    vim itdocker.conf
    
    • 1
    server {
    	listen 80;
    	access_log off;
    	
    	location / {
    		proxy_pass http://app:8080;
    	}
    	
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    6.4.5在~/docker-compose目录下 使用dockers-compose 启动容器

    cd ~/docker-compose
    
    • 1
    docker-compose up
    
    • 1

    6.4.6测试访问

    192.168.56.10:80/hello
    在这里插入图片描述

    6.4.7错误:services.nginx Additional property app is not allowed

    docker-compose up
    services.nginx Additional property app is not allowed
    
    • 1
    • 2

    此时一定要去检查docker-compose.yml书写格式,特别是缩进格式!

    7.Docker容器数据卷

    在这里插入图片描述

    7.1数据卷的概念及作用

    在这里插入图片描述
    容器与虚拟机进行目录挂载
    解决

    • Docker容器删除后,数据还会存在
    • Docker容器与外部机器之间进行文件交换
    • 容器之间的数据交换

    一个容器可以被多个容器进行同时挂载
    一个容易也可以被挂载多个数据卷

    7.2配置数据卷

    在这里插入图片描述

    • 目录必须是绝对路径
    • 目录不存在可以自动创建
    • 可以挂载多个数据卷

    7.2.1挂载目录

    docker run -it --name=c1 -v /root/data/:/root/data_container redis:3.5
    
    • 1

    挂载多个目录

    docker run -it --name=c2 \
    -v /root/data:/root/dedadasdad \
    -v /root/data2:/root/dadssds
    
    
    • 1
    • 2
    • 3
    • 4

    7.2.2多个容器挂载同一个数据卷

    在这里插入图片描述

    docker run -it --name=c1 -v /root/data/:/root/data_container redis:3.5
    
    • 1
    docker run -it --name=c2 -v /root/data/:/root/data_container redis:3.5
    
    • 1

    7.3配置数据卷容器

    在这里插入图片描述

    7.3.1配置

    在这里插入图片描述
    自动在宿主机分配一个文件

    docker run -it --name=c3 -v /volume redis:3.5
    
    • 1
    docker run -it --name=c1 --volumes-from c3 redis:3.5
    
    • 1
    docker run -it --name=c2 --volumes-from c3 redis:3.5
    
    • 1

    8.Docker私有仓库(管理自己的镜像)

    在这里插入图片描述

    8.1搭建私有仓库(注意ip变化)

    8.1.1拉取私有仓库镜像

    docker pull registry
    
    • 1

    在这里插入图片描述

    8.1.2启动私有仓库容器

    docker run -id --name=registry -p 5000:5000 registry
    
    • 1

    8.1.3打开浏览器 访问私有仓库

    输入地址https://私有仓库服务器ip:5000/v2/_catalog
    看到{“repositories”:[]}表示私有仓库搭建成功
    在这里插入图片描述

    8.1.4修改deamon.json

    vim /etc/docker/daemon.json
    #在上述文件中添加一个key,保存退出。
    #此步用于让docker信任私有仓库地址
    #注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip
    {"insecure-registries": ["私有仓库服务器ip:5000"]}
    
    • 1
    • 2
    • 3
    • 4
    • 5

    8.1.5重启docker 服务与registry仓库

    systemctl restart docker
    docker start registry
    
    • 1
    • 2

    8.2上传镜像到私有仓库

    在这里插入图片描述

    8.2.1标记镜像为私有仓库的镜像

    docker tag centos:7 私有仓库服务器ip:5000/centos:7
    
    • 1

    8.2.2上传标记的镜像

    docker push 私有仓库服务器ip:5000/centos:7
    
    • 1

    在这里插入图片描述

    在这里插入图片描述

    8.3从私有仓库拉取镜像

    #拉取镜像
    docker pull 私有仓库服务器ip:5000/centos:7
    
    • 1
    • 2

    在这里插入图片描述

    9.Docker容器虚拟化与传统虚拟机比较

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    FOC系列(一)----DRV8301芯片的学习
    Himall商城图片帮助类ImageHelper 生成验证码
    vue-element学习(一)
    AI 生成的唯美头像也太好看了吧!附好说 AI 一秒出图技巧
    Java Spring Cloud VII 之 内置断言
    javaEE基于springboot民宿推荐系统springmvc+mybatis+jsp]
    在人物第一次死亡后会退出第一个循环,图片却一直卡在人物死亡的画面不动而不是重新开始(标签-游戏)
    【PyTorchVideo教程02】快速安装PyTorchVideo 采用 yolov5、slowfast、deepsort对学生课堂行为进行检测
    R语言 使用数据集 veteran 进行生存分析
    OpenJudge NOI 2.1 3526:最简真分数
  • 原文地址:https://blog.csdn.net/qq_45498432/article/details/127694965
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号