分类: 未分类

  • docker

    docker常用命令

    来源公众号:运维朱工 2024年06月16日 09:21 浙江

    Docker 是一个用于开发、交付和运行应用程序的平台,且提供了一系列命令来管理镜像、容器、网络和存储卷等资源。

    docker生命周期相关命令

    这些命令用于管理容器的生命周期,包括创建、启动、停止、删除等。

    1. docker run 创建并启动一个容器。

      [root@lutixia ~]# docker run -d --name mynginx nginx
      ef5dc799dc80574836c550118fcfcb804af342cc4dbf9fa76599155c3095c6f3
      [root@lutixia ~]#
    2. docker stop 停止一个运行中的容器。

      [root@lutixia ~]# docker stop mynginx
      mynginx
      [root@lutixia ~]#
    3. docker start 启动一个已经存在的容器。

      [root@lutixia ~]# docker start mynginx
      mynginx
      [root@lutixia ~]#
    4. docker restart 重启一个运行中的容器。

      docker restart mynginx
    5. docker rm 删除一个已停止的容器。

      [root@lutixia ~]# docker stop mynginx
      mynginx
      [root@lutixia ~]#
      [root@lutixia ~]# docker rm mynginx
      mynginx
    6. docker ps 列出当前所有运行的容器。

      [root@lutixia ~]# docker ps
      CONTAINER ID   IMAGE                  COMMAND                   CREATED        STATUS             PORTS                       NAMES
      e1ce0b642a10   kindest/node:v1.27.3   "/usr/local/bin/entr…"   9 months ago   Up About an hour   127.0.0.1:42103->6443/tcp   kind-control-plane
      be4ff1a2dce3   kindest/node:v1.27.3   "/usr/local/bin/entr…"   9 months ago   Up About an hour                               kind-worker
      bce1a252b960   kindest/node:v1.27.3   "/usr/local/bin/entr…"   9 months ago   Up About an hour                               kind-worker2
    7. 列出所有容器(包括停止的)。

      docker ps -a

    docker镜像相关命令

    这些命令用于管理 Docker 镜像,包括构建、拉取、删除等。

    1. docker build 从 Dockerfile 构建一个新的镜像。

      docker build -t myimage:latest .
    2. docker pull 从 Docker Hub 或其他仓库拉取一个镜像。

      docker pull nginx
    3. docker push 将本地镜像推送到远程仓库(需要先登录)。

      docker push myimage:latest
    4. docker images 列出本地所有镜像。

      [root@lutixia ~]# docker images
      REPOSITORY     TAG       IMAGE ID       CREATED         SIZE
      kindest/node   <none>    6e360fda99b5   12 months ago   850MB
      nginx          latest    eeb9db34b331   2 years ago     134MB
      busybox        1.28      89a35e2ebb6b   6 years ago     1.28MB
    5. docker rmi 删除一个本地镜像。

      [root@lutixia ~]# docker rmi busybox:1.28
      Untagged: busybox:1.28
      Untagged: busybox@sha256:141c253bc4c3fd0a201d32dc1f493bcf3fff003b6df416dea4f41046e0f37d47
      Deleted: sha256:89a35e2ebb6b938201966889b5e8c85b931db6432c5643966116cd1c28bf45cd
      Deleted: sha256:f4fc038e206e02964abd937c8071a34f1838e0693d2f38657b7d96528bd6dbaa
      [root@lutixia ~]#

    docker容器相关命令

    这些命令用于操作和管理容器内的进程和文件系统。

    1. docker exec 在一个运行中的容器中执行命令。

      [root@lutixia ~]# docker run -d --name mynginx nginx
      5408a427e54782c451b2e06011633ff103b155b5dac98ecf46bef6c71292b81b
      [root@lutixia ~]#
      [root@lutixia ~]# docker exec -it mynginx /bin/bash
      root@5408a427e547:/#
    2. docker logs 查看容器的日志。

      [root@lutixia ~]# docker logs mynginx
      /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
      /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
      /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
      10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
      10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
    3. docker inspect 查看容器的详细信息。

      [root@lutixia ~]# docker inspect mynginx
      [
      {
          "Id": "5408a427e54782c451b2e06011633ff103b155b5dac98ecf46bef6c71292b81b",
          "Created": "2024-06-15T06:56:38.001113943Z",
          "Path": "/docker-entrypoint.sh",
          "Args": [
              "nginx",
              "-g",
              "daemon off;"
          ],
          ...
    4. docker cp 在本地文件系统和容器之间复制文件。

      [root@lutixia ~]# docker cp mynginx:/etc/nginx/nginx.conf /tmp/
      Successfully copied 2.56kB to /tmp/
      [root@lutixia ~]#

    docker网络网络命令

    这些命令用于管理 Docker 的网络,包括创建、查看和删除网络等。

    1. docker network ls 列出所有 Docker 网络。

      [root@lutixia ~]# docker network ls
      NETWORK ID     NAME      DRIVER    SCOPE
      9e5b87fe35d0   bridge    bridge    local
      ea1cedb0b9bd   host      host      local
      218aeeb09820   kind      bridge    local
      c16474a0eb15   none      null      local
    2. docker network create 创建一个新的网络。

      [root@lutixia ~]# docker network create mynetwork
      c39babe9b3f988d64e4e2766c84d2e855a4e031d616ee2ac2b791ee8f470218d
    3. docker network inspect 查看网络的详细信息。

      [root@lutixia ~]# docker inspect network mynetwork
      [
      {
          "Name": "mynetwork",
          "Id":    "c39babe9b3f988d64e4e2766c84d2e855a4e031d616ee2ac2b791ee8f470218d",
          "Created": "2024-06-15T15:01:21.931487302+08:00",
          "Scope": "local",
          "Driver": "bridge",
          "EnableIPv6": false,   
          ...
    4. docker network connect 将一个容器连接到一个网络。

      [root@lutixia ~]# docker network connect mynetwork mynginx
      [root@lutixia ~]# docker inspect network mynetwork  | grep -iC 2 containers
             },
          "ConfigOnly": false,
          "Containers": {
              "5408a427e54782c451b2e06011633ff103b155b5dac98ecf46bef6c71292b81b": {
                  "Name": "mynginx",
    5. docker network disconnect 将一个容器从一个网络断开。

      [root@lutixia ~]# docker network  disconnect mynetwork mynginx
      [root@lutixia ~]#
      [root@lutixia ~]# docker inspect network mynetwork  | grep -iC 2 Containers
          },
          "ConfigOnly": false,
          "Containers": {},

    docker存储卷相关命令

    这些命令用于管理 Docker 的存储卷,包括创建、挂载和删除卷等。

    1. docker volume ls 列出所有存储卷。

      docker volume ls
    2. docker volume create 创建一个新的存储卷。

      docker volume create myvolume
    3. docker volume inspect 查看存储卷的详细信息。

      docker volume inspect myvolume
    4. docker volume rm 删除一个存储卷。

      docker volume rm myvolume
    5. 挂载存储卷到容器 在创建容器时,将存储卷挂载到容器中。

      docker run -d --name mynginx -v myvolume:/data nginx

    这些命令涵盖了 Docker 的主要操作,能够帮助你高效地管理镜像、容器、网络和存储卷。

  • 大模型研究

    qwen2-7b-instruct-fp16.gguf

    文件名解读

    qwen2-7b-instruct-fp16.gguf 这个文件名包含了几个部分,每个部分都提供了关于文件内容的信息。下面是对各部分的可能解释:

    1. qwen2:
      • 这可能是模型名称的一部分,或者是用于区分不同模型系列或版本的标识符。
    2. 7b:
      • 这个参数可能表示模型的参数量级,b 可能代表 billion(十亿)。所以 7b 可能意味着这个模型有 70 亿个参数。
    3. instruct:
      • 这可能指的是模型训练时使用的数据类型或任务类型。在这个上下文中,instruct 可能意味着模型是为指令遵循(instruction following)任务训练的,这种任务通常涉及到理解和执行自然语言指令。
    4. fp16:
      • 这通常表示模型权重的数据类型。FP16(16-bit floating-point)是一种用于存储和计算的半精度浮点数格式,比标准的 FP32(32-bit floating-point)占用更少的内存和存储空间,同时可以减少计算资源的使用,通常用于模型优化和加速。
    5. .gguf:
      • 这很可能是特定于应用程序或框架的文件扩展名,用于表示模型权重或配置的存储格式。这不是一个广泛认可的标准格式,可能是某个特定项目或组织自定义的格式。

    综上所述,qwen2-7b-instruct-fp16.gguf 可能是指一个具有 70 亿参数、为指令遵循任务训练、使用半精度浮点数存储权重,并以特定格式保存的模型文件。

    如果需要更详细的信息或确切的含义,可能需要查看相关的项目文档或联系文件的提供者。如果这个文件是您工作中的一部分,了解这些参数对于理解模型的能力和限制以及如何使用它进行进一步的训练或部署至关重要。

     

    qwen2-7b-instruct-q3_k_m.gguf

    1. q3:
      • 这可能表示模型的特定版本或质量级别。q 可能代表 “quality”(质量),而数字 3 可能表示第三级或第三个迭代。
    2. k:
      • 这个字母可能代表千字(kilo),在数字存储中通常表示 1024。在模型文件名中,k 可能用来表示某个特定的量化级别或模型大小的单位。
    3. m:
      • 这个字母可能代表百万(million),在数字存储中通常表示 1,000,000。它可能与 k 联合使用来描述模型的规模或参数数量。
    4. .gguf:
      • 这是文件扩展名,可能表示模型权重或配置的特定存储格式。如前所述,这不是一个标准格式,可能是特定于某个应用程序或框架的自定义格式。

    综上所述,qwen2-7b-instruct-q3_k_m.gguf 这个文件名可能指的是一个具有 70 亿参数、用于处理指令、质量级别为 3、具有特定量化级别或大小单位、并以 .gguf 格式存储的模型文件。

    请注意,这些解释是基于文件名中每个部分的常见用法和假设。确切的含义可能依赖于该模型的创建者或使用的具体上下文。如果需要准确的解释,最好咨询模型的开发者或维护者。

  • 在win上使用nasm写汇编

    安装mingw64,他是一个工具套件。没有去下载安装包或者下载源码去编译一个。

    安装nasm或者masm,前者是谷歌的,后者是微软的。

    把nasm和mingw64的bin目录都加入到环境变量里。

     

    这里以nasm为例。

    找个文件夹,在这个文件夹里创建一个test.asm文件,

    使用记事本或者vscode或者vs打开,

    内容写入

    
    section .text
       global _start     ;必须为链接器(ld)声明
    
    _start:             ;告诉链接器入口点
       mov  edx,len     ;消息长度
       mov  ecx,msg     ;写消息
       mov  ebx,1       ;文件描述符 (stdout)
       mov  eax,4       ;系统调用号 (sys_write)
       int  0x80        ;调用内核
    
       mov  eax,1       ;系统调用号 (sys_exit)
       int  0x80        ;调用内核
    
    section .data
    msg db 'Hello, world!', 0xa  ;要打印的字符串
    len equ $ - msg     ;字符串的长度

    cmd命令行执行以下命令,生成一个.o或.obj文件(.o或.obj都是一个意思)

    nasm -f win64 -o test.obj test.asm

     

  • py脚本打包py文件

    # 假设我们有一个非常小的Python脚本,我们想要将其转换为可执行文件
    # 首先,确保你的脚本是Python 2.7或Python 3.x兼容的
    
    # Python脚本内容(example_script.py):
    print("Hello, World!")
    
    # 使用PyInstaller将Python脚本转换为可执行文件
    # 安装PyInstaller:
    # pip install pyinstaller
    
    # 运行PyInstaller,创建一个单文件的可执行程序
    # 注意:--onefile选项会创建一个单文件的可执行程序
    pyinstaller_command = "pyinstaller --onefile 1.py"
    
    # 执行命令
    import subprocess
    subprocess.run(pyinstaller_command, shell=True)

     

  • 压缩exe python

    import subprocess
    # 使用UPX压缩生成的可执行文件
    upx_command = "upx -9 --force 1.exe"  # -9 是最高压缩率
    subprocess.run(upx_command, shell=True)
    
    print("可执行文件已生成并压缩。")

    需要安装upx

    https://github.com/upx/upx/releases/

  • mysql数据库主从配置

    我的主库ip:192.168.10.7
    我的主库ip:192.168.10.11

    主从的server_id不一致即可,只要你知道哪个是主库,哪个是从库就行
    主库my.ini配置mysqld里面增加:

    [mysqld]
    server_id=1
    log_bin=mysql-bin

    从库my.ini配置mysqld里面增加:

     

    [mysqld]
    server_id=2
    log_bin=mysql-bin

    主库创建用户:

    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
    

    给这个用户分配能够复制的权限:

    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

     

    主库查询2个字段File和Position:

     

    SHOW MASTER STATUS;

     

     File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000002 |     1042 |              |                  |                   |

    从库进入mysql设置主库的信息,执行以下命令:

    change master to
    master_host='192.168.10.7',
    master_user='repl',
    master_password='123456',
    master_port=3306,
    master_log_file='mysql-bin.000002', 
    master_log_pos=1042;

    从库开启同步:

    slave start;

    验证:

    现在去主库里创建一个数据库,就会发现从库也创建了一个数据库了.

  • ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)

    如果这个报错,没别的办法,只有先把mysql弄成一个服务启动了就行了.

  • phpstudy里面的mysql复制到另一个机器上运行报错

    停止mysql服务,

    压缩整个mysql,

    复制到另一台机器上,

    如果想要保存数据的话,把data文件夹里除了文件夹其他的东西能删掉的都删掉.

    然后到bin目录下进cmd,还能用以前的数据库账号和密码登录.

    若不想保留数据的话,重新初始化mysql.如何初始化百度一下

  • 取消提示:mysql: [Warning] Using a password on the command line interface can be insecure.

    目前使用的方法

    mysql路径 mysql用户账号密码配置文件的路径
    示例:
    E:\application\phpstudy_pro\Extensions\MySQL5.7.26\bin\mysql.exe --defaults-file="E:\application\phpstudy_pro\Extensions\MySQL5.7.26\my.cnf"

    my.cnf里面这样写

    [client]
    user=root
    password=123456

     

     

    在cmd里直接设置一个mysql密码的环境变量 MYSQL_PWD后面是你的数据库的密码

    set MYSQL_PWD=123456

    然后直接在cmd里输入用户名即可,例如

    mysql -u root

    若是想要弄一个bat脚本的话,你需要这样写:

    @echo off
    set MYSQL_PWD=123456
    start cmd /k "E:\application\phpstudy_pro\Extensions\MySQL5.7.26\bin\mysql.exe -u root -h 127.0.0.1"

     

  • js自定义html提示弹窗

    function alertTip(tipText){
    let customAlertDiv = document.getElementById('customAlert');
    var contentElement = customAlertDiv.querySelector('p');
    contentElement.textContent = tipText;
    customAlert.style.display = 'block';
    setTimeout(function() {
        customAlert.style.display = 'none';
    }, 1000);
    }

     

    <!-- 自定义提示弹窗的容器 -->
    <div id="customAlert">这是一段提示文本!</div>
    <style>
    /* 简单样式,用于美化提示弹窗 */
    #customAlert {
        display: none;
        position: fixed;
        top: 30%;
        left: 50%;
        transform: translateX(-50%);
        background-color: #f44336; /* 红色背景 */
        color: white;
        padding: 20px;
        z-index: 1000;
        border-radius: 5px;
        box-shadow: 0 4px 6px rgba(0,0,0,0.1);
        text-align: center;
    }
    </style>

    来自kimi的详细解释:

    这段代码定义了一个自定义的提示弹窗(通常称为模态框或对话框),包括HTML和CSS两个部分。下面是详细解释:

    HTML部分

    <!-- 自定义提示弹窗的容器 -->
    <div id="customAlert">这是一段提示文本!</div>

    这里定义了一个<div>元素,它用作提示弹窗的容器。这个<div>被赋予了一个ID customAlert,这个ID在后面的CSS和JavaScript中用来选择和操作这个元素。<div>中包含的文本”这是一段提示文本!”是弹窗显示的消息内容。

    CSS部分

    #customAlert {
        display: none;           /* 默认情况下弹窗不显示 */
        position: fixed;         /* 固定定位,相对于浏览器窗口定位 */
        top: 30%;                /* 垂直方向上距离窗口顶部30%的位置 */
        left: 50%;               /* 水平方向上距离窗口左侧50%的位置 */
        transform: translateX(-50%); /* 使用CSS的transform属性向左移动50%自身的宽度,实现水平居中 */
        background-color: #f44336; /* 弹窗的背景颜色为红色 */
        color: white;             /* 文字颜色为白色 */
        padding: 20px;            /* 内边距为20像素,增加点击区域和内容与边框的距离 */
        z-index: 1000;            /* 层级值为1000,确保弹窗显示在页面其他元素的上方 */
        border-radius: 5px;       /* 边框圆角为5像素,使弹窗边框看起来更平滑 */
        box-shadow: 0 4px 6px rgba(0,0,0,0.1); /* 阴影效果,增强立体感 */
        text-align: center;       /* 文本内容水平居中 */
    }

    CSS样式定义了#customAlert弹窗的外观和定位。使用了一些CSS3的特性,如transformbox-shadow,这些特性在现代浏览器中广泛支持,但在旧版IE中可能需要额外的polyfills或回退策略。

    工作原理

    • display: none; 确保在页面加载时弹窗是隐藏的。
    • position: fixed;  top, left, 和 transform 属性一起工作,将弹窗定位在浏览器窗口的中心。
    • background-color, color, padding, border-radius  box-shadow 属性用于美化弹窗,使其看起来更像一个模态框。
    • z-index 确保弹窗显示在页面上的其他元素之上。
    • text-align: center; 确保弹窗内的文本水平居中。

    使用方法

    要显示和隐藏这个自定义提示弹窗,你将需要使用JavaScript来添加事件监听器,并在适当的时机改变#customAlertdisplay样式。例如:

    function showAlert() {
        document.getElementById('customAlert').style.display = 'block';
    }
    
    function hideAlert() {
        document.getElementById('customAlert').style.display = 'none';
    }

    在实际应用中,你可能会将showAlerthideAlert函数绑定到按钮的点击事件或其他用户交互上,以便控制弹窗的显示和隐藏。