【Docker】Linux中Docker镜像结构及自定义镜像,并且上传仓库可提供使用

目录

一、镜像结构

1. 基本结构

2. 常用命令

二、自定义镜像

1. 基本镜像

2. 进阶镜像

3. 完善镜像

三、镜像上传仓库

每篇一获


一、镜像结构

自定义 Docker 镜像有很多用途,以下是一些主要的应用场景:

  1. 一致性环境:通过自定义镜像,您可以确保您的应用在不同的环境中(开发、测试、生产等)运行在完全一致的环境中。这可以避免"在我机器上可以运行"的问题。

  2. 快速部署:自定义镜像包含了运行应用所需的所有依赖,这使得部署过程变得非常快速和简单。只需运行一个命令,就可以在任何安装了 Docker 的机器上启动应用。

  3. 版本控制和回滚:每个 Docker 镜像都有一个唯一的标签,这使得版本控制变得非常简单。如果新版本的应用有问题,您可以很容易地回滚到旧版本的镜像。

  4. 微服务架构:在微服务架构中,每个服务都可以有自己的 Docker 镜像。这使得每个服务可以独立地更新和扩展,而不会影响其他服务。

  5. 持续集成/持续部署(CI/CD):在 CI/CD 管道中,自定义镜像可以用于构建、测试和部署应用。这使得整个开发过程更加自动化,提高了开发效率。

1. 基本结构

Dockerfile 是一个文本文件,它包含了一组用户可以调用来创建镜像的指令。以下是 Dockerfile 的基本结构:

  1. FROM:指定基础镜像,所有操作都基于这个基础镜像。例如:FROM ubuntu:18.04

  2. LABEL:为镜像添加元数据及声明镜像的作者或者维护者的信息。

  3. RUN:在镜像中运行命令,这些命令会在新的层上创建新的镜像。例如:RUN apt-get update

  4. CMD:提供容器默认的可执行程序,可以包含可执行程序,也可以省略,如果省略,则必须在运行时通过命令行指定。例如:CMD ["executable","param1","param2"]

  5. EXPOSE:声明运行时容器提供服务的网络端口。例如:EXPOSE 8080

  6. ENV:设置环境变量。例如:ENV myName="John Doe" myDog=Rex\ The\ Dog

  7. ADD 和 COPY:将文件从 Docker 主机复制到 Docker 镜像中。ADD 有自动解压缩功能,COPY 则更为直接明了。

  8. ENTRYPOINT:配置容器启动后执行的命令,并且不会被 docker run 提供的参数覆盖。

  9. VOLUME:创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保存的数据等。

  10. WORKDIR:设置工作目录,所有后续的操作(CMD、ENTRYPOINT、COPY 和 ADD)都会在这个目录下进行。

  11. USER:设置运行容器时的用户名或 UID。

  12. ONBUILD:当构建一个被继承的 Dockerfile 时运行命令,该指令添加到镜像中,稍后触发。

  13. MAINTAINER :用于声明镜像的作者或者维护者的信息,它可以为使用者提供一种联系镜像创建者的方式。

需要注意的是,MAINTAINER 从 Docker 1.13.0 开始,这个指令已经被标记为已废弃,推荐使用 LABEL 指令来替代。

例:

MAINTAINER John Doe <john.doe@example.com>

 如:

LABEL maintainer="John Doe <john.doe@example.com>"

LABEL 指令可以用于添加更多的元数据到镜像中,比如版本号、构建日期等等。

这些指令在 Dockerfile 中按照从上到下的顺序执行。每个指令都会在镜像上创建一个新的层,然后提交。

案例:

# 基于官方的 JDK 镜像
FROM openjdk:8-jdk
# 设置环境变量
ENV CATALINA_HOME /usr/local/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
# 安装 MySQL
RUN apt-get update && apt-get install -y mysql-server
# 安装 Tomcat
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME
RUN curl -O https://downloads.apache.org/tomcat/tomcat-8/v8.5.61/bin/apache-tomcat-8.5.61.tar.gz \
&& tar -xvf apache-tomcat-8.5.61.tar.gz \
&& rm apache-tomcat-8.5.61.tar.gz
# 暴露端口
EXPOSE 8080
# 启动 Tomcat
CMD ["catalina.sh", "run"]

