Docker 镜像解密:分层存储与镜像构建原理

news2024/11/18 0:13:26

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁
🦄 博客首页——猫头虎的博客🎐
🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐
🌊 《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大小厂~💐

🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥

文章目录

  • Docker 镜像解密:分层存储与镜像构建原理
      • 摘要
      • 引言
    • 二、Docker 镜像概述
        • 2.1 Docker 镜像的基本定义
        • 2.2 Docker 镜像的作用
        • 2.3 Docker 镜像的轻量性
        • 2.4 Docker 镜像的可移植性
      • 三、分层存储原理
        • 3.1 分层存储的概念
        • 3.2 分层存储的用途
        • 3.3 分层存储节省存储空间的原理
      • 四、镜像构建流程
        • 4.1 Dockerfile 的作用
        • 4.2 编写基本的 Dockerfile
        • 4.3 利用缓存层提高构建效率
      • 五、镜像构建实例
      • 六、最佳实践和优化建议
        • 6.1 减少镜像层
        • 6.2 使用合适的基础镜像
        • 6.3 使用 .dockerignore 文件
        • 6.4 清理无用的依赖和缓存
        • 6.5 使用多阶段构建
        • 6.6 使用 Alpine 镜像
      • 七、结论
    • 八、参考文献
  • Docker专栏文章目录预告
      • 第一部分:Docker 基础知识与原理
  • 原创声明

在这里插入图片描述

Docker 镜像解密:分层存储与镜像构建原理

摘要

本文介绍了 Docker 镜像的分层存储与构建原理。首先,我们对 Docker 镜像的重要性和广泛应用进行了简要介绍,并提出了本文要解密的主题:分层存储与镜像构建原理。随后,我们深入探讨了分层存储的概念和用途,以及它如何节省存储空间。接着,我们详细描述了 Docker 镜像的构建过程,包括 Dockerfile 的作用、如何编写一个基本的 Dockerfile,以及如何利用缓存层提高构建效率。为了更好地理解镜像构建的实际操作过程,我们通过一个简单的 Web 服务器容器镜像实例逐步演示了每个构建步骤和相应的镜像层。最后,我们提供了一些最佳实践和优化建议,帮助读者在构建自己的镜像时遵循最佳方法,以提高容器化应用的性能和安全性。通过深入理解 Docker 镜像的分层存储与构建原理,读者将能够更有效地应用 Docker 技术,优化容器化应用的开发与部署流程。

引言

Docker 镜像作为容器化应用的基础组件,发挥着重要的作用。它不仅实现了应用和其依赖的打包,还提供了一个可移植、可复制的解决方案。然而,对于 Docker 镜像的构建和管理,很多人仍存在疑惑。本文旨在帮助读者深入理解 Docker 镜像的分层存储与构建原理,从而更好地掌握 Docker 技术,优化容器化应用的开发与部署。

我们将从引言开始,简要介绍 Docker 镜像的重要性和广泛应用,并引出本文要解密的主题:分层存储与镜像构建原理。随后,我们将详细解释分层存储的概念和用途,阐述它是如何实现镜像的高效共享和版本管理的。为了更好地理解镜像的构建过程,我们将介绍 Dockerfile 的作用和基本编写方法,并探讨如何利用缓存层提高构建效率。为了帮助读者更好地掌握镜像构建的实际操作,我们将通过一个简单的 Web 服务器容器镜像实例逐步演示每个构建步骤和相应的镜像层。最后,我们将提供一些最佳实践和优化建议,帮助读者在构建自己的镜像时遵循最佳方法,以提高容器化应用的性能和安全性。

在深入理解 Docker 镜像的分层存储与构建原理后,读者将能够更好地应用 Docker 技术,有效管理和部署容器化应用。本文旨在为读者提供有价值的知识和实用的指导,希望读者通过阅读本文,对 Docker 镜像技术有更全面的认识,并能够应用于实际场景中。

