远程容器镜像的解决方案 Overlaybd

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Accelerated Container Image是论文“DADI: Block-Level Image Service for Agile and Elastic Application Deployment.USENIX ATC'20”的开源实现。它是远程容器镜像的解决方案,支持按需获取镜像数据,无需在容器运行前下载和解压整个镜像。加速的核心是overlaybd,它提供了作为块设备的一系列基于块的层的合并视图。该存储库是加速集装箱图像的组成部分,提供了由iSCSI和overlaybd的实施TCMU。

Accelerated Container Image是论文“DADI: Block-Level Image Service for Agile and Elastic Application Deployment.USENIX ATC'20”的开源实现。

它是远程容器镜像的解决方案,支持按需获取镜像数据,无需在容器运行前下载和解压整个镜像。

加速的核心是overlaybd,它提供了作为块设备的一系列基于块的层的合并视图。该存储库是加速集装箱图像的组成部分,提供了由iSCSI和overlaybd的实施TCMU

设置

系统要求

Overlaybd通过iSCSI协议和TCMU提供虚拟块设备,所以需要TCMU内核模块。TCMU 在 Linux 内核中实现并得到大多数 Linux 发行版的支持。

检查并加载 target_core_user 模块。

modprobe target_core_user

从 RPM/DEB 安装

您可以从Release下载我们的 RPM/DEB 包并安装。

二进制文件安装到/opt/overlaybd/bin/.

运行/opt/overlaybd/bin/overlaybd-tcmu,日志存储在/var/log/overlaybd.log.

最好overlaybd-tcmu作为服务运行,以便在意外崩溃后可以重新启动。

从源代码构建

要求

要从源代码构建overlaybd,需要以下依赖项:

  • CMake >= 3.11
  • gcc/g++ >= 7
  • Libaio、libcurl、libnl3、glib2 和 openssl 运行时和开发库。
  • CentOS/Fedora: sudo yum install libaio-devel libcurl-devel openssl-devel libnl3-devel glib2-devel
  • Debian/Ubuntu: sudo apt install pkg-config libcurl4-openssl-dev libssl-dev libaio-dev libnl-3-dev libnl-genl-3-dev libglib2.0-dev

建造

你需要 git 来检出源代码:

git clone https://github.com/alibaba/overlaybd.git
cd overlaybd

整个项目由 CMake 管理。二进制文件和资源文件将安装到/opt/overlaybd/.

mkdir build
cd build
cmake ..
make -j
sudo make install

最后,为overlaybd-tcmu backstore 设置一个systemd 服务。

sudo systemctl enable /opt/overlaybd/overlaybd-tcmu.service
sudo systemctl start overlaybd-tcmu

配置

覆盖配置

默认配置文件overlaybd.json安装到/etc/overlaybd/.

{
    "logLevel": 1,
    "logPath": "/var/log/overlaybd.log",
    "registryCacheDir": "/opt/overlaybd/registry_cache",
    "registryCacheSizeGB": 1,
    "credentialFilePath": "/opt/overlaybd/cred.json",
    "ioEngine": 1,
    "download": {
        "enable": true,
        "delay": 120,
        "delayExtra": 30,
        "maxMBps": 100
    },
    "enableAudit": true,
    "auditPath": "/var/log/overlaybd-audit.log"
}
场地 描述
日志级别 调试 0、信息 1、警告 2、错误 3
io引擎 用于打开本地文件的IO引擎:psync 0、libaio 1、posix aio 2。
日志路径 日志文件的路径/var/log/overlaybd.log是默认值。
注册表缓存目录 远程图像数据的缓存目录。
注册表缓存大小GB 缓存的最大大小,以 GB 为单位。
凭证文件路径 用于在注册表上获取图像的凭据。/opt/overlaybd/cred.json是默认值。
下载.启用 是否启用后台下载。
下载延迟 在overlaybd 设备启动后等待开始下载任务的秒数。
下载.delayExtra 延迟附加随机额外延迟,避免同时启动过多任务。
下载.maxMBps 下载任务的速度限制(以 MB/s 为单位)。
启用审计 是否启用审计。
审计路径 审计文件的路径/var/log/overlaybd-audit.log是默认值。


注意:download是后台下载的配置。启动overlaybd 设备后,将运行后台任务以将整个blob 提取到本地目录中。下载后,I/O 请求被定向到本地文件。与其他选项不同,下载配置在设备启动时重新加载。

