云客户?
免费开始>
在MyJFrog中升级>
云的新功能>





概述

本页面描述了如何在Docker V1注册表API中使用Artifactory。如果您正在使用Docker V2注册表API,请参考码头工人注册表

有关在Docker中使用Artifactory的一般信息,请参考作为Docker注册表

Artifactory和Docker入门

Artifactory透明地支持Docker,这意味着你可以将Docker客户端指向Artifactory,并以与直接使用私有注册表或Docker Hub时完全相同的方式发出推送、拉入和其他命令。

要开始使用Docker和Artifactory,你需要执行以下步骤:

  1. 将web服务器设置为反向代理
  2. 创建本地存储库
  3. 设置身份验证
  4. 推拉图像

截屏视频在本节的最后提供了一个演示。

1.设置NGINX作为反向代理

由于Docker客户端的以下限制,Artifactory只能通过反向代理与Docker一起使用:

  1. 在提供注册表路径时,不能提供上下文路径(例如localhost: 8081 / artifactory无效)
  2. 当工作在HTTPS主机上时,Docker只会发送基本的HTTP身份验证

要让Artifactory与Docker一起工作,首选的web服务器是NGINX v1.3.9并在上面配置为反向代理。

有关其他支援的网页伺服器,请参阅替代代理服务器

下面是NGINX的一个示例配置,它将端口443上的SSL配置到Artifactory中的特定本地存储库(名为docker-local)在一个名为artprod.company.com

使用Docker v1, Docker客户端v1.10和Artifactory 4.4.3已知问题。

在使用Docker V1和Docker 1.10时,为了避免不兼容,请使用下面显示的NGINX配置,而不是Artifactory v4.4.3生成的NGINX配置。

这段代码需要NGINX支持块传输编码,该编码从NGINX v1.3.9开始可用。