二、Docker 镜像概述

Docker 镜像作为容器技术的重要组成部分,在现代应用开发和部署中得到了广泛的应用。本节将详细解释 Docker 镜像的基本定义和作用,强调其轻量性、可移植性以及版本管理的重要性。

2.1 Docker 镜像的基本定义

Docker 镜像是一种用于打包应用及其依赖的独立文件系统,其中包含了运行应用所需的所有组件:代码、运行时、库文件、环境变量等。镜像是基于一层一层的文件系统构建而成的,这些层叠加在一起,形成一个完整的文件系统,用于在容器中运行应用。

2.2 Docker 镜像的作用

Docker 镜像的主要作用是实现应用的快速部署和可移植性。通过使用镜像,开发人员可以将应用及其环境打包成一个独立的单元,不受底层环境的影响,从而实现在不同平台上的一致运行。这使得开发、测试和生产环境之间的转换更加简单和可靠。

另外,Docker 镜像还支持版本管理,每个镜像都可以有多个不同的版本。这为应用的持续集成和持续部署提供了便利,使得开发团队可以追踪和管理应用的演进过程,确保不同环境中使用的都是同一个版本的镜像,避免了由于版本差异导致的问题。

2.3 Docker 镜像的轻量性

Docker 镜像采用分层存储的设计,每个镜像层都只包含了与上一层的差异部分。这种设计使得镜像在存储和传输时非常高效。当多个镜像共享相同的基础层时,它们只需要在本地存储中保存一份基础层的副本,从而节省了大量的存储空间。

由于镜像的轻量性,容器的启动时间也非常快速。镜像的分层结构使得容器的创建过程变得高效,因为只需加载少量的增量层即可,大大减少了启动时间。

2.4 Docker 镜像的可移植性

Docker 镜像的可移植性是指镜像可以在任意支持 Docker 的平台上运行,而不需要额外的配置和调整。镜像本身包含了应用的所有依赖和配置信息,不依赖于底层系统,因此可以在不同的环境中无缝地迁移和部署。

这种可移植性使得开发人员可以在本地开发和测试镜像,然后将其部署到生产环境,确保应用在不同环境中的行为一致,减少了由于环境差异引起的问题。

综上所述,Docker 镜像是一种强大的容器技术,它提供了轻量级、可移植且可复制的软件打包方案,为应用的部署、测试和管理带来了便利。合理利用 Docker 镜像,将有助于提高应用的开发效率和部署稳定性。

三、分层存储原理

Docker 镜像是由一系列分层存储(Layered Storage)构成的,这种特殊的设计使得 Docker 镜像在管理和传输时具备高效性和灵活性。本节将详细介绍分层存储的概念和用途,并阐述它是如何节省存储空间的。

3.1 分层存储的概念

分层存储是 Docker 镜像的核心组成原理之一。每个 Docker 镜像由多个层叠加而成,每一层代表一个文件系统的快照。这些层共同构成了一个完整的镜像文件系统。

每个镜像层都是只读的,当容器运行时,会在镜像层之上再添加一个可写层,用于容器的写操作。这样,多个容器可以共享同一个只读的镜像层,同时拥有各自的可写层,实现资源的高度共享和隔离。

分层存储的设计使得 Docker 镜像具有可复用性,相同的镜像层可以被多个镜像共享,节省了存储空间,同时降低了镜像的传输时间,提高了镜像的传输效率。

3.2 分层存储的用途

分层存储在 Docker 中发挥着重要的作用。它带来了以下几个主要优势:

  1. 镜像的复用:由于分层存储,当多个镜像共享相同的基础层时,它们只需要在本地存储中保存一份基础层的副本,避免了重复存储相同内容的问题。这样的设计显著降低了镜像的存储需求。

  2. 镜像的传输效率:镜像的分层存储结构允许只传输更改的层,而不是整个镜像,因此在传输时只需要传输更新的部分,减少了传输的数据量,提高了传输效率。

  3. 镜像的版本管理:每个镜像层都是只读的,当需要更新或修改镜像时,只需新增一层来覆盖原有的层,这样就可以实现版本管理,方便用户管理和回滚镜像的不同版本。

