Docker 基础入门

Docker 基础入门

前言

在云计算和微服务架构日益盛行的今天,软件开发与部署的效率和灵活性成为了企业竞争力的关键因素之一。Docker,作为一种开源的容器化平台,凭借其轻量级、可移植性和易于管理的特性,迅速成为现代软件开发和运维领域的宠儿。本文主要总结一些 Docker 的基本概念、核心优势、应用场景以及记录如何使用 Docker 来优化软件开发与部署流程。

基本概念

Docker是一种开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源,它允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中,然后发布到任何支持 Docker 的平台上。这个容器包含了应用运行所需的所有组件,如代码、运行时库、系统工具和配置文件等,确保了应用在不同环境中的一致性和可靠性。

  • 镜像(Image):Docker 镜像是一个只读模板,包含了创建 Docker 容器所需的指令集。它类似于一个轻量级的、独立的操作系统环境。
  • 容器(Container):容器是镜像的运行实例。通过运行镜像,可以创建一个或多个容器,每个容器都是相互隔离的,但共享同一个操作系统的内核。
  • 仓库(Registry):Docker 仓库用于存储和分发 Docker 镜像。Docker Hub是最知名的公共仓库之一,用户也可以搭建私有仓库来存储敏感或专有镜像。

核心优势

  • 环境一致性:Docker 容器确保了开发、测试和生产环境的一致性,减少了 “在我机器上就能跑” 的问题。
  • 资源隔离:容器之间彼此隔离,提高了系统的安全性和稳定性,即使一个容器出现问题,也不会影响到其他容器或宿主机。
  • 高效利用资源:相比虚拟机,Docker 容器更加轻量级,因为它们共享宿主机的操作系统内核,启动速度更快,资源占用更少。
  • 易于部署和扩展:通过 Docker Compose 和 Kubernetes 等工具,可以轻松实现应用的编排、部署和自动扩展。
  • 跨平台兼容性:Docker 容器可以在任何支持 Docker 的操作系统上运行,无论是 Windows、Linux 还是 macOS,极大地提高了应用的可移植性。

应用场景

  • 微服务架构:Docker 是实现微服务架构的理想工具,每个微服务可以作为一个独立的容器运行,便于管理和扩展。
  • 持续集成/持续部署(CI/CD):Docker 简化了构建、测试和部署流程,使得自动化部署成为可能,加速了软件交付周期。
  • 大数据处理:Docker 容器可以用于部署大数据处理框架,如Hadoop、Spark等,提高数据处理效率和灵活性。
  • 开发环境管理:开发者可以使用 Docker 快速搭建开发环境,确保团队成员使用相同的环境配置,减少环境差异带来的问题。
  • 边缘计算和物联网:Docker的轻量级和跨平台特性使其成为边缘计算和物联网设备部署的理想选择。

如何使用 Docker

安装Docker

sudo apt-get update
​
#移除老版本的docker
sudo apt-get remove docker docker-engine docker.io containerd runc
​
#安装HTTPS相关包
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
​
#添加Docker的官方GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
​
#验证指纹
sudo apt-key fingerprint 0EBFCD88
​
#设置稳定版repo
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"#安装Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
​
#验证安装成功
sudo docker run hello-world

设置非root账户去管理Docker

sudo groupadd docker
sudo usermod -aG docker $USER  #$USER替换为ubuntu当前用户名
newgrp docker#验证非root账户运行docker hello-world容器
docker run hello-world

Docker 的基础操作

我们通过一个实例来熟悉下 docker 的基础操作。

镜像操作:

  • 拉取镜像,比如说 Ubuntu 22.04 镜像:
    docker pull ubuntu:22.04
    
  • 通过 docker images 我们可以看到当前docker 的所有镜像,包括我们刚拉取的 ubuntu:22.04
    docker images 
    
  • 通过 docker run 创建并启动一个新的 Ubuntu 22.04 容器实例,并以交互模式运行,分配一个伪终端。
    docker run -it ubuntu:22.04 /bin/bash 
    docker run -it --rm ubuntu:22.04 /bin/bash # 使用 --rm 在容器退出后自动删除容器# 使用 -v 将本机 ${HOME}/.ssh 挂载到容器 /home/syrius/.ssh,共享本机的 ssh 配置
    docker run -it --rm -v ${HOME}/.ssh:/home/syrius/.ssh -v ${HOME}/.aws:/home/syrius/.aws ubuntu:22.04 /bin/bash# 使用 -u 指定用户,前提是镜像内部有这个用户,用户 id 需要在构建镜像时指定
    docker run -it --rm -u 1000:1000 ubuntu:22.04 /bin/bash
    
  • Docker 容器默认有一定的资源限制(如CPU、内存等)。如果需要,也可以通过 docker run 命令的参数来调整这些限制。
    # 限制容器最多使用0.5个CPU核心
    docker run --cpus=0.5 ...# 查看内存大小
    free -h # 限制容器最多使用512MB的内存
    docker run --memory=512m ...# 设置容器最多使用1GB的虚拟内存(内存+交换空间)总量,--memory-swap的值必须大于--memory的值
    docker run --memory=512m --memory-swap=1g ...
    

