使用 Amazon S3 的托管远程存储

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

以下是 Docker in Action 的第 10 章中经过轻微修改的摘录。第 10 章深入介绍了 Docker Distribution 项目。

AWS 的简单存储服务(或 S3)提供了除 blob 存储之外的多种功能。您可以将 blob 配置为静态加密、版本控制、访问审计或通过 AWS 的内容交付网络提供。

使用“s3”存储属性采用 S3 作为托管的远程 blob 存储。有四个必需的子属性:“accesskey”、“secretkey”、“region”和“bucket”。这些是验证您的帐户并设置 blob 读取和写入发生的位置所必需的。其他子属性指定 Distribution 项目应如何使用 blob 存储。其中包括“加密”、“安全”、“v4auth”、“块大小”和“根目录”。

将加密属性设置为“true”将为您的注册表保存到 S3 的数据启用静态加密。这是一项免费功能,可增强您服务的安全性。

“secure”属性控制使用 HTTPS 与 S3 通信。默认值为 false,并且会导致使用 HTTP。如果您正在存储私人图像资料,则应将其设置为 true。

“v4auth”属性告诉注册表使用 AWS 身份验证协议的版本 4。一般来说,这应该设置为 true,但默认为 false。

大于 5GB 的文件必须拆分成更小的文件,并在 S3 的服务端重新组合。但是,分块上传适用于小于 5GB 的文件,大于 100MB 的文件应考虑分块上传。文件块可以并行上传,单个块上传失败可以单独退出。 Distribution 项目及其 S3 客户端自动执行文件分块,但“chunksize”属性设置文件应分块的大小。最小块大小为 5MB。

最后,“rootdirectory”属性设置 S3 存储桶中注册表数据的根目录。如果您想从同一个存储桶运行多个注册表,这将很有帮助。以下是默认配置文件的分支,并已配置为使用 S3(前提是您为您的帐户填写空白)。

文件名:s3-config.yml


 version: 0.1
log:
level: debug
fields:
service: registry
environment: development
storage:
cache:
layerinfo: inmemory
s3:
accesskey: <your awsaccesskey>
secretkey: <your awssecretkey>
region: <your bucket region>
bucket: <your bucketname>
encrypt: true
secure: true
v4auth: true
chunksize: 5242880
rootdirectory: /s3/object/name/prefix
maintenance:
uploadpurging:
enabled: false
http:
addr: :5000
secret: asecretforlocaldevelopment
debug:
addr: localhost:5001

提供帐户访问密钥、机密、存储桶名称和区域后,您可以使用以下 Dockerfile 将更新的注册表配置打包到新映像中:

文件名:s3-config.df


 version: 0.1
log:
level: debug
fields:
service: registry
environment: development
storage:
cache:
layerinfo: inmemory
s3:
accesskey: <your awsaccesskey>
secretkey: <your awssecretkey>
region: <your bucket region>
bucket: <your bucketname>
encrypt: true
secure: true
v4auth: true
chunksize: 5242880
rootdirectory: /s3/object/name/prefix
maintenance:
uploadpurging:
enabled: false
http:
addr: :5000
secret: asecretforlocaldevelopment
debug:
addr: localhost:5001

指定配置文件

设置默认参数以指定要使用的配置文件。如果 s3-config.yml 更改,提前设置将启用图层缓存。


 version: 0.1
log:
level: debug
fields:
service: registry
environment: development
storage:
cache:
layerinfo: inmemory
s3:
accesskey: <your awsaccesskey>
secretkey: <your awssecretkey>
region: <your bucket region>
bucket: <your bucketname>
encrypt: true
secure: true
v4auth: true
chunksize: 5242880
rootdirectory: /s3/object/name/prefix
maintenance:
uploadpurging:
enabled: false
http:
addr: :5000
secret: asecretforlocaldevelopment
debug:
addr: localhost:5001

并使用以下 docker build 命令构建它:


 version: 0.1
log:
level: debug
fields:
service: registry
environment: development
storage:
cache:
layerinfo: inmemory
s3:
accesskey: <your awsaccesskey>
secretkey: <your awssecretkey>
region: <your bucket region>
bucket: <your bucketname>
encrypt: true
secure: true
v4auth: true
chunksize: 5242880
rootdirectory: /s3/object/name/prefix
maintenance:
uploadpurging:
enabled: false
http:
addr: :5000
secret: asecretforlocaldevelopment
debug:
addr: localhost:5001

使用简单的“docker run”命令启动新的 S3 支持的注册表:


 version: 0.1
log:
level: debug
fields:
service: registry
environment: development
storage:
cache:
layerinfo: inmemory
s3:
accesskey: <your awsaccesskey>
secretkey: <your awssecretkey>
region: <your bucket region>
bucket: <your bucketname>
encrypt: true
secure: true
v4auth: true
chunksize: 5242880
rootdirectory: /s3/object/name/prefix
maintenance:
uploadpurging:
enabled: false
http:
addr: :5000
secret: asecretforlocaldevelopment
debug:
addr: localhost:5001

构建完整映像的替代方法是使用绑定挂载卷将配置文件加载到新容器中并设置默认命令。例如,您可以使用以下 Docker 命令:


 version: 0.1
log:
level: debug
fields:
service: registry
environment: development
storage:
cache:
layerinfo: inmemory
s3:
accesskey: <your awsaccesskey>
secretkey: <your awssecretkey>
region: <your bucket region>
bucket: <your bucketname>
encrypt: true
secure: true
v4auth: true
chunksize: 5242880
rootdirectory: /s3/object/name/prefix
maintenance:
uploadpurging:
enabled: false
http:
addr: :5000
secret: asecretforlocaldevelopment
debug:
addr: localhost:5001

如果你想变得非常花哨,你 可以 将新配置作为环境变量注入并使用库存图像。这对于秘密材料处理(如您的帐户细节)是个好主意。以这种方式运行容器看起来像:


 version: 0.1
log:
level: debug
fields:
service: registry
environment: development
storage:
cache:
layerinfo: inmemory
s3:
accesskey: <your awsaccesskey>
secretkey: <your awssecretkey>
region: <your bucket region>
bucket: <your bucketname>
encrypt: true
secure: true
v4auth: true
chunksize: 5242880
rootdirectory: /s3/object/name/prefix
maintenance:
uploadpurging:
enabled: false
http:
addr: :5000
secret: asecretforlocaldevelopment
debug:
addr: localhost:5001

在实践中,您通过配置文件提供与环境无关和不敏感的材料,但通过环境变量注入其余组件的混合方法将满足您的需求。

S3 在基于使用的成本模型下提供。入门无需前期费用,许多较小的注册管理机构将能够在任一服务的“免费层级”内运营。

如果您对托管数据服务不感兴趣并且在面对一些技术复杂性时毫不犹豫,那么您可以考虑运行 Ceph 存储集群和 RADOS blob 存储后端。