[…http{## #基本设置##[…]服务器{监听443;server_name artprod.company.com;ssl;ssl_certificate /etc/ssl/certs/artprod.company.com.crt;ssl_certificate_key /etc/ssl/private/artprod.company.com.key;access_log /var/log/nginx/artprod.company.com.access.log;error_log /var/log/nginx/artprod.company.com.error.log;proxy_set_header $ Host;$proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Original-URI $request_uri; proxy_read_timeout 900; client_max_body_size 0; # disable any limits to avoid HTTP 413 for large image uploads # required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486) chunked_transfer_encoding on; location /v1 { proxy_pass http://artprod.company.com:8081/artifactory/api/docker/docker-local/v1; } } }

多个Docker存储库和端口绑定

如果您想使用多个Docker存储库,则需要复制此配置,并将不同的端口绑定到Artifactory中的每个本地存储库。详情请参阅端口绑定

存储库URL前缀

当通过Artifactory访问Docker存储库时,存储库URL必须以api /码头工人在小路上。详情请参阅Docker存储库路径和域

2.创建本地Docker存储库

这是在相同的方式,当配置本地存储库然而,要使用Docker V2,在Docker Settings部分,你应该确保选择V1作为Docker API版本。

页面内容


与Artifactory Cloud一起工作

由于Docker客户端的限制,在Artifactory Cloud中,每个带有子域的服务器都有一个特殊的配置。

您需要创建一个新的启用Docker的本地存储库,命名为docker-local。

然后,使用以下地址与Docker客户端一起工作:" $ {account_name} .jfrog.io "

3.设置认证

在Docker V1中使用Artifactory时,您需要手动设置凭据,方法是将以下部分添加到您的~ / .docker / json文件。

~ / .docker / json
{"auth": {"https://artprod.company.com":{"auth": ": (base64)", "email": "youremail@email.com"}, "https://artdev.company.com":{"auth": ": (base64)", "email": "youremail@email.com"}}


4.推拉图像

使用Docker V1时,推送和拉取映像的方式与使用Docker V2时相同。

观看视频

一旦你完成了上面的设置,你应该能够使用Docker客户端透明地在Artifactory的Docker存储库中推送和提取图像。你可以在下面的截屏中看到这一点。


浏览Docker存储库

Artifactory将docker映像存储在一个由两个主要目录组成的布局中:

  • .images:存储所有平面docker映像。
  • 存储库:用标签存储所有存储库信息(类似于存储库在Docker Hub中的存储方式)。

此外,Artifactory用两个属性注释每个部署的docker镜像:

  • docker.imageId:图像id
  • docker.size:以位为单位的图像大小

部署的标签也用两个属性注释:

  • docker.tag.name:标签名称
  • docker.tag.content:此标记指向的图像的id

Docker V1属性


Docker标签属性

查看Docker镜像树

Artifactory允许您直接从UI中查看特定图像的完整图像树,其方式与从Docker镜像——树命令。

工件模块树浏览器,向下钻取图像你想检查。元数据显示在码头工人的祖先选项卡。

码头工人的祖先

查看单个Docker镜像信息

工件模块树浏览器,向下钻取以选择要检查的图像。元数据显示在码头工人信息选项卡。

码头工人信息

搜索Docker镜像

除了与Docker存储库相关的其他属性外,您还可以使用名为docker.repoName,表示存储库名称(例如,图书馆/ ubuntu)。

Docker repo name属性

使用V1提升Docker镜像

使用Docker V1提升Docker镜像的方式与使用Docker V2提升镜像的方式完全相同。


将V1存储库迁移到V2

我们建议尽可能使用Docker V2存储库(前提是您的Docker客户端是1.6及以上版本)。

如果你有一个现有的Docker V1存储库,你可以使用cURL将其内容迁移到V2存储库中:

POST api/docker//v1/migrate {"targetRepo": "", "dockerRepository": "", "tag": ""}

地点:

< repoKey >
源存储库密钥(例如,docker-local如本页所述)
< targetRepo >
要迁移到的目标Docker V2存储库(例如,docker-local2如本页所示)。类之前应该创建存储库迁移端点。
< dockerRepository >
可选的要迁移的docker存储库名称,如果为null -整个源存储库将被迁移。默认值:"
<标记>
一个可选的标签名,如果为空,整个docker存储库将被提升。默认值:"


迁移docker镜像的示例“jfrog / ubuntu”所有的标签都来自docker-localdocker-local2使用cURL将是:

curl -i -uadmin:password -X POST "http://localhost:8081/artifactory/api/docker/docker-local/v1/migrate" -H "Content-Type: application/json" -d '{"targetRepo":"docker-local2","dockerRepository":"jfrog/ubuntu"}'

删除和清理

Artifactory本身支持删除标记和存储库,并遵守Docker Hub规范

删除Docker标签和存储库会自动清理剩下的孤立层(没有被任何其他标签/存储库使用的层)。

目前,Docker客户端不支持DELETE命令,但可以使用cURL手动触发删除。下面是一些例子:

删除存储库和标记
//删除"jfrog/ubuntu"存储库curl -uadmin:password -X DELETE "https://artprod.company.com/v1/repositories/jfrog/ubuntu" //删除"12.04"标签从"jfrog/ubuntu"存储库curl -uadmin:password -X DELETE "https://artprod.company.com/v1/repositories/jfrog/ubuntu/tags/12.04"

空目录

删除存储库或标记后留下的任何空目录将在下一个文件夹修剪作业(默认情况下每5分钟发生一次)期间自动删除。


高级的主题

使用自签名SSL证书

从Docker版本1.3.1开始您可以使用自签名SSL证书码头工人推/拉命令,但是要使其工作,您需要指定——insecure-registry每个不安全注册表的守护进程标志。

详情请参阅码头工人的文档

例如,如果您将Docker作为服务运行,请编辑/etc/default/docker文件,并追加——insecure-registry将注册表URL标记为DOCKER_OPTS变量,如下例所示:

编辑DOCKER_OPTS变量
DOCKER_OPTS = " - h unix: / / / var /运行/码头工人。袜子——不安全的注册artprod.company.com”

要使其生效,需要重新启动Docker服务。

如果你正在使用Boot2Docker,请参考Boot2Docker文档不安全的注册表

如果您不进行所需的修改——insecure-registryDaemon标志,你应该得到以下错误:

错误消息
错误:注册表端点无效https://artprod.company.com/v1/:获取https://artprod.company.com/v1/_ping: x509:由未知权威机构签名的证书。

使用以前版本的Docker

为了在以前版本的Docker中使用自签名SSL证书,您需要手动将证书安装到运行Docker客户端的每台机器的操作系统中发行2687

替代代理服务器

除了NGINX,你还可以使用Apache设置Artifactory与Docker一起工作。

Apache配置

下面的示例配置在端口443上配置SSL,服务器名称为artprod.company.com

 ServerName artprod.company.com ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log组合SSLEngine on SSLCertificateFile /etc/ssl/certs/artprod.company.com.pem SSLCertificateKeyFile /etc/ssl/private/artprod.company.com.key ProxyRequests off ProxyPreserveHost on ProxyPass / http://artprod.company.com:8080/artifactory/api/docker/docker-local/ ProxyPassReverse / http://artprod.company.com:8080/artifactory/api/docker/docker-local/ 

端口绑定

如果要使用多个存储库,则需要复制NGINX配置并将不同的端口绑定到Artifactory中的每个本地存储库。

当绑定443以外的端口时,请注意,代理报头的配置必须在配置文件中添加端口号proxy_set_header线。

例如,对于运行在端口444上的服务器,您应该编写proxy_set_header Host $ Host:444

Docker存储库路径和域

当通过Artifactory访问Docker存储库时,存储库URL必须以api /码头工人在小路上。

可以从UI中复制完整的URL帮我介绍当在树浏览器中选择存储库时。

例如,如果你使用Artifactory独立或作为本地服务,你可以使用以下URL访问你的Docker存储库:

http://localhost:8081/artifactory/api /码头工人<库关键>

此外,Docker存储库的域必须用显式IP地址表示。惟一的例外是在本地工作时,您可以使用本地主机域名作为代理通道。

版权所有©2022 JFrog Ltd.