3.3 分层存储节省存储空间的原理

分层存储节省存储空间的原理在于镜像的分层结构。当多个镜像共享相同的基础层时,它们只需要在本地存储中保存一份基础层的副本,因为这些镜像所依赖的基础层是只读的,不会发生变化。

例如,假设有两个镜像A和B,它们都使用了相同的基础镜像C作为底层。在存储中,镜像A和B分别保存自己的特定层以及指向镜像C的指针。实际上,镜像C的内容在存储中只保存一份,但由于镜像A和B都依赖于这份内容,它们共享了同一个基础层,从而节省了存储空间。

综上所述,分层存储是 Docker 镜像的核心设计之一,它通过共享、复用和增量更新的方式,实现了高效的存储和传输。在实际应用中,充分理解和利用分层存储原理,能够有效地优化镜像管理和部署流程,提高容器化应用的开发效率和运行性能。

四、镜像构建流程

Docker 镜像的构建过程是通过 Dockerfile 来定义的,Dockerfile 是一个文本文件,包含了一系列指令,用于描述镜像的构建步骤和配置。本节将详细描述 Docker 镜像的构建流程,包括 Dockerfile 的作用、如何编写一个基本的 Dockerfile,以及每个构建步骤如何生成一个新的镜像层,并且如何利用之前的缓存层以提高构建效率。

4.1 Dockerfile 的作用

Dockerfile 是用于自动化构建 Docker 镜像的重要工具。它提供了一种简单且可重复的方式来定义镜像的组件和配置。通过 Dockerfile,开发人员可以将应用的运行环境和依赖等打包到一个镜像中,实现镜像的版本控制和快速部署。

Dockerfile 是一个纯文本文件,其中包含了一系列指令(Instructions),每个指令都对应着镜像构建的一个步骤。这些指令可以用于指定基础镜像、添加文件、设置环境变量、运行命令等操作,以最终形成一个完整的、可运行的镜像。

4.2 编写基本的 Dockerfile

编写一个基本的 Dockerfile 通常包括以下几个步骤:

  1. 选择基础镜像(FROM):在 Dockerfile 的第一行,使用 FROM 指令选择一个基础镜像作为构建的起点。基础镜像通常是一个已经存在的、可信赖的镜像,你可以基于这个镜像进行扩展和定制。

  2. 添加文件和目录(ADD、COPY):使用 ADDCOPY 指令将应用的代码、依赖文件等添加到镜像中。这些文件将被复制到镜像的指定目录下,从而构建出应用所需的文件结构。

  3. 设置工作目录(WORKDIR):使用 WORKDIR 指令设置容器中的工作目录。后续的命令将在这个目录下执行,使得后续操作更加简洁和清晰。

  4. 运行命令(RUN):使用 RUN 指令在容器中运行命令,比如安装软件包、配置环境等。每个 RUN 指令都会生成一个新的镜像层,因此可以使用多个 RUN 指令来避免不必要的镜像层增加。

  5. 设置环境变量(ENV):使用 ENV 指令设置容器中的环境变量,这些变量可以在容器运行时被应用程序使用。

  6. 暴露端口(EXPOSE):使用 EXPOSE 指令声明容器运行时监听的端口,但并不实际将端口暴露给外部网络。要实现端口映射,需要在容器运行时使用 -p 参数进行配置。

  7. 容器启动时运行的命令(CMD、ENTRYPOINT):使用 CMDENTRYPOINT 指令设置容器启动时要运行的默认命令或应用。这些指令通常是在 Dockerfile 的末尾,并且只能出现一次。

4.3 利用缓存层提高构建效率