这个 Dockerfile 会创建一个包含 JDK、MySQL 和 Tomcat 的 Docker 镜像。在构建镜像时,它会先从 Docker Hub 下载官方的 JDK 镜像作为基础镜像,然后安装 MySQL,接着下载并安装 Tomcat,最后设置启动命令为启动 Tomcat。

请注意,这只是一个基础示例,实际使用时可能需要根据具体需求进行修改和优化。例如,可能需要添加更多的环境变量,或者调整安装命令以适应特定的应用需求。

2. 常用命令

以下是您提到的 Dockerfile 指令的详细解释:

  1. RUN:用于执行后面跟着的命令行命令。有两种格式:RUN <command>(shell 格式)和 RUN ["executable", "param1", "param2"](exec 格式)。

  2. ENV:用于设置环境变量。这些变量以 <key>=<value> 的形式存在,可以在容器中被脚本或程序调用。

  3. COPY:将来自 Dockerfile 所在目录的文件或目录复制到容器中的一个新位置。

  4. ADD:与 COPY 类似,但是 ADD 允许后面的源参数是一个 URL,或者在源文件是一个 tar 文件的情况下,可以自动解压缩这个 tar 文件。

  5. EXPOSE:用于声明容器运行时监听的网络端口。

  6. WORKDIR:用于设置 RUN、CMD、ENTRYPOINT、COPY 和 ADD 指令的工作目录。

  7. ONBUILD:当镜像被用作其他 Dockerfile 的基础镜像时,ONBUILD 指令将会被触发执行。

  8. USER:用于设置接下来的 RUN、CMD 和 ENTRYPOINT 指令运行时的 UID。

  9. VOLUME:用于在容器中创建一个挂载点,用于连接 Docker 主机和容器的文件系统。

容器启动时自动执行指令:

CMD 和 ENTRYPOINT 都是 Dockerfile 中用于指定容器启动时运行的命令的指令,但它们的用法和目的有所不同。

  1. CMD:CMD 指令用于提供容器运行时的默认命令及其参数。在启动容器时,我们可以覆盖这些默认的参数。CMD 在 Dockerfile 中只应被定义一次,如果定义了多次,只有最后一次的定义会生效。CMD 有两种格式:

    如果 Dockerfile 中同时存在 CMD 和 ENTRYPOINT,CMD 中的参数会被添加到 ENTRYPOINT 中,作为其参数。

    • CMD ["executable","param1","param2"](exec 格式,推荐)
    • CMD command param1 param2(shell 格式)
  2. ENTRYPOINT:ENTRYPOINT 的目的也是让容器以应用程序或服务的形式运行。与 CMD 不同,我们在启动容器时不能覆盖 ENTRYPOINT 指令提供的命令,但可以添加额外的参数。ENTRYPOINT 有两种格式:

    如果我们既想让容器以应用程序或服务的形式运行,又想让这些应用或服务接受参数,那么最好的做法是使用 ENTRYPOINT 和 CMD 一起使用,让 ENTRYPOINT 指定应用程序,而让 CMD 指定默认参数。

    • ENTRYPOINT ["executable", "param1", "param2"](exec 格式,推荐)
    • ENTRYPOINT command param1 param2(shell 格式)

二、自定义镜像

1. 基本镜像

首先进入虚拟机并且用MobaXterm这个工具连接,进入后先查看docker的服务/进程有没有开:

输入命令:systemctl status docker   (查看docker的服务/进程

以下是没有开启状态:

 以下是开启状态:

创建一个文件夹,来存放创建后的镜像,并且创建并编写 Dockerfile 文件。

创建文件夹:mkdir soft      (名称soft,可以自己修改)

进入文件夹:cd soft/

创建并编辑Dockerfile文件vim Dockerfile    (文件名称不用改)

进入文件后,按 i 进入编辑模式,然后将以下粘贴上,在按Esc退出编辑模式,输入 :wq 

保存编写内容并且退出文件。 

Dockerfile文件中编写:
 

#1.指定基础镜像,并且必须是第一条指令
FROM  centos
#2.指明该镜像的作者和其电子邮件
MAINTAINER  CloudJun  "jun737x@163.com"
#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR  /test
#4.将文件从Docker主机复制到Docker镜像中
COPY spring.jar /test

创建编写完成后,通过 docker build 命令来创建镜像。

命令:docker build -t spring:v1 .

创建语句 docker build -t ,创建后这个镜像的名称spring,这个镜像的版本为 v1 ( 版本可以自己定义,如:0.1,1.0,v1,v2都可以),其中的  . 表示在当前目录创建

再查看镜像:docker images

进入:docker run -it spring:v1 (spring为镜像名称,后面的:v1是需要进入镜像的哪个版本)

之后看看当前目录是不是自己在Dockerfile文件中所设置的,及带进来的jar包是否存在

查看当前路径:pwd 

查看文件:ls

2. 进阶镜像

以上的镜像是不可以jar包中的项目运行的,因为镜像中没有jdk配置。

首先,需将本地的属于Linux的jdk和jre的压缩包拖到创建的文件夹中

如图:

 

以下我们来进行完善以上的缺陷: 

以下配置jdk,可以运行jar包项目

输入命令,编辑Dockerfile文件vim Dockerfile   ,将原来的编写全部删除。

删除:进入后先将输入键到第一行,再输入数字(输入的数字是看不到的如:12),再按两下 d ,就会删除12行已编写的内容,当然输入13或者14就删除13或者14行,可以根据自己想删除多少行来进行输入

将以下编写的内容粘贴到Dockerfile文件中,按Esc退出编辑模式,输入 :wq 保存编写内容并且退出文件。 

#1.指定基础镜像,并且必须是第一条指令
FROM  centos
#2.指明该镜像的作者和其电子邮件
MAINTAINER  CloudJun  "jun737x@163.com"
#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR  /test
#4.将文件从Docker主机将jdk及jar包复制到Docker镜像中,自动将jdk的压缩包进行解压
COPY  spring.jar /test
ADD  jdk-8u221-linux-x64.tar.gz  /test
#5.将jdk解压后配置环境变量
ENV JAVA_HOME=/test/jdk1.8.0_221
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
#6.容器启动时,需要执行的命令(执行jar包)
CMD java -jar spring.jar

如图(粘贴进去后全部注释了,可以手动删除前面的#解除注释): 

创建镜像:docker build -t spring:v2 . 

再查看镜像:docker images

进入容器:docker run -it spring:v2      (这里会自动启动jar包)

已可以通过:docker run -itd spring:v2   (在后台运行)

再进入:docker exec -it 24696887b11eeb7ea229221e94f7b0cac03526551854319db80aef21b2d12ca4 bash

( 其中bash前面是运行后的编号,根据运行后的编号进入到该容器中)

查看jar及解压后的jdk,还可以输入命令查看jdk环境:echo $JAVA_HOME

以下配置jre,可以运行jar包项目及优化储存

输入命令,编辑Dockerfile文件vim Dockerfile   ,将原来的编写全部删除。

将以下编写的内容粘贴到Dockerfile文件中,按Esc退出编辑模式,输入 :wq 保存编写内容并且退出文件。 

#1.指定基础镜像,并且必须是第一条指令
FROM  centos
#2.指明该镜像的作者和其电子邮件
MAINTAINER  CloudJun  "jun737x@163.com"
#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR  /test
#4.将文件从Docker主机jre包复制到Docker镜像中,自动将jdk的压缩包进行解压
COPY  spring.jar /test
ADD  jre-8u391-linux-x64.tar.gz  /test
#5.将jre解压后配置环境变量
ENV JAVA_HOME=/test/jre1.8.0_391
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
#6.容器启动时,需要执行的命令(执行jar包)
CMD java -jar spring.jar

 

创建镜像:docker build -t spring:v3 .

再查看镜像:docker images

运行:docker run -itd spring:v3

虽然储存的减少可能很小,但是当需要量上来是时候也是节省了大量的储存空间的。

3. 完善镜像

需要将储存控制到很少可以使用这个镜像jeanblanchard/alpine-glibc,这个镜像所需的储存很少,而通过这个镜像自定义出来的镜像也会少很多。

首先需要下载这个镜像:docker pull jeanblanchard/alpine-glibc

再查看镜像的信息:docker images

可以看到所需的储存空间很少。

然后我们将指定的镜像修改为这个镜像将Dockerfile文件,再次镜像编辑为以下内容。

#1.指定基础镜像,并且必须是第一条指令
FROM  jeanblanchard/alpine-glibc
#2.指明该镜像的作者和其电子邮件
MAINTAINER  CloudJun  "jun737x@163.com"
#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR  /test
#4.将文件从Docker主机jre包复制到Docker镜像中,自动将jdk的压缩包进行解压
COPY  spring.jar /test
ADD  jre-8u391-linux-x64.tar.gz  /test
#5.将jre解压后配置环境变量
ENV JAVA_HOME=/test/jre1.8.0_391
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
#6.容器启动时,需要执行的命令(执行jar包)
CMD java -jar spring.jar

创建镜像:docker build -t spring:v4 .

再查看镜像:docker images

现在这样的需要的储存空间就相对少了一半,更加的节省了资源空间。

现在映射端口运行:docker run -itd --name s1 -p 8080:8080 spring:v4

之后在主机浏览器中访问虚拟机IP的访问路径:

三、镜像上传仓库

首先需要在我们的阿里云账号中开启镜像仓库,点击用户左边的控制器,点击容器镜像服务ACR,点击实例列表,在其中点击创建个人版本的,企业版要米,创建后需要设置密码。

之后将以上的登入凭证复制粘贴到虚拟机中执行命令,前面的$不用复制进去,之后会镜像密码的输入,是自己设置的容器镜像服务密码,以下说明登入成功:

创建仓库:在实例列表中点击命名空间——>之后创建命名空间即可

如图:

之后创建一个仓库,仓库名称可以自己取

有其中的之后也可以绑定到账号中去,这里没有就可以选择本地仓库 

之后将需要上传推送到仓库的镜像取个别名,在将这个镜像绑定为阿里云的仓库,阿里云仓库在镜像仓库的第三部的将镜像推送到Registry中有命令。

第一个命令为登入,第二个命令为绑定阿里云仓库,第三个命令为上传推送到仓库

现在我们将虚拟机中共的镜像删除,删除后可以在次重阿里仓库中拉取下来。

删除:docker rmi 镜像名:v1   (v1版本号)

拉取下载命令:docker pull 仓库中的创建名称:v1    

每篇一获

学习并掌握在 Linux 中使用 Dockerfile 自定义镜像以及上传到阿里云仓库的技术,对您的技术能力和职业发展都有着重要的意义。

  1. 提升技术能力:Docker 是一种流行的容器化技术,它可以帮助您将应用及其依赖打包在一起,实现快速、一致的部署。通过学习和使用 Docker,您可以更深入地理解容器化技术,提升您的技术能力。同时,使用 Dockerfile 自定义镜像,可以让您更好地理解 Docker 镜像的构建过程,进一步提升您的 Docker 技术能力。

  2. 提高工作效率:使用 Dockerfile 自定义镜像,可以帮助您快速、一致地构建和部署应用。您只需要编写一次 Dockerfile,就可以在任何支持 Docker 的平台上重复使用,大大提高了您的工作效率。此外,通过将镜像上传到阿里云仓库,您可以方便地在不同的环境中共享和使用这些镜像,进一步提高您的工作效率。

  3. 扩大职业发展机会:掌握 Docker 和阿里云仓库的使用,可以扩大您的职业发展机会。Docker 和阿里云都是目前 IT 行业中非常热门的技术,掌握这些技术可以让您在求职市场上具有更大的竞争优势。

  4. 提升团队协作能力:通过使用阿里云仓库共享 Docker 镜像,您的团队可以更方便地共享和协作开发工作,提升团队的协作能力。

  5. 提高应用的可移植性:使用 Docker 可以提高应用的可移植性,使应用可以在不同的环境中一致地运行,降低了应用部署的复杂性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何实现接口重试

重试机制 在复杂的接口业务中&#xff0c;API请求数量很多&#xff0c;并且业务处理复杂&#xff0c;便难免会遇到一些网络问题(timeout)或者未知错误(error)&#xff0c;这时候需要加入重试机制了。让我们来回顾一下都有什么实现机制吧。 8种重试机制实现 1. 循环重试 这是最…

Hive命令行运行SQL将数据保存到本地如何去除日志信息

1.场景分析 先有需求需要查询hive数仓数据并将结果保存到本地&#xff0c;但是在操作过程中总会有日志信息和表头信息一起保存到本地&#xff0c;不符合业务需要&#xff0c;那如何才能解决该问题呢&#xff1f; 废话不多少&#xff0c;直接上代码介绍&#xff1a; 2.问题解决…

计算机毕业设计 | SpringBoot+vue的家庭理财 财务管理系统(附源码)

1&#xff0c;绪论 1.1 项目背景 网络的发展已经过去了七十多年&#xff0c;网络技术的发展&#xff0c;将会影响到人类的方方面面&#xff0c;网络的出现让各行各业都得到了极大的发展&#xff0c;为整个社会带来了巨大的生机。 现在许多的产业都与因特网息息相关&#xff…

从零开发短视频电商 PaddleOCR Java推理 (一)飞桨引擎推理

文章目录 简介方式一&#xff1a;DJL 飞浆引擎 飞桨模型方式二&#xff1a;ONNXRuntime 飞桨转换后的ONNX模型&#xff08;Paddle2ONNX&#xff09; 添加依赖文字识别OCR过程分析文字区域检测文字角度检测文字识别&#xff08;裁减旋转后的文字区域&#xff09; 高级替换模型…

猫头虎分享:探索TypeScript的世界 — TS基础入门 ‍

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通Golang》…

逆变器3前级推免(高频变压器)

一节电池标压是在2.8V—4.2V之间&#xff0c;所以24V电压需要大概七节电池串联。七节电池电压大概在19.6V—29.4V之间。 从24V的电池逆变到到220V需要升压的过程。那么我们具体需要升压到多少&#xff1f; 市电AC220V是有效值电压&#xff0c;峰值电压是220V*1.414311V 如果…

语义分割miou指标计算详解

文章目录 1. 语义分割的评价指标2. 混淆矩阵计算2.1 np.bincount的使用2.2 混淆矩阵计算 3. 语义分割指标计算3.1 IOU计算方式1(推荐)方式2 3.2 Precision 计算3.3 总体的Accuracy计算3.4 Recall 计算3.5 MIOU计算 参考 MIoU全称为Mean Intersection over Union&#xff0c;平均…

C++算法学习心得五.二叉树(4)

1.二叉搜索树中的插入操作&#xff08;701题&#xff09; 题目描述&#xff1a;给定二叉搜索树&#xff08;BST&#xff09;的根节点和要插入树中的值&#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证&#xff0c;新值和原始二叉搜索树中的任意…

Java内置锁:深度解析Lock接口中lock方法和lockInterruptibly方法

Java11中的Lock接口提供lock()和lockInterruptibly()两种锁定方法&#xff0c;用于获取锁&#xff0c;但处理线程中断时有所不同&#xff0c;lock()使线程等待直到锁释放&#xff0c;期间无视中断&#xff1b;而lockInterruptibly()在等待中若收到中断请求&#xff0c;会立即响…

WEB 3D技术 three.js 聚光灯

本文 我们来说说 点光源和聚光灯 点光源 就像一个电灯泡一样 想四周发散光 而聚光灯就像手电筒一样 像一个方向射过去 距离越远范围越大 光越弱 我们先来看一个聚光灯的效果 我们可以编写代码如下 import ./style.css import * as THREE from "three"; import { O…

微信小程序开发学习笔记《12》下拉刷新事件

微信小程序开发学习笔记《12》下拉刷新事件 博主正在学习微信小程序开发&#xff0c;希望记录自己学习过程同时与广大网友共同学习讨论。建议仔细阅读官方文档 一、什么是下拉刷新 下拉刷新是移动端的专有名词&#xff0c;指的是通过手指在屏幕上的下拉滑动操作&#xff0c;…

2024年前端最新面试题-vue3(持续更新中)

文章目录 前言正文什么是 MVVC什么是 MVVM什么是 SPA什么是SFC为什么 data 选项是一个函数Vue 组件通讯&#xff08;传值&#xff09;有哪些方式Vue 的生命周期方法有哪些如何理解 Vue 的单项数据流如何理解 Vue 的双向数据绑定Vue3的响应式原理是什么介绍一下 Vue 的虚拟 DOM介…

opencv-4.8.0编译及使用

1 编译 opencv的编译总体来说比较简单&#xff0c;但必须记住一点&#xff1a;opencv的版本必须和opencv_contrib的版本保持一致。例如opencv使用4.8.0&#xff0c;opencv_contrib也必须使用4.8.0。 进入opencv和opencv_contrib的github页面后&#xff0c;默认看到的是git分支&…

【机器学习前置知识】狄利克雷分布

在阅读本文前&#xff0c;建议先食用以下几篇文章以能更好地理解狄利克雷分布&#xff1a; 二项分布 Beta分布 多项分布 共轭分布 狄利克雷分布 狄利克雷分布(Dirichlet distribution)是Beta分布的扩展&#xff0c;把Beta分布从二元扩展到多元形式就是狄利克雷分布&#…

jar包部署到linux虚拟机的docker中之后连不上mysql

前言&#xff1a; 跟着黑马学习docker的时候&#xff0c;将java项目部署到了docker中&#xff0c;运行访问报错&#xff0c;反馈连不上mysql。 错误描述&#xff1a; 方法解决&#xff1a; 概述&#xff1a;在虚拟中中&#xff0c;我进入项目容器的内部&#xff0c;尝试ping…

myql进阶-一条查询sql在mysql的执行过程

目录 1. 流程图 2. 各个过程 2.1 连接器 2.2 分析器 2.3 优化器 2.4 执行器 2.5 注意点 1. 流程图 2. 各个过程 假设我们执行一条sql语句如下&#xff1a; select * from t_good where good_id 1 2.1 连接器 首先我们会和mysql建立连接&#xff0c;此时就会执行到连接…

#mysql 8.0 踩坑日记

事情发生在&#xff0c;修改一个已有功能的时候&#xff0c;正常的参数传递进去接口异常了。查看日志报的 Column date cannot be null 。因为是一直未修改过的功能&#xff0c;首先排除了程序代码问题&#xff0c;首先想到是不是升级过程序的jar包版本&#xff0c;检查下来发…

vivado 使用源文件

使用源文件 概述 源文件包括从AMD IP添加的设计源、知识产权&#xff08;IP&#xff09;源目录、RTL设计源、从系统添加的数字信号处理&#xff08;DSP&#xff09;源生成器工具和IP子系统&#xff0c;也称为块设计&#xff0c;由IP集成商创建AMD Vivado的功能™ 设计套件。源…

FreeRTOS系统配置

一、前言 在实际使用FreeRTOS 的时候我们时常需要根据自己需求来配置FreeRTOS&#xff0c;而且不同架构 的MCU在使用的时候配置也不同。FreeRTOS的系统配置文件为FreeRTOSConfig.h&#xff0c;在此配置文件中可以完成FreeRTOS的裁剪和配置&#xff0c;这是非常重要的一个文件&a…

年终关账四大财务处理技巧|柯桥会计做账,财税知识

2023年即将落下帷幕&#xff0c;无数公司最忙碌就是“年终关账“这件事了。 “年终关账”不仅是企业内部结算一年经营结果的事&#xff0c;还与企业所得税汇算清缴息息相关&#xff0c;甚至还可能关乎企业税负高低与企业是否依法纳税&#xff0c;千万不可小觑。 同时&#xff0…