S3存储驱动
预计阅读时间:7分钟
该页面包含有关使用开源Docker Registry托管自己的注册表的信息。有关Docker Hub的信息,它提供了托管注册表以及其他功能,例如团队,组织,Web挂钩,自动构建等,请参阅Docker Hub。
storagedriver.StorageDriver
使用Amazon S3或S3兼容服务进行对象存储的接口的实现。
参数
范围 | 必需的 | 描述 |
---|---|---|
accesskey |
不 | 您的AWS访问密钥。如果您使用IAM角色,请省略以从IAM中获取临时凭证。 |
secretkey |
不 | 您的AWS秘密密钥。如果您使用IAM角色,请省略以从IAM中获取临时凭证。 |
region |
是的 | 存储桶所在的AWS区域。目前,使用中的Go AWS库未使用较新的基于DNS的存储桶路由。 |
regionendpoint |
不 | S3兼容存储服务的端点(Minio等)。 |
bucket |
是的 | 您要在其中存储注册表数据的存储桶名称。 |
encrypt |
不 | 指定注册表是否以加密格式存储映像。布尔值。默认值为false 。 |
keyid |
不 | 用于加密的可选KMS密钥ID(encrypt必须为true,否则此参数将被忽略)。默认值为none 。 |
secure |
不 | 指示是否使用HTTPS而不是HTTP。布尔值。默认值为true 。 |
skipverify |
不 | 将该值设置为时,跳过TLS验证true 。默认值为false 。 |
v4auth |
不 | 指示注册表是否使用AWS身份验证的版本4。默认值为true 。 |
chunksize |
不 | S3 API要求分段上传的块至少为5MB。此值应为大于5 * 1024 * 1024的数字。 |
rootdirectory |
不 | 这是一个前缀,应用于所有S3键,以便在必要时允许您对存储区中的数据进行分段。 |
storageclass |
不 | S3存储类应用于每个注册表文件。默认值为STANDARD 。 |
注意您可以提供用于访问的空字符串和密钥,以在ec2实例上运行驱动程序并使用实例的凭据处理身份验证。如果您使用IAM角色,请省略这些密钥以从IAM中获取临时凭证。
region
:您要在其中存储对象的aws区域的名称(例如us-east-1
)。有关区域的列表,请参见区域,可用区和本地区域。
regionendpoint
:(可选)S3兼容API的端点URL。使用Amazon S3时不应提供此功能。
bucket
:要在其中存储对象的S3存储桶的名称。存储桶必须在驱动程序初始化之前存在。
encrypt
:(可选)是否要在服务器端加密数据(如果未指定,则默认为false)。
keyid
:(可选)是否要使用此KMS密钥ID加密数据(如果未指定,则默认为无;如果加密为非true,则将被忽略)。
secure
:(可选)是否要通过ssl将数据传输到存储桶。如果未指定,则默认为true(表示通过ssl传输)。虽然将此设置为false可以提高性能,但是出于安全考虑,不建议这样做。
v4auth
:(可选)是否要在请求中使用aws签名版本4。false
如果未指定,则默认为。该eu-central-1
区域不适用于版本2签名,因此,如果使用此区域并将v4auth设置为,则驱动程序会出错false
。
chunksize
:(可选)向S3分段上传(由WriteStream执行)的默认部分大小。默认值为10 MB。请记住,S3的最小部件大小为5MB。取决于您与S3的连接速度,更大的块可能会导致更好的性能。更快的连接受益于更大的块大小。
rootdirectory
:(可选)存储所有注册表文件的根目录树。默认为空字符串(存储桶根)。
storageclass
:(可选)应用于每个注册表文件的存储类。默认为标准。有效选项为STANDARD和REDUCED_REDUNDANCY。
S3权限范围
注册表要求以下AWS策略进行推和拉。确保S3_BUCKET_NAME
用您的存储桶名称替换。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:ListBucketMultipartUploads"
],
"Resource": "arn:aws:s3:::S3_BUCKET_NAME"
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject",
"s3:ListMultipartUploadParts",
"s3:AbortMultipartUpload"
],
"Resource": "arn:aws:s3:::S3_BUCKET_NAME/*"
}
]
}
有关更多详细信息,请参阅S3策略文档。
CloudFront作为具有S3后端的中间件
用例
将CloudFront添加为S3支持的注册表的中间件可以大大缩短提取时间。您的注册表可以从边缘服务器检索图像,而不是从S3存储桶的地理位置限制中检索图像。您的注册表离存储桶越远,可以进行的改进越多。请参阅Amazon CloudFront。
对于CloudFront的另一种需要较少配置并使用相同边缘服务器的方法是S3 Transfer Acceleration。请检查加速要求, 以了解您是否需要CloudFront或S3 Transfer Acceleration。
配置CloudFront进行分发
如果您不熟悉创建CloudFront发行版,请参阅《Cloudfront入门》。
可以在大多数区域保留默认值,但以下情况除外:
起源:
-
必须创建CloudFront分配,以将
Origin Path
其设置为S3中根“ docker”键的目录级别。如果您的注册表位于存储桶的根目录下,则此路径应留空。 -
对于私有S3存储桶,您必须设置
Restrict Bucket Access
为Yes
。请参阅CloudFront文档。
行为:
- 查看器协议策略:仅HTTPS
- 允许的HTTP方法:GET,HEAD,OPTIONS,PUT,POST,PATCH,DELETE
- 缓存的HTTP方法:OPTIONS(已选中)
- 限制查看者访问(使用签名的URL或签名的Cookie):是
- 受信任的签名者:自身(只要您可以访问其他帐户的CloudFront密钥对,就可以添加其他帐户)
注册表配置
在此使用该middleware
选项。保留该storage
选项仍然很重要
,因为CloudFront仅处理pull
操作;因此,请参见参考资料。push
动作仍直接写入S3。
以下示例显示了最低配置:
...
storage:
s3:
region: us-east-1
bucket: docker.myregistry.com
middleware:
storage:
- name: cloudfront
options:
baseurl: https://abcdefghijklmn.cloudfront.net/
privatekey: /etc/docker/cloudfront/pk-ABCEDFGHIJKLMNOPQRST.pem
keypairid: ABCEDFGHIJKLMNOPQRST
...
CloudFront密钥对
所有需要访问您的CloudFront发行版的AWS账户都需要一个CloudFront密钥对。您必须有权访问您的AWS账户的根凭证才能创建所需的Cloudfront密钥对。有关信息,请参阅创建CloudFront密钥对。
注册表,服务,驱动程序,图像,存储,S3