在 Docker 镜像的构建过程中,每个指令都会生成一个新的镜像层。但是,Docker 引擎在构建镜像时会利用缓存层的机制,将之前构建过的镜像层缓存起来,以便在下次构建时重复使用。

这种缓存机制可以大幅提高构建效率,尤其在多次构建过程中,只有部分指令发生了变化,其他指令没有改变的情况下,Docker 将重复使用之前的缓存层,从而避免了重复构建相同的层,节省了构建时间和网络传输。

但是要注意,如果某个指令之后的指令发生了变化,将会导致后续的指令全部重新构建。因此,在编写 Dockerfile 时,可以根据指令的依赖关系和改变频率来优化镜像构建,尽量保持常变化的指令在后面,以利用缓存层提高构建效率。

综上所述,Docker 镜像的构建流程通过 Dockerfile 来定义,合理编写 Dockerfile 可以实现镜像的定制和优化,利用缓存层机制可以大幅提高构建效率。熟悉这一过程对于高效管理和部署容器化应用至关重要。

五、镜像构建实例

在本节中,我们将通过一个简单的 Web 服务器容器镜像实例来演示镜像的构建过程。我们将使用 Nginx 作为 Web 服务器,并将一个静态网页添加到镜像中,以便在容器中展示。以下是具体的步骤:

  1. 选择基础镜像

    在构建镜像时,我们需要选择一个基础镜像作为起点。由于我们要构建一个 Nginx 服务器,因此我们选择一个官方提供的 Nginx 基础镜像。

    FROM nginx:latest
    
  2. 添加静态网页文件

    在容器中展示一个静态网页,我们需要将网页文件复制到镜像中的合适目录。在本例中,我们假设静态网页文件 index.html 存放在当前目录下的 webpage 文件夹中。

    COPY webpage /usr/share/nginx/html
    
  3. 暴露端口

    默认情况下,Nginx 使用 80 端口作为 Web 服务器的监听端口。我们需要通过 EXPOSE 指令将容器的 80 端口暴露给主机。

    EXPOSE 80
    
  4. 设置容器启动时运行的命令

    最后,我们需要设置容器启动时运行的命令。在本例中,我们使用 Nginx 的默认启动命令来启动 Web 服务器。

    CMD ["nginx", "-g", "daemon off;"]
    

完成以上步骤后,我们的 Dockerfile 就编写完成了。接下来,我们将在终端中切换到 Dockerfile 所在的目录,并执行以下命令来构建镜像:

docker build -t mywebserver .

其中,-t 参数用于给镜像取一个标签,这里我们取名为 mywebserver。最后的 . 表示使用当前目录下的 Dockerfile 进行构建。

Docker 将按照 Dockerfile 中的指令逐步构建镜像,每个指令都会生成一个新的镜像层。一旦构建完成,我们就可以通过以下命令来运行容器并访问 Nginx 服务器:

docker run -d -p 8080:80 mywebserver

此命令将会在容器中运行 Nginx 服务器,并将容器的 80 端口映射到主机的 8080 端口。现在,我们可以通过浏览器访问 http://localhost:8080 来查看展示的静态网页。

通过这个实例,我们演示了一个简单的 Web 服务器容器镜像的构建过程,帮助读者更好地理解镜像构建的实际操作步骤。在实际应用中,可以根据需求定制更复杂的镜像,以满足不同场景下的需求。

六、最佳实践和优化建议

构建优化的 Docker 镜像是提高容器化应用性能和安全性的重要一环。本节将提供一些最佳实践和优化建议,帮助读者在构建自己的镜像时遵循最佳方法,提高镜像的质量和效率。

6.1 减少镜像层

镜像的层数越少,镜像的构建、传输和部署速度就越快。因此,我们应该尽量减少镜像的层数。可以通过合并多个 RUN 指令,将多个命令放在同一个 RUN 指令中,从而减少镜像层数。同时,应该在一个 RUN 指令中执行多个命令时使用 && 来串联命令,避免多个 RUN 指令生成不必要的中间层。