容器操作:

  • 查看所有容器
    docker ps -a
    
  • 将本机上的目录 lorawan/yocto_ws 复制到容器 <container_id> 根目录下的 lorawan 目录。(更好的方法是使用卷)
    docker cp lorawan/yocto_ws <container_id>:/lorawan/
    
  • 根据 container_id 进入特定容器
    docker exec -it <container_name_or_id> /bin/bash
    
  • 退出容器,直接在容器内执行 exit
    exit 
    

注意不要与 docker run 混淆,docker run 是根据镜像创建一个新的容器,每个容器之间的修改是独立的;通过 docker exec 可以进入已存在的容器去继续修改。

管理容器

Docker提供了一系列命令来管理容器,如查看容器列表(docker ps)、停止容器(docker stop)、删除容器(docker rm)等。

  • 持久化存储:如果编译生成的文件需要在容器外部访问或持久化存储,可以使用 Docker 的卷(Volume)功能。
  • docker stats,查看所有正在运行的容器的CPU和内存使用情况的实时更新。输出将包括容器的ID、名称、CPU使用率、内存使用量、内存限制、内存使用率、网络I/O、磁盘I/O以及进程数等信息。
  • docker ps,查看正在运行的容器,使用
  • docker stop ,停止容器
  • docker rm ,删除容器
  • docker images,查看本地镜像

使用 Docker Compose

  • Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具,通过编写 docker-compose.yml 文件,可以方便地管理多个容器的启动、停止和连接。一个简单的 docker-compose.yml 定义是这样的:

    version: '3.0'   # 使用适当的 Compose 文件格式版本  services:  dev:  image: yocto_chirpstack:1.0.0	# 替换为你的镜像名称 volumes:  - ~/.ssh:/home/syrius/.ssh	# 挂载卷到容器内路径- ~/.gitconfig:/home/syrius/.gitconfig
    
    • ~/.ssh:/home/syrius/.ssh:这个卷将主机上的 ~/.ssh 目录挂载到容器内的 /home/syrius/.ssh 目录。这允许容器访问主机的 SSH 密钥,以便容器可以执行需要 SSH 认证的操作(例如,从私有 Git 仓库拉取代码)。
    • ~/.gitconfig:/home/syrius/.gitconfig:这个卷将主机上的 ~/.gitconfig 文件挂载到容器内的 /home/syrius/.gitconfig 文件。这允许容器使用主机的 Git 配置,包括用户名和电子邮件地址等身份信息。
  • 执行特定的服务(在这个例子中是 dev 服务),启动一个 Bash shell,并且该服务容器在命令执行完毕后会被自动删除(由于 --rm 选项)。

    docker-compose -f docker-compose.yaml run --rm dev
    

Docker 如何保存对容器/镜像的修改

  • docker images 查看要修改的镜像。
    在这里插入图片描述
  • docker run -it ubuntu:22.04/bin/bash 以交互式方式启动镜像。
  • 进入容器后,修改镜像,比如修改镜像中已经部署的代码或者安装新的软件或包等。
  • 修改完成之后,键入exit, 退出当前交互式容器。
  • docker ps -a 查看所有容器。
  • docker commit <container_id> test:v1.0 保存对镜像容器的修改,新的镜像名称为 test,版本为 v1.0.0。
    在这里插入图片描述
  • 停止并删除相关容器(如果镜像正在被容器使用):
    • 使用 docker stop <container_id>来停止容器。
    • 使用 docker rm <container_id>来删除容器。
  • 删除镜像,镜像删除前需要先删除镜像的容器:
    • 使用 docker rmi <image_id> 或 docker image rm <image_id> 来删除镜像。
    • 也可以通过镜像名称来删除,例如docker rmi ubuntu:22.04(如果这是你要删除的镜像)。

构建镜像

创建 Dockerfile

Dockerfile 是一个文本文件,包含了构建 Docker 镜像所需的所有指令。通过编写 Dockerfile,可以定义镜像的基础镜像、需要安装的包、执行的命令等。比如说在基础 ubuntu22.04 镜像系统上搭建基于 yocto 的 lorawan chirpstack 协议栈的编译环境,Dockerfile 可以这么写:

# 使用官方的 Ubuntu 22.04 镜像作为基础镜像 
FROM ubuntu:22.04  # 设置用户名全局变量
ENV USER_NAME=ubuntu# 定义时区为亚洲上海
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone# 安装一些必要软件
RUN apt-get update && \  apt-get install -y sudo gawk wget git diffstat unzip texinfo gcc build-essential chrpath \socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping \python3-git python3-jinja2 python3-subunit zstd liblz4-tool file locales libacl1 && \locale-gen en_US.UTF-8 && \pip3 install west # 创建一个新用户,并且配置所有 sudo 操作都不需要密码  
RUN useradd -m -s /bin/bash ${USER_NAME} && echo 'syrius    ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers# 复制文件到镜像中(这个操作是以 root 用户身份执行的) 
COPY build/downloads /home/${USER_NAME}/lorawan/build/downloads# 修改目录用户组权限,要在 USER ${USER_NAME} 之前,否则无权限
RUN chown -R ${USER_NAME}:${USER_NAME} /home/${USER_NAME}/lorawan# 设置后续指令的执行用户为 ubuntu
USER ${USER_NAME}  # 设置工作目录(这个目录将属于 root 用户,因为 COPY 指令是在 USER 指令之前执行的
WORKDIR /home/${USER_NAME}  
  • COPY 指令不受 USER 指令的直接影响。在 Dockerfile 中,COPY 指令用于将文件或目录从构建上下文(通常是 Dockerfile 所在的目录及其子目录)复制到镜像中指定的路径。这个操作是在 Docker 引擎构建镜像时执行的,而且默认是以 root 用户的身份执行的,无论 USER 指令是否已经在 Dockerfile 中出现。
  • USER 指令用于设置后续指令(以及容器启动时默认的用户)的执行用户。这意味着,在 USER 指令之后的 RUN、CMD、ENTRYPOINT 等指令将以指定的用户身份执行。如果 USER 指令之后没有更多的指令,那么它主要影响的是容器启动时的默认用户。

使用 docker build 命令根据当前目录下的 Dockerfile 构建镜像。

docker build -t chirpstack:1.0.0 .

在这里插入图片描述

镜像上传

要将 Docker 镜像上传到 Docker Hub 的指定仓库,我们需要按照以下步骤操作:

  • 登录到 Docker Hub,输入 Docker Hub 用户名和密码
    在这里插入图片描述

当前中国境内已经无法直接访问 Docker Hub 了,所以这里可能会登录超时。需要配置 docker 代理1才行。

  • 标记(Tag)镜像:

    • 在上传镜像之前,需要给镜像打上一个标签(Tag),这个标签包括要上传到的 Docker Hub 用户名(或组织名)和仓库名,以及一个可选的标签(通常是版本号,如 latest)。
      docker tag [本地镜像名]:[本地标签] [dockerhub用户名]/[仓库名]:[标签]# 例如,如果有一个名为 my-app 的镜像,并且你想将它上传到名为 my-repo 的仓库中,标签为 latest
      docker tag my-app:latest my-dockerhub-username/my-repo:latest
      
  • 推送(Push)镜像,使用 docker push 命令将标记好的镜像推送到 Docker Hub。

    docker push [dockerhub用户名]/[仓库名]:[标签]# 继续上面的例子:
    docker push my-dockerhub-username/my-repo:latest
    
  • 验证上传:推送完成后,可以登录到 Docker Hub,并导航到仓库页面,确认镜像是否已成功上传。

以上步骤假设我们已经有一个 Docker Hub 账户,并且已经创建了一个仓库(虽然 Docker Hub 允许我们在推送镜像时自动创建仓库,但手动创建仓库可以提前设置好仓库的可见性和描述等信息)。

在这里插入图片描述

扩展

将 Docker 镜像推送到亚马逊 ECR 私有存储库

