docker私有库Docker Registry设置.docx
- 文档编号:12057288
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:16
- 大小:23.32KB
docker私有库Docker Registry设置.docx
《docker私有库Docker Registry设置.docx》由会员分享,可在线阅读,更多相关《docker私有库Docker Registry设置.docx(16页珍藏版)》请在冰点文库上搜索。
docker私有库DockerRegistry设置
Docker私有库设置
官方镜像下的简单示例
本节中,将创建一个Container来运行Docker的官方Registry镜像。
你将推送(Push)一个镜像到这个Registry服务器,然后再从该Registry中拉取(Pull)同一个镜像。
这是个很好的练习,有助于理解客户端与本地Registry的基本交互。
1.安装Docker。
2.从Docker公共Registry中运行 hello-world 镜像。
1
$docker run hello-world
run 命令自动从Docker的官方镜像库中将 hello-world 镜像pull下来。
3.在localhost上启动Registry服务。
1
$docker run-p5000:
5000registry:
2.0
这将在 DOCKER_HOST 上启动一个Registry服务,并在 5000 端口监听。
4.列出镜像。
1
2
3
4
5
$docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
registry 2.0 bbf0b6ffe923 3days ago 545.1MB
golang 1.4 121a93c90463 5days ago 514.9MB
hello-world latest e45a5af57b00 3months ago 910B
这个列表应当包括一个由先前运行而得来的 hello-world 镜像。
5.为本地repoistory重新标记 hello-world 镜像。
1
$docker tag hello-world:
latest localhost:
5000/hello-mine:
latest
此命令使用 [REGISTRYHOST/]NAME[:
TAG] 格式为 hello-world:
latest 重新打标。
REGISTRYHOST 在此例中是 localhost。
在MacOSX环境中,得把 localhost 换成 $(boot2docker ip):
5000。
6.列出新镜像。
1
2
3
4
5
6
$docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
registry 2.0 bbf0b6ffe923 3days ago 545.1MB
golang 1.4 121a93c90463 5days ago 514.9MB
hello-world latest e45a5af57b00 3months ago 910B
localhost:
5000/hello-mine latest ef5a5gf57b01 3months ago 910B
可以看到,新镜像已经出现在列表中。
7.推送新镜像到本地Registry中。
1
2
3
4
5
6
$docker push localhost:
5000/hello-mine:
latest
The push refers toarepository[localhost:
5000/hello-mine](len:
1)
e45a5af57b00:
Image already exists
31cbccb51277:
Image successfully pushed
511136ea3c5a:
Image already exists
Digest:
sha256:
a1b13bc01783882434593119198938b9b9ef2bd32a0a246f16ac99b01383ef7a
8.使用 curl 命令及DockerRegistry服务APIv2列出Registry中的镜像:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$curl-v-XGEThttp:
//localhost:
5000/v2/hello-mine/tags/list
*Hostname was NOTfound inDNS cache
* Trying127.0.0.1...
*Connected tolocalhost(127.0.0.1)port5000(#0)
>GET/v2/hello-mine/tags/list HTTP/1.1
>User-Agent:
curl/7.35.0
>Host:
localhost:
5000
>Accept:
*/*
>
application/json;charset=utf-8 registry/2.0 Sun,12Apr201501: 29: 47GMT 40 < {"name": "hello-mine","tags": ["latest"]} *Connection#0tohostlocalhostleftintact 也可以通过在浏览器中访问以下地址来获取这些信息: http: //localhost: 5000/v2/hello-mine/tags/list 9.从你的本地环境中移除所有未使用的镜像: 1 $docker rmi-f$(docker images-q-a) 此命令仅用于说明目的;移除镜像强制 run 从Registry而不是从本地缓存拉取。 如果在这之后运行dockerimages,在你的镜像列表中,应该看不到任何 hello-world 或 hello-mine 的实例。 1 2 3 4 $docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE registry 2.0 bbf0b6ffe923 3days ago 545.1MB golang 1.4 121a93c90463 5days ago 514.9MB 10.试运行 hello-mine。 1 2 3 4 $docker run hello-mine Unable tofindimage'hello-mine: latest'locally Pulling repository hello-mine FATA[0001]Error: image library/hello-mine: latest notfound 命令 run 运行失败,因为你的新镜像在Docker公共Registry中是不存在的。 11.现在,尝试指定镜像的Registry来运行镜像: 1 $docker run localhost: 5000/hello-mine 如果你在这之后运行 dockerimages,你会发现里面多了一个 hello-mine 的实例。 使Docker官方Registry镜像做好生产环境准备 Docker的官方镜像只为简单的测试或除错准备。 其配置对多数生产环境来讲都不适用。 例如,任何能访问服务器IP的客户端,都能推送及拉取镜像。 参看下一节,获取使该镜像做好生产环境准备的信息。 理解生产环境的部署 当部署一个用于生产环境发布的Registry时,须考虑如下因素: BACKENDSTORAGE 应在何处存储镜像? ACCESSAND/ORAUTHENTICATION 用户是否应拥有全部或受控的访问权限? 这取决于你为公众提供镜像服务,还是只为公司内部提供。 DEBUGGING 当问题或状况发生时,是否有解决这些它们的方法。 日志由于可以看到问题动向,这使其很有用。 CACHING 快速提取镜像可能至关重要,如果依赖镜像进行测试、构建,或有其他自动化系统的话。 我们可以配置Registry功能特性,用以调整适配这些因素。 可以在命令行里指定选项来干这个,或者更通常地,用一个Registry配置文件来完成此事。 配置文件是YAML格式的。 Docker的官方Repository镜像用以下配置文件做了预置: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 ```yaml version: 0.1 log: level: debug fields: service: registry environment: development storage: cache: layerinfo: inmemory filesystem: rootdirectory: /tmp/registry-dev http: addr: : 5000 secret: asecretforlocaldevelopment debug: addr: localhost: 5001 redis: addr: localhost: 6379 pool: maxidle: 16 maxactive: 64 idletimeout: 300s dialtimeout: 10ms readtimeout: 10ms writetimeout: 10ms notifications: endpoints: -name: local-8082 url: http: //localhost: 5003/callback headers: Authorization: [Bearer timeout: 1s threshold: 10 backoff: 1s disabled: true -name: local-8083 url: http: //localhost: 8083/callback timeout: 1s threshold: 10 backoff: 1s disabled: true ``` 这个配置非常基本,可以看到这在生产环境下会有一些问题。 例如,http 区块详述了运行Registry的主机的HTTP服务器配置,但服务器没有使用甚至是最低要求的传输层安全性(TLS)配置。 接下来我们将配置这些东西。 在Registry服务器上配置TLS 在本节中,将在服务器上配置TLS,使能通过 https 协议来通信。 在服务器上启用TLS是在企业防火墙内运行Registry推荐的最低安全配置。 达成这一目标的方法之一就是构建你自己的Registry镜像。 下载source并生成certificates 1. 下载Registry源码。 当然,也可以使用 gitclone 命令。 2.把下载的包解压到本地目录。 解压后创建 distribution 目录。 3.进入 distribution 目录。 1 $cddistribution 4.新建 certs 子目录。 1 $mkdircerts 5.使用SSL生成自签名证书。 1 2 3 $openssl req\ -newkey rsa: 2048-nodes-keyout certs/domain.key\ -x509-days365-out certs/domain.crt 此命令将提示你回答一些基本的信息,用于创建证书。 6.列出 certs 目录的内容。 1 2 $lscerts domain.crtdomain.key 当你构建这个Container时,certs 目录及其内容也会自动被复制。 将TLS加入配置 distribution 软件库在 cmd 子目录中包含有示例Registry配置。 在本节中,您可以编辑这些配置之一,以添加TLS支持。 1.编辑 ./cmd/registry/config.yml 文件。 1 $vi./cmd/registry/config.yml 2.定位到 http 区块。 1 2 3 4 5 http: addr: : 5000 secret: asecretforlocaldevelopment debug: addr: localhost: 5001 3.给服务器的自签名证书新增一个 tls 区块: 1 2 3 4 5 6 7 8 http: addr: : 5000 secret: asecretforlocaldevelopment debug: addr: localhost: 5001 tls: certificate: /go/src/ key: /go/src/ 提供Container内到证书的路径。 如果你希望跨Layer使用两步认证,那么你可以增加一个clientcas 区块选项。 4.保存并关闭该文件。 构建并运行你的Registry镜像 1.构建你的Registry镜像。 1 $docker build-tsecure_registry. 2.运行你的新镜像。 1 2 3 4 5 6 7 $docker run-p5000: 5000secure_registry: latest time="2015-04-12T03: 06: 18.616502588Z"level=info msg="endpointlocal-8082disabled,skipping"environment=development instance.id=bf33c9dc-2564-406b-97c3-6ee69dc20ec6service=registry time="2015-04-12T03: 06: 18.617012948Z"level=info msg="endpointlocal-8083disabled,skipping"environment=development instance.id=bf33c9dc-2564-406b-97c3-6ee69dc20ec6service=registry time="2015-04-12T03: 06: 18.617190113Z"level=info msg="usinginmemorylayerinfocache"environment=development instance.id=bf33c9dc-2564-406b-97c3-6ee69dc20ec6service=registry time="2015-04-12T03: 06: 18.617349067Z"level=info msg="listeningon: 5000,tls"environment=development instance.id=bf33c9dc-2564-406b-97c3-6ee69dc20ec6service=registry time="2015-04-12T03: 06: 18.628589577Z"level=info msg="debugserverlisteninglocalhost: 5001" 2015/04/1203: 06: 28http: TLS handshake error from172.17.42.1: 44261: remote error: unknown certificate authority 观察启动时的信息。 你应该可以看到 tls 在运行。 3.使用 curl 验证可以通过 https 连接。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 $curl-vhttps: //localhost: 5000 *Rebuilt URL to: https: //localhost: 5000/ *Hostname was NOTfound inDNS cache * Trying127.0.0.1... *Connected tolocalhost(127.0.0.1)port5000(#0) *successfully set certificate verify locations: * CAfile: none CApath: /etc/ssl/certs *SSLv3,TLS handshake,Client hello (1): *SSLv3,TLS handshake,Server hello (2): *SSLv3,TLS handshake,CERT(11): *SSLv3,TLS alert,Server hello (2): *SSL certificate problem: selfsignedcertificate *Closing connection0 curl: (60)SSL certificate problem: selfsignedcertificate Moredetails here: http: //curl.haxx.se/docs/sslcerts.html 配置适合v1及v2版本Registry的Nginx 本节介绍了如何使用 docker-compose ,在 nginx 代理背后运行版本1和2并存的Registry服务。 并存的Registry服务都用 localhost: 5000 访问。 如果 docker 客户端版本小于1.6,那么Nginx将其请求路由到1.0版本的Registry服务。 从更新版本客户端发来的请求,将路由到2.0版本的Registry服务。 此过程使用您在上面最后一个过程中创建的 distribution 目录。 该目录包含有一个 compose 配置示例。 安装DockerCompose 1.在你 distribution 目录所在主机上打开一个新的终端窗口。 2.获取 docker-compose 二进制可执行文件。 1 $sudo wget 此命令将二进制可执行文件安装到 /usr/local/bin 目录。 3.添加可执行权限到二进制文件。 1 $sudo chmod+x/usr/local/bin/docker-compose 做一些清理 1.移除早先的镜像。 1 $docker rmi-f$(docker images-q-a) 该步骤是一个内部管理步骤。 这可以防止你在这个例子里错误地选取了旧的镜像。 2.编辑 distribution/cmd/registry/config.yml 文件,并移除 tls 区块。 如果沿用了前面例子里的东西,你就会有一个 tls 区块。 4.保存变更并关闭文件。 配置SSL 1.进入 distribution/contrib/compose/nginx 目录。 该目录包含了 Nginx及Registry的配置文件。 2.使用SSL生成自签名证书。 1 2 3 $openssl req\ -newkey rsa: 2048-nodes-keyout domain.key\ -x509-days365-out domain.crt 此命令将提示你回答一些问题,供证书创建使用。 3.编辑 Dockerfile 并添加以下行。 1 2 COPYdomain.crt/etc/nginx/domain.crt COPYdomain.key/etc/nginx/domain.key 当你全部搞完的时候,这个文件看上去像下面。 1 2 3 4 5 6 7 8 FROMnginx: 1.7 COPYnginx.conf/etc/nginx/nginx.conf COPYregistry.conf/etc/nginx/conf.d/registry.conf COPYdocker-registry.conf/etc/nginx/docker-registry.conf COPYdocker-registry-v2.conf/etc/nginx/docker-registry-v2.conf COPYdomain.crt/etc/nginx/domain.crt COPYdomain.key/etc/nginx/domain.key 4.保存并关闭 Dockerfile 文件。 5.编辑 registry.conf 文件并增加以下配置。 1 2 3 sslon; ssl_certificate/etc/nginx/domain.crt; ssl_certificate_key/etc/nginx/domain.key; 这是一个 nginx 配置文件。 6.保存并关闭 registry.conf 文件。 构建并运行 1.进到 distribution/contrib/compose 目录 此目录包含单一个 docker-compose.yml 配置。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 nginx: build: "nginx" ports: -"5000: 5000" links: -registryv1: registryv1 -r
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- docker私有库Docker Registry设置 docker 私有 Registry 设置