# 不推荐
RUN apt-get update
RUN apt-get install -y package1

# 推荐
RUN apt-get update && apt-get install -y package1

6.2 使用合适的基础镜像

选择合适的基础镜像是构建高效镜像的关键。官方提供的基础镜像通常经过优化,并且有大量的社区支持。对于特定的应用,可以选择专门针对该应用的基础镜像,例如 Node.js、Python 等语言的官方镜像。避免使用过于庞大的基础镜像,选择轻量级的基础镜像将有助于减小镜像的体积。

6.3 使用 .dockerignore 文件

在构建镜像时,Docker 会将 Dockerfile 所在目录下的所有文件都包含在镜像中。但是有些文件并不需要包含在镜像中,例如开发环境下的调试文件、测试文件等。可以通过创建 .dockerignore 文件来排除这些不必要的文件,减小镜像的体积。

6.4 清理无用的依赖和缓存

在构建过程中,可能会安装一些依赖或生成一些中间文件,这些文件在构建完成后并不需要存在于镜像中。可以在构建完成后使用 apt-get clean(对于基于 Debian 的镜像)或类似命令来清理缓存和无用的依赖文件,从而减小镜像的体积。

6.5 使用多阶段构建

对于复杂的应用,可以使用多阶段构建来实现更轻量级的镜像。多阶段构建将应用的构建环境和运行环境分隔开,构建应用的过程在一个镜像中进行,然后将构建好的应用拷贝到另一个轻量级的镜像中运行。

# 构建阶段
FROM builder as build
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build

# 运行阶段
FROM nginx:latest
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

6.6 使用 Alpine 镜像

Alpine 镜像是一种非常轻量级的 Linux 发行版,通常以较小的体积提供完整的基础系统功能。使用 Alpine 镜像可以大幅减小镜像的体积,并提高容器的启动速度。Alpine 镜像在 Docker Hub 上有大量的官方和社区维护的版本,可以满足绝大多数应用的需求。

综上所述,通过合理减少镜像层数、选择合适的基础镜像、使用 .dockerignore 文件、清理无用的依赖和缓存、使用多阶段构建以及使用 Alpine 镜像等优化方法,可以有效提高 Docker 镜像构建的效率和性能。在实际应用中,根据应用的需求和场景选择相应的优化方法,将有助于构建更高效、安全的容器化应用。

七、结论

本文对 Docker 镜像的分层存储与构建原理进行了详细的介绍与解析。我们了解了 Docker 镜像的重要性和广泛应用,并重点探讨了分层存储与镜像构建的核心概念和优势。

通过分层存储,Docker 镜像将应用和其依赖打包成多个层,实现了镜像的高效共享、复用和版本管理。镜像的构建过程通过 Dockerfile 来定义,其中包含了一系列指令,每个指令对应一个构建步骤,形成一个新的镜像层。

为了优化镜像构建,我们提供了一些最佳实践和优化建议。这包括减少镜像层数、选择合适的基础镜像、使用 .dockerignore 文件排除不必要文件、清理无用的依赖和缓存、使用多阶段构建以及使用 Alpine 镜像等方法。

深入理解 Docker 镜像的分层存储与构建原理,对于有效使用 Docker 技术以及优化容器化应用的开发、部署和管理过程具有重要意义。读者可以进一步探索 Docker 的更多特性和用法,深入了解容器技术的前沿发展和实际应用。

希望本文能够帮助读者对 Docker 镜像技术有更深入的了解,并为应用 Docker 构建高效、安全的容器化应用提供指引和启示。感谢您的阅读!如有任何问题或疑问,请随时向我们咨询或查阅更多相关资源。