# 使用 AWS CLI 获取登录凭证
aws ecr get-login-password --region cn-northwest-1 | docker login --username AWS --password-stdin 633349536424.dkr.ecr.cn-northwest-1.amazonaws.com.cn# 列出 cn-northwest-1 区域下的所有 ECR 仓库
aws ecr describe-repositories --region cn-northwest-1# 列出 cn-northwest-1 区域下的所有 ECR 仓库的名称
aws ecr describe-repositories --region cn-northwest-1 | jq -r '.repositories[].repositoryName'# 查看是否存在 embedded/yocto 仓库
aws ecr describe-repositories --region cn-northwest-1 | jq -r '.repositories[].repositoryName' | grep "embedded/yocto"# 标记并推送镜像
# 633349536424.dkr.ecr.cn-northwest-1.amazonaws.com.cn 是远程镜像仓库的地址,这个地址指向AWS Elastic Container Registry(ECR)在中国(宁夏)区域(cn-northwest-1)的一个特定仓库。
# embedded/yocto 是远程仓库中的路径和仓库名称,用于组织和管理不同项目或团队的镜像。
docker tag chenqinhu/yocto:latest 633349536424.dkr.ecr.cn-northwest-1.amazonaws.com.cn/embedded/yocto:chirpstack-1.0.0
docker push 633349536424.dkr.ecr.cn-northwest-1.amazonaws.com.cn/embedded/yocto:chirpstack-1.0.0

配置 docker 代理

  • 移除 Docker 守护进程配置文件,或配置文件里的代理配置(如果有的话),因为这里的配置会覆盖下面的配置。

    sudo rm /etc/docker/daemon.json
    
  • 创建配置文件

    sudo mkdir -p /etc/systemd/system/docker.service.d
    sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
    
  • 添加配置

    [Service]
    Environment="HTTP_PROXY=http://127.0.0.1:1080"
    Environment="HTTPS_PROXY=http://127.0.0.1:1080"
    Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp,"
    
    • IP 和端口需要根据自己的代理修改,比如我是在 wsl2 上的 ubuntu 使用的 docker,我的代理 IP和端口可以在 windows ,<控制面板> <网络和 Internet> <Internet 选项> <连接> <局域网设置> 里看到。
      在这里插入图片描述
    • 我们可以简单使用 curl -x 127.0.0.1:10809 www.google.com 来验证 wsl 里的 ubuntu 代理是走通的,不要使用 ping,ping 不通过代理。
  • 重启容器

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
  • 查看代理是否生效
    在这里插入图片描述
    在这里插入图片描述

  • dockerhub 登录成功,说明 docker 的代理起作用了。


  1. ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/58147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[云] 大数据分析栈(Big Data Analytics Stack)+ Apache Hadoop分布式文件系统(HDFS)+Apache Spark

任务概述 本次作业旨在帮助你理解大数据分析栈&#xff08;Big Data Analytics Stack&#xff09;的工作原理&#xff0c;并通过实际操作加深认识。你将搭建Apache Hadoop分布式文件系统&#xff08;HDFS&#xff09;作为底层文件系统&#xff0c;并将Apache Spark作为执行引擎…

Linux第二讲:Linux权限理解

Linux第二讲&#xff1a;Linux权限理解 1.shell命令以及运行原理2.Linux权限2.1什么是权限2.2认识人 -- 用户、普通用户、root用户&#xff0c;以及用户之间的切换2.3文件属性2.4文件权限知识点补充2.4.1知识点一2.4.2知识点二2.4.3知识点三2.4.4知识点四 3.角色的修改4.关于权…

Puppeteer 与浏览器版本兼容性:自动化测试的最佳实践

Puppeteer 支持的浏览器版本映射&#xff1a;从 v20.0.0 到 v23.6.0 自 Puppeteer v20.0.0 起&#xff0c;这个强大的自动化库开始支持与 Chrome 浏览器的无头模式和有头模式共享相同代码路径&#xff0c;为自动化测试带来了更多便利。从 v23.0.0 开始&#xff0c;Puppeteer 进…

可私有化部署的集装箱箱号自动识别技术,提供API 接口

启智集装箱箱号自动识别技术特点&#xff1a; 集装箱箱号自动识别技术为通过手机、相机等拍摄集装箱号码后进行视频处理或图像的去燥、纠偏、二值化等分析后进行字符的识别&#xff0c;箱号识别具有以下特点&#xff1a; 1&#xff09;快速&#xff1a;自动实时识别&#xff0c…

行为设计模式 -责任链模式- JAVA

责任链设计模式 一 .简介二. 案例2.1 抽象处理者(Handler)角色2.2 具体处理者(ConcreteHandler)角色2.3 测试 三. 结论3.1 优缺点3.2 示例3.3 要点 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神…

智能优化算法-狐狸优化算法(FOX)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1.内容介绍 狐狸优化算法 (Fox Optimization Algorithm, FOX) 是一种基于群体智能的元启发式优化算法&#xff0c;它模拟了狐狸的捕食行为、社会互动和环境适应能力&#xff0c;用于解决复杂的优化问题。 FOX的工作机制主要…

MR20一体式远程IO模块:引领工业自动化的创新之选