凭证配置

以下是按credentialFilePath字段描述的凭证文件示例。


{
  "auths": {
    "hub.docker.com": {
      "username": "username",
      "password": "password"
    },
    "hub.docker.com/hello/world": {
      "auth": "dXNlcm5hbWU6cGFzc3dvcmQK"
    }
  }
}

需要身份验证时会重新加载凭据。如果使用临时凭证,则必须在到期前更新凭证,否则 overlaybd 会不断重新加载,直到设置了有效的凭证。为了测试方便,我们在阿里云ACR上提供了一个公共注册表,见后面的例子。

重要提示:如果注册表不是公开的,则必须在启动设备之前设置相应的凭据。

下一步是什么?

现在我们已经完成了 overlaybd 的设置,让我们回到Accelerated Container Image repo 并开始运行我们的第一个加速容器。

相关实践学习
通过ACR快速部署网站应用
本次实验任务是在云上基于ECS部署Docker环境,制作网站镜像并上传至ACR镜像仓库,通过容器镜像运行网站应用,网站运行在Docker容器中、网站业务数据存储在Mariadb数据库中、网站文件数据存储在服务器ECS云盘中,通过公网地址进行访问。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4月前
|
Docker 容器
Docker网关冲突导致容器启动网络异常解决方案
当执行`docker-compose up`命令时,服务器网络可能因Docker创建新网桥导致IP段冲突而中断。原因是Docker默认的docker0网卡(172.17.0.1/16)与宿主机网络地址段重叠,引发路由异常。解决方法为修改docker0地址段,通过配置`/etc/docker/daemon.json`调整为非冲突段(如192.168.200.1/24),并重启服务。同时,在`docker-compose.yml`中指定网络模式为`bridge`,最后通过检查docker0地址、网络接口列表及测试容器启动验证修复效果。
|
5月前
|
关系型数据库 MySQL Docker
|
9月前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
499 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
12月前
|
存储 数据库 Docker
正确删除容器和镜像的方式
【10月更文挑战第24天】本文介绍了在Docker中如何正确删除容器和镜像,包括停止容器、删除已停止容器、删除未被使用的镜像以及注意事项,如数据备份、依赖关系检查和权限问题。其他容器管理工具的操作类似,但命令和语法可能不同。
2637 4
|
11月前
|
Kubernetes 监控 Java
如何在Kubernetes中配置镜像和容器的定期垃圾回收
如何在Kubernetes中配置镜像和容器的定期垃圾回收
|
存储 安全 Ubuntu
Docker 镜像与 Docker 容器的区别
【8月更文挑战第27天】
1032 5
|
运维 Ubuntu Shell
掌握Docker容器的创建:从镜像到实例
【8月更文挑战第27天】
2201 4
|
存储 Ubuntu 应用服务中间件
在Docker中,怎么快速查看本地的镜像和容器?
在Docker中,怎么快速查看本地的镜像和容器?
|
缓存 开发者 Docker
Dockerfile是Docker容器化过程中的核心组件,它允许开发者以一种可重复、可移植的方式自动化地构建Docker镜像
【8月更文挑战第19天】Dockerfile是构建Docker镜像的脚本文件,含一系列指令定义镜像构建步骤。每条大写指令后跟至少一个参数,按序执行,每执行一条指令即生成新的镜像层。常用指令包括:FROM指定基础镜像;RUN执行构建命令;EXPOSE开放端口;CMD指定容器启动行为等。优化策略涉及减少镜像层数、选择轻量基础镜像、利用缓存及清理冗余文件。示例:基于Python应用的Dockerfile包括设置工作目录、复制文件、安装依赖等步骤。掌握Dockerfile有助于高效自动化构建镜像,加速应用部署。
124 1
|
网络协议 Linux 网络安全
遇到Docker容器网络隔断?揭秘六种超级实用解决方案,轻松让Docker容器畅游互联网!
【8月更文挑战第18天】Docker容器内网络不通是开发者常遇问题,可能因网络配置错、Docker服务异常或防火墙阻碍等原因引起。本文提供六种解决策略:确认Docker服务运行状态、重启Docker服务、检查与自定义Docker网络设置、验证宿主机网络连接、临时禁用宿主机IPv6及检查防火墙规则。通过这些步骤,多数网络问题可得以解决,确保容器正常联网。
3268 1

相关产品

  • 容器镜像服务