向容器仓库中的镜像添加tarball
项目描述
添加层
此独立实用程序将tarball添加到容器仓库中现有镜像,无需在本地下载镜像。
它支持任何实现OCI分发规范的仓库。
为什么
此实用程序的基本用例是当您有一个已在容器仓库中可用的基本镜像,并且您只需要添加一个或多个文件,然后将结果推回到相同的仓库。
在这种情况下,您在网络上传输方面无法做得比这个实用程序更好。它以最少的努力完成工作。
使用Docker ADD命令,您必须下载现有镜像并启动构建过程才能运行ADD
命令。
FROM apache/airflow:2.3.2
ADD your_tar_file.tar.gz /opt/airflow/dag
生成的镜像将与原始镜像完全相同,但Docker没有特殊的优化可以避免下载基本镜像(尽管从理论上讲,可以这样做,但需要在大数据模型中做出更大的更改以支持层数据的延迟引用)。
顺便提一下,脚本正是为了Apache Airflow而设计的。
请注意,Buildkit从v0.10开始将支持此功能,但尚不清楚如何在Dockerfile中支持它。
安装
使用pip安装工具
$ pip install appendlayer
这使得“appendlayer”作为您环境中的一个脚本可用。
或者,下载appendlayer.py脚本并直接使用Python运行它
$ python appendlayer.py
该脚本没有外部依赖,仅使用Python中已包含的内容。
用法
使用tarball将层内容传入,并提供仓库(或镜像)名称和旧版和新版标签
$ echo "Hello world" > test.txt
$ tar cvf - test.txt | appendlayer <host> <repository> <old-tag> <new-tag>
或者,使用镜像语法限定源和目标
$ tar cvf - test.txt | appendlayer <host> <old-repository>:<old-tag> <new-repository>:<new-tag>
或者在不同的主机之间
$ tar cvf - test.txt | appendlayer <old-host>/<old-repository>:<old-tag> <new-host>/<new-repository>:<new-tag>
例如,对于Azure容器注册表(ACR),通常的主机是<registry-name>.azurecr.io
。
身份验证
该脚本使用OAuth2来授权对容器注册表的请求。
这可以通过使用环境变量ACCESS_TOKEN
或REFRESH_TOKEN
,或者通过从Docker配置文件(根据环境变量DOCKER_CONFIG
的位置)中提取身份验证详细信息来配置。
例如,对于Azure容器注册表,授权到特定的容器注册表。
$ export REFRESH_TOKEN=$( \
az acr login -t --name <registry-name>.azurecr.io \
--expose-token --output tsv --query accessToken)
要跨多个注册表进行授权,请使用访问令牌
$ export ACCESS_TOKEN=$( \
az account get-access-token --query accessToken --output tsv)
更改
2.2 (2022-09-30)
- 添加了对以"https"为基础的URL存储Docker凭据的支持,而不是将主机名作为身份验证条目。
2.1 (2022-09-30)
- 除了身份令牌外,还添加了对存储Docker凭据中的用户名/密码凭据的支持。
2.0 (2022-09-30)
-
添加了对从存储的Docker凭据中提取刷新令牌的支持。
-
修复了两个不同存储库不会正确为目的地注册表授权的bug。
-
添加了对指定不同源和目标存储库的支持。如果需要,将复制丢失的blob。
1.0 (2022-01-29)
- 初始发布。
项目详情
appendlayer-2.2.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 34ef8189252f46ae678d24e9e9be42a1a26b023f0e9454a9966c92ee6b0a0f7d |
|
MD5 | a661942a5189ae9997d372f2716ba439 |
|
BLAKE2b-256 | 440e492fe69bc578182d5f4936dfbc186a981dda5b646c5225b672023e7c4b9c |