二进制怎么存储数据,二进制代码如何存进存储器

首页 > 经验 > 作者:YD1662022-11-06 19:23:51

如果您不想将工件上传到公共存储库,或者如果您在未连接到公共存储库的私有网络上工作,则需要能够将依赖项离线存储在私有存储库中并在本地推送或拉取它们。


根据维基百科,二进制存储库管理器 (BRM)是“一种软件工具,旨在优化软件开发中使用和生成的二进制文件的下载和存储”,例如 .jar、.tar 或 .zip 档案。作为大多数DevOps 工具链的关键组件,BRM 位于构建管道之后。这就是为什么它有时被称为“构建存储库”、“工件存储库”或“管道状态存储库”的原因。

传统的DevOps 管道需要自动验证、测试、打包和版本化到工件(二进制文件)中的源代码。然后,工件必须存储在源代码存储库之外,并可供持续交付管道的后续阶段使用。作为管理二进制文件和依赖项的中心点,以及用于构建内部开发软件促销的集成库,BRM 应该托管这些工件。

二进制怎么存储数据,二进制代码如何存进存储器(1)

图 1. 普通软件开发团队的交付管道

几乎任何规模的软件项目都需要将其二进制工件保存在存储库中,以便程序员或确保持续集成 (CI)、交付 (CD) 和部署 (CD)的工具能够访问它们。由于管理存储库的软件质量很重要,因此 BRM 应满足以下要求:

Artipie

Artipie 是一个免费的二进制工件管理工具。Artipie 不仅仅是一个二进制工件 Web 服务器——它是一个工件管理构造函数,它包含许多内置在服务器组件中的组件。这是一个开源项目,始于 2020 年,并且正在积极发展。

所有 Artipie 组件均基于反应式、异步、非阻塞和背压流和原则,使 Artipie 能够以少量内核线程承受繁重的工作负载。

Artipie 架构由 3 个基本部分组成:

  1. Artipie HTTP 引擎
  2. 存储库适配器
  3. 存储

二进制怎么存储数据,二进制代码如何存进存储器(2)

图 2. Artipie 结构

Artipie HTTP 引擎

Artipie 引擎是一个 Java 应用程序,它公开了一个用于存储库访问和管理操作的 HTTP 端点。它将 HTTP 请求路由到存储库适配器并提供身份验证机制。Artipie HTTP 引擎基于Vert.x和RxJava框架构建,通过异步、反应式和非阻塞操作为项目提供轻量级的灵活性和可扩展性。

Artipie 上传操作最常见的数据流如下:客户端正在向服务器发送一些二进制工件,服务器会找到负责的存储库适配器来处理请求;存储库适配器将流保存到存储;完成后,它会更新存储库的元数据(某些存储库的工作方式不同,例如,Docker 使用元数据作为路径)。

二进制怎么存储数据,二进制代码如何存进存储器(3)

图 3. 使用 S3 实现存储的 Artipie Maven 存储库的上传操作

存储库适配器

存储库适配器是独立项目,旨在实现 API 以与特定包类型(npm、maven 等)的存储库客户端和元信息生成层进行交互。Artipie 引擎使用适配器来提供 BRM 功能。每个存储库适配器都封装存储 API 以访问二进制 blob 和元数据文件。

Artipie 支持以下类型的存储库:

贮存

存储库适配器将上传和创建的二进制文件放置在存储中。Artipie 具有抽象存储,它提供了对物理数据存储系统的抽象。简单性使得为几乎任何数据存储系统实现接口变得容易。它有两个主要操作:从存储中放入和获取项目以及一些附加功能,例如检查项目是否存在、列出存储项目或获取项目元数据。

目前,有以下存储实现:

  1. 文件系统存储
  2. Redis 存储
  3. 基于 S3 的存储

抽象存储还提供了一个接口,可以实现该接口以支持您需要的任何类型的存储。

开始使用 Artipie

使用 Artipie 有两种选择:

我将展示一个简单的示例,说明如何使用 Docker Compose 在本地运行 Artipie,并将其配置为 Windows 机器上 Docker 映像的存储库。

准备中

要运行 Artipie,您需要安装Docker,然后您可以简单地克隆GitHub 存储库,并使用路径上的示例C:\,或按照以下步骤操作:

  1. 为 Artipie 项目创建一个文件夹(例如C:\artipie)
  2. 为 Artipie 配置创建一个文件夹(例如C:\artipie\config),并将包含 Artipie 服务器配置的 yml 文件放在该文件夹中。在我的示例中,该文件称为artipie.yml. 您必须指定 Artipie 将找到所有存储库配置的路径。我将 Docker 存储库的配置路径指定为,因为在第 4 步中进行设置时var/artipie/repo,我将文件夹从本地 Windows 机器安装C:\artipie\repo到 Artipie Docker 容器中的目录。

meta: storage: type: fs path: /var/artipie/repo #path to repository configurations layout: flat

3.为存储库配置文件(例如C:\artipie\repo)创建一个文件夹,然后将包含存储库配置的 yml 文件放入该文件夹。此文件的名称将是要创建的存储库的名称。例如,文件将被命名my-docker.yml,存储库将相应地命名为my-docker。要使用 FileStorage 类型配置存储,设置 Artipie 将存储所有项目的路径就足够了。系统必须具有读写权限才能在此路径上创建文件。在我的示例中,路径将是/var/artipie/images.

meta: storage: type: fs path: /var/artipie/repo #path to repository configurations layout: flat