八、参考文献

  1. Docker官方文档:Docker官方网站上有关于镜像构建和分层存储的文档,这是学习Docker镜像相关知识的重要资源。你可以访问https://docs.docker.com/了解更多信息。
  2. Docker官方博客:Docker团队定期发布有关技术深入的博客文章,这些文章可能包含关于Docker镜像原理的深入解释和示例。你可以在https://www.docker.com/blog/查找相关文章。
  3. Docker源码:如果你对Docker的底层实现感兴趣,可以查看Docker的开源代码库。在GitHub上可以找到Docker的代码仓库:https://github.com/docker/docker-ce。

Docker专栏文章目录预告

第一部分:Docker 基础知识与原理

  1. Docker 基础知识解析:容器与虚拟化的区别与优势
    2. Docker 架构解析:理解 Docker 引擎和容器运行时
    3. Docker 镜像解密:分层存储与镜像构建原理
  2. Docker 容器生命周期:创建、启动、暂停与停止
  3. Docker 网络模型:理解容器网络通信和连接
  4. Docker 存储驱动解析:选择最适合你的存储方案

原创声明

======= ·

  • 原创作者: 猫头虎

作者wx: [ libin9iOak ]

  • 今日已学习

本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。

作者保证信息真实可靠,但不对准确性和完整性承担责任

未经许可,禁止商业用途。

如有疑问或建议,请联系作者。

感谢您的支持与尊重。

点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,共同成长。

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

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

相关文章

国内办公协作系统评测:5 款软件推荐

办公协作系统是现代信息化办公的必备工具之一,对于企业来说,选择一款好用的办公协作系统非常重要。然而,在众多的办公协作系统中,哪个好用是一个让人头痛的问题。总体而言,国内的办公协作系统已经相当成熟和完善&#…

基于linux下的高并发服务器开发(第四章)- 多线程实现并发服务器

>>了解文件描述符 文件描述符分为两类,一类是用于监听的,一类是用于通信的,在服务器端既有监听的,又有通信的。而且在服务器端只有一个用于监听的文件描述符,用于通信的文件描述符是有n个。和多少个客户端建立了…

vue 前端一键导出excel文件并附带表格样式

1、安装xlsx、xlsx-style、file-saver三个包 //xlsx与file-saver指定版本安装,解决默认安装utils未定义的问题 npm install --save xlsx0.17.0 npm install --save file-saver2.0.5 npm install xlsx-style --save 2、在使用的页面引入 import XLSX from xlsx //…

对顶堆算法

对顶堆可以动态维护一个序列上的第k大的数,由一个大根堆和一个小根堆组成, 小根堆维护前k大的数(包含第k个)大根堆维护比第k个数小的数 [CSP-J2020] 直播获奖 题目描述 NOI2130 即将举行。为了增加观赏性,CCF 决定逐一评出每个选手的成绩&a…

【暑期每日一练】 day10

目录 选择题 (1) 解析: (2) 解析: (3) 解析: (4) 解析: (5) 解析: 编程题 题一 …

Klipper seria.c 文件代码分析

一. 前言 Klipper 底层硬件的串口模块程序写的是否正确是决定下位机与上位机能否正常通信的前提,如果这个文件的驱动没写好,那上位机控制下位机就无从谈起,更无法通过上位机去验证下位机程序的正确性。 本篇博文将详细解析 Klipper src 文件夹…

提词器怎么用?这个方法看一看

提词器怎么用?在现代社会中,提词器的应用场景非常广泛。除了学习、工作、听力障碍和翻译,它还可以应用于其他领域,如演讲、广播、新闻报道等。比如说,在演讲中,提词器可以帮助演讲者更好地掌握演讲内容。演…

网络防御之VPN

