如果您的注册表调用是高级的,那么使用 Docker compose 文件来部署它可能会更容易,而不是依赖于特定的docker run 调用。使用以下示例docker-compose.yml作为模板。
registry:
restart: always
image: registry:2
ports:
- 5000:5000
environment:
REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
REGISTRY_HTTP_TLS_KEY: /certs/domain.key
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
volumes:
- /path/data:/var/lib/registry
- /path/certs:/certs
- /path/auth:/auth
替换/path为包含certs/和目录的auth/ 目录。
docker-compose.yml通过在包含该文件的目录中发出以下命令来启动您的注册表:
$ docker-compose up -d
您可以在没有 Internet 连接的环境中运行注册表。但是,如果您依赖任何非本地图像,则需要考虑以下几点:
您可能需要在连接的主机上构建本地注册表的数据卷,您可以在该主机上运行docker pull以获取远程可用的任何图像,然后将注册表的数据卷迁移到气隙网络。
某些图像(例如官方 Microsoft Windows 基础图像)是不可分发的。这意味着当您将基于这些图像之一的图像推送到您的私有注册表时,不可分发的层不会 被推送,而是始终从其授权位置获取。这对于连接互联网的主机来说很好,但不适用于气隙设置。
您可以配置 Docker 守护程序以允许将不可分发的层推送到私有注册表。 这仅在存在不可分发图像的气隙设置中或在带宽极其有限的情况下有用。 您有责任确保遵守不可分发层的使用条款。
1.编辑daemon.json位于/etc/docker/Linux 主机和C:\ProgramData\docker\config\daemon.jsonWindows Server 上的文件。假设文件之前是空的,添加以下内容:
{
"allow-nondistributable-artifacts": ["myregistrydomain.com:5000"]
}
该值是一个注册表地址数组,以逗号分隔。
保存并退出文件。
2.重启 Docker。
3.如果注册表没有自动启动,请重新启动它。
4.当您将图像推送到列表中的注册表时,它们的不可分发层将被推送到注册表。