4.docker-compose.yml使用以下说明 创建文件:

version: "3.3" services: artipie: image: artipie/artipie:latest container_name: artipie restart: unless-stopped ports: - "8080:8080" volumes: - /C/artipie/repo:/var/artipie/repo # mount folder with repository configuration - /C/artipie/config:/etc/artipie/ # mount folder with Artipie server configurationLaunch

现在,打开 CLI,转到包含文件的docker-compose.yml文件夹并使用控制台命令启动 Artipie docker-compose up:

在 CLI 中,我们看到 Artipie 已经在端口 8080 上启动并找到了一个存储库配置文件my-docker.yml。

C:\>cd C:/artipie C:\artipie>docker-compose up [ ] Running 2/2 - Network artipie_default Created 0.7s - Container artipie Created 0.1s Attaching to artipie … artipie | [INFO] main com.artipie.VertxMain - Artipie was started on port 8080 artipie | [INFO] ForkJoinPool.commonPool-worker-1 com.artipie.asto.fs.FileStorage - Found 1 objects by the prefix "" in /var/artipie/repo by /var/artipie/repo: [my-docker.yml] …用法

在推送任何镜像之前,让我们从 Docker Hub 中拉出一个现有的镜像。我的选择是hub image。使用以下命令拉取 alpine 映像docker pull alpine:

C:\artipie>docker pull alpine Using default tag: latest latest: Pulling from library/alpine Digest: sha256:686d8c9dfa6f3ccfc8230bc3178d23f84eeaf7e457f36f271ab1acc53015037c Status: Downloaded newer image for alpine:latest docker.io/library/alpine:latest

使用下一个命令,我们从 alpine 映像创建名为myfirstimage 的 docker映像,以将其推送到我们的 Artipie 存储库:

docker image tag alpine localhost:8080/my-docker/myfirstimage. 检查 docker 是否有 2 个image:alpine localhost:8080/my-docker/myfirstimage,使用命令docker images::

C:\artipie>docker image tag alpine localhost:8080/my-docker/myfirstimage C:\artipie>docker images REPOSITORY TAG IMAGE ID CREATED SIZE localhost:8080/my-docker/myfirstimage latest e66264b98777 7 weeks ago 5.53MB alpine latest e66264b98777 7 weeks ago 5.53MB

现在,我们必须使用默认用户 artipie|artipie 登录我们自己的注册表,因为 Docker 注册表仅支持授权用户docker login --username artipie localhost:8080:

C:\artipie>docker login --username artipie localhost:8080 Password: artipie Login Succeeded

最后,我们可以使用以下命令将我们的image推送到存储库docker push localhost:8080/my-docker/myfirstimage:

C:\artipie>docker push localhost:8080/my-docker/myfirstimage Using default tag: latest The push refers to repository [localhost:8080/my-docker/myfirstimage] 24302eb7d908: Pushed latest: digest: sha256:4ff3ca91275773af45cb4b0834e12b7eb47d1c18f770a0b151381cd227f4c253 size: 528

为了检查结果,我们可以使用命令附加到容器:docker exec -it artipie bash然后/var/artipie/images/my-docker找到带有子文件夹和 blob 文件的 docker 文件夹。

C:\artipie>docker exec -it artipie bash bash-4.4$ cd /var/artipie/images/my-docker/ bash-4.4$ ls docker

在从我们的存储库中提取image之前,请使用以下命令从本地 docker image中删除image:docker image rm localhost:8080/my-docker/myfirstimage.

验证image是否已删除,并且我们只有 1 个image(alpine)docker images::

电源外壳

C:\artipie>docker image rm localhost:8080/my-docker/myfirstimage Untagged: localhost:8080/my-docker/myfirstimage:latest Untagged: localhost:8080/my-docker/myfirstimage@sha256:4ff3ca91275773af45cb4b0834e12b7eb47d1c18f770a0b151381cd227f4c253 C:\artipie>docker images REPOSITORY TAG IMAGE ID CREATED SIZE alpine latest e66264b98777 7 weeks ago 5.53MB

image也可以拉出:docker pull localhost:8080/my-docker/myfirstimage. 执行命令后,再次检查我们是否有 2 个image(alpine localhost:8080/my-docker/myfirstimage)docker images:

C:\artipie>docker pull localhost:8080/my-docker/myfirstimage Using default tag: latest latest: Pulling from my-docker/myfirstimage Digest: sha256:4ff3ca91275773af45cb4b0834e12b7eb47d1c18f770a0b151381cd227f4c253 Status: Downloaded newer image for localhost:8080/my-docker/myfirstimage:latest localhost:8080/my-docker/myfirstimage:latest C:\artipie>docker images REPOSITORY TAG IMAGE ID CREATED SIZE localhost:8080/my-docker/myfirstimage latest e66264b98777 7 weeks ago 5.53MB alpine latest e66264b98777 7 weeks ago 5.53MB结论

二进制存储库是任何 DevOps 管道中的关键元素,各种项目需要各种类型的二进制存储库来存储工件。几乎每个编程语言生态系统都有自己的工件存储库。Artipie 为一个产品中的主要包装格式提供了广泛的适配器,从而可以从一个地方管理所有工件。Artipie 正在迅速成长和发展,除了 File、Redis 和 S3 存储之外,它还提供了添加自己的二进制数据存储实现的能力。

Artipie 是存储二进制工件的好选择,因为它易于配置。它支持多种类型的存储库。作为开源产品,它完全免费使用。



栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.