配置IKE 第一阶段 [r1]ike proposal 1 [r1-ike-proposal-1]encryption-algorithm aes-cbc-128 [r1-ike-proposal-1]authentication-algorithm sha1 [r1-ike-proposal-1]dh group2 [r1-ike-proposal-1]authentication-method pre-share[r1]ike peer aaa v1 [r1-ike-peer-aaa…

提升数据质量的四大有效方式

在数字时代的今天,企业对于高质量、值得信赖的数据的需求越来越高。 目前,已经有很多企业将数据质量视为技术问题而非业务问题,这也是获取高质量数据的最大限制因素。只有查找技术缺陷,例如重复数据、缺失值、乱序序列&#xff0…

api自动化测试

API测试已成为日常的测试任务之一,为了提高测试效率,减少重复的手工操作,API自动化测试也逐渐变得愈加重要,本文是自己在API自动化测试方面的一些经验积累和心得、汇总成文,以飨读者 我相信自动化技能已经成为高级测试…

uniapp跨域解决

uniapp跨域解决 跨域是什么 跨域指的是浏览器不能执行其他网站的脚本,当一个网页去请求另一个域名的资源时,域名、端口、协议任一不同,就会存在跨域。跨域是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。 报错…

直线导轨的精密等级以及划分依据

直线导轨的作用,是用来支撑和引导运动部件,按给定的方向做往复直线运动的,直线导轨是高精密度的传动元件,广泛使用在各行各业中。 直线导轨的精密等级是判断产品质量的一个重要指标。在众多种类的直线导轨产品中,精密等…

【BASH】回顾与知识点梳理(一)

【BASH】回顾与知识点梳理 一 前言一. 认识与学习 BASH1.1 硬件、核心与 Shell1.2 为何要学文字接口的 shell?1.3 系统的合法 shell 与 /etc/shells 功能1.4 Bash shell 的功能1.5 查询指令是否为 Bash shell 的内建命令: type1.6 指令的下达与快速编辑按…

vue3搭建Arco design UI框架

技术:Vue3.2.40 UI框架:Arco design 2.44.7 需要安装:yarn 1.22.19 和npm 8.19.4 1.第一步安装本地全局arco脚手架 管理员运行CMD npm i -g arco-cli安装成功后如下: 2.第二步在需要存放项目的文件夹拉取项目 我这里把项目存放在 D:\W…

CTF:信息泄露.(CTFHub靶场环境)

CTF:信息泄露.(CTFHub靶场环境) “ 信息泄露 ” 是指网站无意间向用户泄露敏感信息,泄露了有关于其他用户的数据,例如:另一个用户名的财务信息,敏感的商业 或 商业数据 ,还有一些有…

【枚举+结论】icpc2022 济南 A

Problem - A - Codeforces 题意: 思路: 本来的思路是这样的 考虑最后会变成什么数,手摸了几个发现,都是2,不论本来的集合是不是包含2 然后就是猜测是不是直接变成2就好了 然后要去掉m个,直接考虑去掉最…

高速过孔同进同出?到底是什么一种设计体验

高速先生成员--黄刚 每当来一个比较新的概念时,高速先生总是非常的喜欢,随之而来的求知欲也会爆发个小宇宙。其实问题的来源是我们公司的北京分部的资深设计工程师,北京分部本身也是我司全国20多个分部里设计能力最强的分部之一了&#xff0c…

类的封装和包(JAVA)

封装 所有的OOP语言都会有三个特征: 封装;继承;多态。 本篇文章会为大家带来有关封装的知识。 在我们日常生活中可以看到电视就只有那么几个按键(开关,菜单……)和一些接口,而而我们通过这些东…

Day08-作业(MySQLMybatis入门)

作业1:多表查询 数据准备: 重新创建一个数据库 db03_homework 执行如下脚本,创建表结构,导入测试数据 -- 部门管理 create table tb_dept(id int unsigned primary key auto_increment comment 主键ID,name varchar(10) not n…

想了解好用的翻译pdf的软件吗?

在全球化的时代背景下,跨国贸易越来越普遍,跨语言沟通也越来越频繁。小黄是一家跨国公司的员工,他梦想能在全球各地拓展自己的业务,奈何遇到了一个巨大的挑战:跨语言沟通。在这其中,pdf文件是他经常接收到的…