云客户?
免费开始>
在MyJFrog >中升级
云有什么新>





概述

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

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

从Artifactory和Docker开始

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

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

  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的一个配置示例,它将SSL在443端口上配置到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获得。

[…##基本设置##[…]服务器{监听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;主机$ Host;proxy_set_header X-Forwarded-For $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设置部分,您应该确保选择V1作为Docker API版本。

页面内容


与Artifactory Cloud合作

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

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

在使用Docker客户端时,请使用以下地址:" $ {account_name} .jfrog.io "

3.设置认证

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

~ / .docker / json
{"auths":{"https://artprod.company.com":{"auth": ":(转换为64进制)","email": "youremail@email.com"}, "https://artdev.company.com":{"auth": ":(转换为64进制)","email": "youremail@email.com"}}}


4.推拉图像

在使用Docker V1时,推送和提取图像的方式与使用Docker V2时相同。

观看录像

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


浏览Docker存储库

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

  • .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回购名称属性

使用V1推广Docker映像

使用Docker V1推广Docker映像的方法与使用Docker V2推广Docker映像的方法完全相同。


将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存储库名称,如果为空—整个源存储库将被迁移。默认值:"
<标记>
要提升的可选标记名,如果为空—整个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" //删除"jfrog/ubuntu"资源库中的"12.04"标签curl -uadmin:password -X DELETE "https://artprod.company.com/v1/repositories/jfrog/ubuntu/tags/12.04"

空目录

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


高级的主题

使用自签名SSL证书

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

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

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

编辑DOCKER_OPTS变量
DOCKER_OPTS = " - h unix: / / / var /运行/码头工人。袜子——insecu-registry 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,你还可以设置Artifactory来使用Apache与Docker一起工作。

Apache配置

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

 ServerName artprod.company.com ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined 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/  .pem

端口绑定

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

绑定非443的端口时,请注意代理标头的配置必须与端口号附加在proxy_set_header线。

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

Docker存储库路径和域

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

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

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

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

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

版权所有©2022 JFrog Ltd.