当前位置: 首页 > news >正文

【Docker】ubuntu中 Docker的使用

之前记录了 docker的安装 【环境配置】ubuntu中 Docker的安装;
本篇博客记录Dockerfile的示例,docker 的使用,包括镜像的构建、容器的启动、docker compose的使用等。

当安装好后,可查看docker的基本信息

docker info     ## 查看docker信息,在输出中,查找 Docker Root Dir 字段,它会显示 Docker 存储的根目录。
docker version  ## 查看docker版本

1 Dockerfile的编写

  • Dockerfile 的介绍
    Dockerfile是一个文本文件,其中包含了一系列指令,这些指令定义了如何从基础镜像创建一个新的Docker镜像。通过执行docker build命令,Docker会逐行解析Dockerfile中的指令,并逐步构建出镜像。
  • 镜像构建过程
    • 基础镜像:Dockerfile的第一条指令通常是FROM,用于指定基础镜像。基础镜像可以是官方提供的镜像(如ubuntu:20.04),也可以是其他自定义的镜像。
    • 安装依赖:使用RUN指令在镜像中执行命令,如安装软件包、配置环境等。
    • 复制文件:使用COPYADD指令将文件从宿主机复制到镜像中。
    • 设置环境变量:使用ENV指令设置环境变量。
    • 暴露端口:使用EXPOSE指令声明容器监听的端口。
    • 启动命令:使用CMDENTRYPOINT指令指定容器启动时执行的命令。
  • 记录一个实际工程的Dockerfile的例子
    # 1. 基础镜像
    FROM nvidia/cuda:11.2.2-cudnn8-runtime-ubuntu20.04# 2. 是一个构建参数,用于指定在构建Docker镜像时要克隆的GitHub仓库的特定分支或提交。
    ## main、develop、feature-add-new-model、release-v1.0、v1.0.0等
    ARG SEGMENT_ANYTHING_COMMIT=main# 3. 设置环境变量
    ## 设置非交互模式,避免在安装过程中出现交互式提示。
    ENV DEBIAN_FRONTEND=noninteractive  
    ## 设置应用程序目录为/DEMO。
    ENV APP_DIR=/DEMO
    ## 设置pip缓存目录为$HOME/.cache。
    ENV PIP_CACHE_DIR=/root/.cache# 4. 设置工作目录
    WORKDIR $APP_DIR# 5. 设置时区
    ## 在Docker镜像中设置时区为上海(Asia/Shanghai)
    RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone# 6. 配置APT源, 清理缓存(推荐)
    ## 将阿里云的APT源写入到/etc/apt/sources.list文件中。
    RUN echo "deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse" > /etc/apt/sources.list && \echo "deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse" >> /etc/apt/sources.list && \echo "deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse" >> /etc/apt/sources.list && \echo "deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse" >> /etc/apt/sources.list && \echo "deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse" >> /etc/apt/sources.list && \echo "deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse" >> /etc/apt/sources.list && \echo "deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse" >> /etc/apt/sources.list && \echo "deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse" >> /etc/apt/sources.list && \# 更新APT包列表。apt-get update && \# 安装curl。apt-get install -y --no-install-recommends curl && \# 清理已经下载的软件包文件。apt-get clean && \## 删除APT的软件包列表缓存,进一步释放空间。rm -rf /var/lib/apt/lists/*# 7. 安装基础工具和依赖库
    ## 更新APT包列表并安装依赖包,然后清理APT的软件包列表缓存。
    RUN apt-get update && \apt-get install --no-install-recommends --no-install-suggests -y \build-essential \libxml2-dev \libxslt-dev \zlib1g-dev \python3.9 \python3.9-distutils \python3.9-dev \git \libgl1 \libglib2.0-0 \libsm6 \libxrender1 \libxext6 && \apt-get clean && \rm -rf /var/lib/apt/lists/*# 8. 安装pip。## 下载get-pip.py到镜像中的当前目录
    RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \## 执行get-pip.py脚本安装pip。python3.9 get-pip.py && \## 删除get-pip.py脚本rm get-pip.py# 9. 升级 pip 并配置 pypi 源
    ## 创建符号链接,使/usr/bin/python指向/usr/bin/python3.9。
    RUN ln -s /usr/bin/python3.9 /usr/bin/python
    RUN pip install --upgrade pip && \pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple# 10. 库的安装
    COPY requirements.txt .
    ## 指定版本,兼容显卡驱动以及对应的cuda版本
    RUN pip3 install torch==1.12.1+cu113 torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113
    RUN pip install --no-cache-dir -r requirements.txt --timeout=120# 11. 复制应用代码
    COPY . .# 12. 暴露端口,并启动
    EXPOSE 4000
    CMD ["bash", "-c", "source config/config_${MODE}.env && python app.py --mode=${MODE}"]
    

2 镜像的相关命令

已知镜像的名字为 DEMO:v1.0,以此为例,相关操作命令如下。

  1. 镜像的创建
    • 基于现有镜像创建
      基于远程仓库中已有的 DEMO:v1.0 镜像来创建本地副本
      docker pull DEMO:v1.0
      
    • 构建新的镜像
      通过 Dockerfile 构建一个新的 DEMO:v1.0 镜像
      docker build -t DEMO:v1.0 .
      
      这里的 . 表示当前目录为上下文路径,Docker 会在这个路径下寻找 Dockerfile 来构建镜像
  2. 镜像的查询
    • 列出所有本地镜像
      要查看包括 DEMO:v1.0 在内的所有本地镜像
      docker images
      
    • 检查特定镜像详情
      为了获取 DEMO:v1.0 的详细信息
      docker inspect DEMO:v1.0
      
  3. 镜像的删除
    • 如果该镜像正在被某个容器使用,你需要先停止并移除那个容器,或者使用 -f 参数强制删除
      docker rmi -f DEMO:v1.0
      
    • 删除无标签镜像(悬空镜像)
      有时构建了多个镜像时,可能会留下一些没有标签的镜像,即悬空镜像。可以使用以下命令来清理它们:
      docker image prune -f
      
      上命令中的 -f 参数用于强制执行操作,不需要用户确认。在执行任何删除或修改操作之前,请确保你已经备份了重要数据,并且了解每个命令的影响。
    • 清理无用的镜像、容器、网络、卷
      docker system prune  
      

3 容器的相关命令

  1. 基于镜像 DEMO:v1.0 启动一个容器
    docker run --name demo \
    -p 4000:4000 \
    -v /host/data:/app/data \
    -e MODE=loc \
    -d \
    DEMO:v1.0
    
    • docker run
      启动一个新容器。
    • --name demo
      –name 用来为容器指定一个名称。在这个例子中,容器被命名为demo。这使得后续对容器的操作(如停止、删除等)更加直观和容易管理。
    • -p 4000:4000
      -p 参数用于将主机的端口映射到容器内的端口。这里的意思是将主机的 4000 端口映射到容器内部的 4000 端口。这意味着当有人访问主机的 4000 端口时,请求会被转发给运行在容器 4000 端口上的服务。
    • -v /host/data:/app/data
      -v 参数用于挂载卷,即把主机上的目录或文件映射到容器内的路径。此例中,它将主机上的 /host/data 目录挂载到了容器内的 /app/data 目录。这样做的好处是可以让容器访问主机的数据,反之亦然,这对于持久化数据或共享数据非常有用。
    • -e MODE=loc
      -e 参数用来设置环境变量。这里设置了名为 MODE 的环境变量,并赋予其值 loc。这个环境变量可以在容器内被应用程序读取,比如在启动脚本中使用 ${MODE} 来决定应用的行为模式(例如本地测试模式)。
    • -d
      -d 参数表示分离模式(detached mode),也就是后台运行。容器启动后会立即进入后台运行状态,而不会占用当前终端。
    • DEMO:v1.0
      这是要使用的 Docker 镜像的名字和标签。DEMO 是镜像名称,:v1.0 是标签,表示版本号。Docker 会尝试拉取或使用这个镜像来创建并启动新的容器。
  2. 查看容器状态
    • 列出所有正在运行的容器
      docker ps
      
    • 列出所有容器(包括已停止的)
      docker ps -a
      
    • 查看容器详细信息
      docker inspect my_demo_container
      
    • 查看容器运行日志
      docker logs my_demo_container
      
  3. 停止容器
    • 要停止一个正在运行的容器,可以使用它的名称或ID
      docker stop my_demo_container
      
  4. 重启容器
    • 要重启一个已经停止的容器,同样可以使用它的名称或ID
      docker restart my_demo_container
      
  5. 进入正在运行的容器
    • 如果需要进入一个已经在运行的容器,可以使用 exec 命令。这将在不中断容器服务的情况下为你提供一个交互式的 shell。
      docker exec -it my_demo_container /bin/bash
      
      若要查看容器中的pytorch版本,在上面命令基础上,再运行
      python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"
      
  6. 删除容器
    • 移除某个容器
      docker rm my_demo_containe
      
    • 强制删除容器
      如果需要强制删除一个正在运行的容器,可以加上 -f 参数:
      docker rm -f my_demo_container
      
    • 清理停止的容器
      当有很多已经停止的容器时,可以使用以下命令来清理它们:
      docker container prune
      
      以上命令会提示你确认是否要移除所有已经停止的容器。如果你不想看到提示,可以直接添加 -f 或者 --force 参数。
  7. 修改Dockerfile后重新构建镜像,需要更新容器
    • 先删除容器,忽略错误;然后运行新容器
      docker rm -f my_demo_container > /dev/null 2>&1 || :
      docker run -d -p 4000:4000 -e MODE=loc --name my_demo_container DEMO:v1.0
      
      • /dev/null 将标准输出重定向到 /dev/null,即丢弃标准输出。
      • 2>&1 将标准错误重定向到与标准输出相同的位置,也就是 /dev/null。这意味着无论是正常输出还是错误信息都将被丢弃,不会显示在终端上。
      • || : 如果前面的命令失败,则执行空命令 :,以防止因为错误而导致整个命令序列停止。

4 docker-compose 的使用

  1. 创建 docker-compose.yml 文件
    其中内容如下:
    services:
    oneapi:container_name: oneapiimage: justsong/one-api:latestrestart: unless-stoppednetwork_mode: bridge
    ports:- 3000:3000
    volumes:- /opt/ai-platform/lldataset/240/containerd/oneapi/data:/data
    environment:- TZ=Asia/Shanghai
    
    1. oneapi 服务名称。
    2. container_name: oneapi 容器名称。 明确指定了启动的容器将被命名为 oneapi。这有助于直接通过名称管理容器。
    3. image: justsong/one-api:latest 镜像。使用了特定的镜像,并使用 latest 标签。建议在生产环境中指定具体的版本标签而不是 latest,以避免意外拉取到不兼容的新版本。
    4. restart: unless-stopped 重启策略。设置了容器的重启策略为 unless-stopped,这意味着除非手动停止,否则容器会自动重启,包括系统重启后。
    5. network_mode: bridge 网络模式。使用默认的桥接网络模式。这是大多数情况下推荐的选择,因为它提供了良好的隔离性和灵活性。
    6. ports 端口映射。将主机的 3000 端口映射到容器内的 3000 端口。这允许外部访问运行在容器内的服务。
    7. volumes 卷挂载。挂载了主机路径 /opt/ai-platform/lldataset/240/containerd/oneapi/data 到容器内的 /data 目录。这对于持久化数据或共享文件非常重要。
    8. environment 环境变量。设置了时区环境变量 TZ=Asia/Shanghai,确保容器内的应用程序使用正确的时区设置。
  2. 验证配置文件
    启动服务之前,来检查和解析配置文件,这将帮助发现任何潜在的问题。
    docker compose config
    
  3. 准备环境
    确保所有依赖项都已准备好,比如:
    • 数据库或其他外部服务是否已经启动并可以访问。
    • 如果有 .env 文件,确保它已经创建并且包含所有必要的环境变量。
    • 确认主机上的目录(如卷挂载点 /opt/ai-platform/lldataset/240/containerd/oneapi/data)存在并且权限正确。
  4. 镜像的构建与服务的启动
    • 构建镜像
      docker-compose build
      
    • 启动服务
      docker-compose up       # 在前台启动服务,可以看到日志输出,方便调试。
      docker-compose up -d    # 在后台启动服务,并让其以后台模式运行。
      
    • 首次启动时构建镜像
      build 指令 将强制重新构建这些服务的镜像。即使已经存在本地镜像,也会根据 Dockerfile 重新构建。
      docker-compose up --build -d
      
    • 强制重新构建服务镜像
      强制重新构建服务镜像,即使这些镜像已经存在。这确保了所有最新的代码更改和依赖项都被包含在新镜像中。
      docker-compose up -d --build --force-recreate
      
  5. 验证服务状态
    • 查看服务状态
      验证服务是否正常启动
      docker-compose ps
      
    • 查看日志输出
      docker-compose logs -f
      
  6. 健康检查与测试
    • 确保服务按照预期工作。对于 Web 服务,可以通过浏览器或 curl 访问应用;对于数据库等服务,可以通过客户端工具连接并执行查询。
      测试 API 或 Web 应用: 打开浏览器或使用命令行工具访问服务端口(例如,如果你映射了 3000 端口,可以访问 http://localhost:3000)。
      # 测试服务是否正常工作
      curl http://localhost:3000
      
  7. 重启容器
    • 停止并重新启动所有服务
      如果想停止所有服务然后重新启动它们,可以使用以下命令。这个命令会先停止所有的服务,然后再启动它们。这对于需要重启整个应用堆栈的情况非常有用。
      docker-compose restart
      
    • 仅重启特定的服务
      如果只想重启某个特定的服务(例如 oneapi),可以指定服务名称:
      docker-compose restart oneapi
      
    • 完全停止并重新创建容器
      若需要完全停止并重新创建容器,这可以通过 down 和 up 命令的组合来实现。这通常用于在更改了配置文件或镜像后确保所有更改生效。
      # 停止并移除所有服务容器、网络及卷
      docker-compose down# 构建并启动服务,在后台运行
      docker-compose up -d --build
      

相关文章:

【Docker】ubuntu中 Docker的使用

之前记录了 docker的安装 【环境配置】ubuntu中 Docker的安装; 本篇博客记录Dockerfile的示例,docker 的使用,包括镜像的构建、容器的启动、docker compose的使用等。   当安装好后,可查看docker的基本信息 docker info ## 查…...

【数据结构篇】时间复杂度

一.数据结构前言 1.1 数据结构的概念 数据结构(Data Structure)是计算机存储、组织数据的⽅式,指相互之间存在⼀种或多种特定关系的数 据元素的集合。没有⼀种单⼀的数据结构对所有⽤途都有⽤,所以我们要学各式各样的数据结构, 如&#xff1a…...

linux 环境安装 dlib 的 gpu 版本

默认使用 pip 安装的 dlib 是不使用 gpu 的 在国内社区用百度查如何安装 gpu 版本的 dlib 感觉信息都不太对,都是说要源码编译还有点复杂 还需要自己安装 cuda 相关的包啥的,看着就头大 于是想到这个因该 conda 自己就支持了吧,然后查了一下…...

springboot集成钉钉,发送钉钉日报

目录 1.说明 2.示例 3.总结 1.说明 学习地图 - 钉钉开放平台 在钉钉开放文档中可以查看有关日志相关的api,主要用到以下几个api: ①获取模板详情 ②获取用户发送日志的概要信息 ③获取日志接收人员列表 ④创建日志 发送日志时需要根据模板规定日志…...

【机器学习】自定义数据集 使用scikit-learn中svm的包实现svm分类

一、支持向量机(support vector machines. ,SVM)概念 1. SVM 绪论 支持向量机(SVM)的核心思想是找到一个最优的超平面,将不同类别的数据点分开。SVM 的关键特点包括: ① 分类与回归: SVM 可以用于分类&a…...

快速提升网站收录:利用网站历史数据

本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/38.html 利用网站历史数据可以有效提升网站的收录速度,以下是一些具体的策略和方法: 一、理解网站历史数据的重要性 网站历史数据记录了网站过去的运营情况、用户行…...

【Git】初识Git Git基本操作详解

文章目录 学习目标Ⅰ. 初始 Git💥注意事项 Ⅱ. Git 安装Linux-centos安装Git Ⅲ. Git基本操作一、创建git本地仓库 -- git init二、配置 Git -- git config三、认识工作区、暂存区、版本库① 工作区② 暂存区③ 版本库④ 三者的关系 四、添加、提交更改、查看提交日…...

Python NumPy(11):NumPy 排序、条件筛选函数

1 NumPy 排序、条件筛选函数 NumPy 提供了多种排序的方法。 这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能,所需的工作空间和算法的稳定性。 下表显示了三种排序算法的比较。 种类速度最坏情况工作空间稳定性…...

AJAX综合案例——图书管理

黑马程序员视频地址: AJAX-Day02-10.案例_图书管理AJAX-Day02-10.案例_图书管理_总结_V1.0是黑马程序员前端AJAX入门到实战全套教程,包含学前端框架必会的(ajaxnode.jswebpackgit),一套全覆盖的第25集视频&#xff0c…...

JDK自带工具解析与生产问题定位指南(一)

1. 引言 Java开发工具包(JDK)内置了强大的诊断工具集,用于监控、分析和调试Java应用程序。这些工具涵盖了从进程管理、内存分析到性能监控的各个方面。本文将介绍一些最常用的Java开发工具,包括jps、jmap、jstat、jcmd、jstack、…...

FPGA 使用 CLOCK_DEDICATED_ROUTE 约束

使用 CLOCK_DEDICATED_ROUTE 约束 CLOCK_DEDICATED_ROUTE 约束通常在从一个时钟区域中的时钟缓存驱动到另一个时钟区域中的 MMCM 或 PLL 时使 用。默认情况下, CLOCK_DEDICATED_ROUTE 约束设置为 TRUE ,并且缓存 /MMCM 或 PLL 对必须布局在相同…...

《解锁AI黑科技:数据分类聚类与可视化》

在当今数字化时代,数据如潮水般涌来,如何从海量数据中提取有价值的信息,成为了众多领域面临的关键挑战。人工智能(AI)技术的崛起,为解决这一难题提供了强大的工具。其中,能够实现数据分类与聚类…...

Java小白入门教程:Object

目录 一、定义 二、作用 三、使用场景 四、语法以及示例 1、创建Object类型的对象 2、使用 toString()方法 3、使用 equals()方法 4、使用 hashCode()方法 5、使用 getClass()方法 6、使用 clone()方法 7、使用 finalize()方法 一、定义 在Java中, object…...

记6(人工神经网络

目录 1、M-P神经元2、感知机3、Delta法则4、前馈型神经网络(Feedforward Neural Networks)5、鸢尾花数据集——单层前馈型神经网络:6、多层神经网络:增加隐含层7、实现异或运算(01、10为1,00、11为0)8、线性…...

stm32硬件实现与w25qxx通信

使用的型号为stm32f103c8t6与w25q64。 STM32CubeMX配置与引脚衔接 根据stm32f103c8t6引脚手册,采用B12-B15四个引脚与W25Q64连接,实现SPI通信。 W25Q64SCK(CLK)PB13MOSI(DI)PB15MISO(DO)PB14CS&#xff08…...

编程题-最接近的三数之和

题目: 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 解法一(排序双指针): 题目要求找…...

索引的底层数据结构、B+树的结构、为什么InnoDB使用B+树而不是B树呢

索引的底层数据结构 MySQL中常用的是Hash索引和B树索引 Hash索引:基于哈希表实现的,查找速度非常快,但是由于哈希表的特性,不支持范围查找和排序,在MySQL中支持的哈希索引是自适应的,不能手动创建 B树的…...

【工欲善其事】利用 DeepSeek 实现复杂 Git 操作:从原项目剥离出子版本树并同步到新的代码库中

文章目录 利用 DeepSeek 实现复杂 Git 操作1 背景介绍2 需求描述3 思路分析4 实现过程4.1 第一次需求确认4.2 第二次需求确认4.3 第三次需求确认4.4 V3 模型:中间结果的处理4.5 方案验证,首战告捷 5 总结复盘 利用 DeepSeek 实现复杂 Git 操作 1 背景介绍…...

网络编程套接字(中)

文章目录 🍏简单的TCP网络程序服务端创建套接字服务端绑定服务端监听服务端获取连接服务端处理请求客户端创建套接字客户端连接服务器客户端发起请求服务器测试单执行流服务器的弊端 🍐多进程版的TCP网络程序捕捉SIGCHLD信号让孙子进程提供服务 &#x1…...

前端学习-事件委托(三十)

目录 前言 课前思考 for循环注册事件 语法 事件委托 1.事件委托的好处是什么? 2.事件委托是委托给了谁,父元素还是子元素 3.如何找到真正触发的元素 示例代码 总结 前言 才子佳人,自是白衣卿相 课前思考 1.如果同时给多个元素注册事件&…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...