在快速发展的工业自动化领域&#xff0c;高效、可靠且易于维护的IO模块成为了众多企业的首选。其中&#xff0c;MR20系列一体式远程IO模块凭借其卓越的性能和人性化的设计&#xff0c;在众多IO模块中脱颖而出&#xff0c;成为工业自动化领域的璀璨明星。 小巧体积&#xff0c;高…

【CSS3】css开篇基础(4)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

[免费]SpringBoot+Vue智慧校园(校园管理)系统[论文+源码+SQL脚本]

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue智慧校园(校园管理)系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue智慧校园(校园管理)系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息技术的迅猛发展&#xff0c…

3DS MAX三维建模平面基础与修改工具(图形编辑与二维建模修改工具)

又是一年1024祝大家程序员节日快乐 3DS MAX三维建模平面基础与修改工具&#xff08;图形编辑与二维建模修改工具&#xff09; 欢迎大家来学习3DS MAX教程&#xff0c;在这里先说一下研究好3ds Max一定要一边看教程一边要自己学的操作才能更快的进步&#xff0c;预祝大家学习顺利…

Linux 进程间通信_匿名管道

1.程间通信目的 : 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程 资源共享&#xff1a;多个进程之间共享同样的资源。 通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它&#xff08;它们&#xff09;发生了某种事件&#xff08;如…

家庭网络光猫到客厅通过VLAN实现单线复用

大部分家庭装修时没有提前考虑网线分布&#xff0c;一般装修公司都是从各个房间拉一根网线到弱电箱&#xff0c;就结束了&#xff0c;如下图。但是弱电箱在大部分家庭&#xff0c;空间非常小&#xff0c;很难放下一些常见的路由器&#xff0c;花大价钱买了个路由器作为主路由&a…

【C++】继承与模板

继承 1.继承的概念 概念&#xff1a;继承(inheritace)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称之为派生类。继承呈现了面向对象程序设计的…

信息安全工程师(68)可信计算技术与应用

前言 可信计算技术是一种计算机安全体系结构&#xff0c;旨在提高计算机系统在面临各种攻击和威胁时的安全性和保密性。 一、可信计算技术的定义与原理 可信计算技术通过包括硬件加密、受限访问以及计算机系统本身的完整性验证等技术手段&#xff0c;确保计算机系统在各种攻击和…

融合DevOps打造企业高效流程体系的实践与探索

一、引言 转眼间&#xff0c;我已毕业十多年&#xff0c;在IT领域深耕不辍&#xff0c;曾涉足全栈研发、大数据研发、架构设计与项目管理等多个岗位&#xff0c;更主导过公司从市场到交付再到运营的全链条流程建设。在这漫长的职业生涯中&#xff0c;一个问题始终萦绕在我心头&…

Linux安装部署数据库:PostgreSQL14

Linux安装部署数据库&#xff1a;PostgreSQL14 一、安装环境1、虚拟机环境2、下载安装包 二、安装步骤1、在线安装 PGSQL2、离线安装 PGSQL3、源码安装 PGSQL 三、基本操作1、初始化配置2、数据库登录3、常用命令项 四、常见问题1、对用户 "postgres" 的对等认证失败…

App测试环境部署

一.JDK安装 参考以下AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载 二.SDK安装 安装地址&#xff1a;https://www.androiddevtools.cn/ 解压 环境变量配置 变量名&#xff1a;ANDROID_SDK_HOME 参考步骤&#xff1a; A…

3GPP协议解读_NTN系列(一)_38.811_非地面网络(NTN)的背景、应用场景和信道建模

非地面网络 1. Scope4. 非地面网络背景介绍4.1 5G中的非地面网络4.2 非地面网络在5G中的用例4.3 卫星和空中接入网的架构4.4 卫星和空中接入网终端的特点4.5 空气/星载飞行器特性4.6 NTN的覆盖模式4.7 NTN网络架构选项4.8 频谱 5. 非地面网络应用场景5.1 应用场景概览5.2 属性介…

CHAPTER 14 Nonlinearity and Mismatc

CHAPTER 14 Nonlinearity and Mismatch 第6,7章我们介绍了两种非理想: 频率响应和噪声. 这一章我们介绍另外两种非理想现象: 非线性和失配. 我们首先定量化nonlinearity, 学习差分电路和反馈系统的非线性, 以及线性化技术. 然后学习差分电路中的失配和dc offset. 最后学习一些…

51单片机之蜂鸣器驱动

1.简介 蜂鸣器是一种一体化结构的电子讯响器&#xff0c;采用直流电压供电&#xff0c;广泛应用于计算机、打印机、 复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。   压电式蜂鸣器主要…