博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker Registry使用:公有Docker Registry使用、私有Docker Registry的搭建
阅读量:5956 次
发布时间:2019-06-19

本文共 4419 字,大约阅读时间需要 14 分钟。

公有Docker Registry的操作

首先必须注册自己的dockerhub账号,假设为simpledockerhub

[root@localhost ]# docker login --默认即https://hub.docker.com

Username : simpledockerhub

Password: *****

Login Succeeded

[root@localhost ]# docker pull hello-world

[root@localhost ]# docker tag hello-world simpledockerhub/hello-world

[root@localhost ]#docker push simpledockerhub/hello-world     ------注意 /前面的名称必须是用户注册的用户名。

这样就把hello-world镜像上传到simpledockerhub用户下,使用docker pull命令就可以下载该镜像了

私有Docker Registry的搭建

1. 单机版:只能通过localhost操作(个人玩玩还行)

[root@localhost ]#  docker run -d -p 5000:5000 registry:2

[root@localhost ]#  docker tag hello-world localhost:5000/hello-world

[root@localhost ]#  docker push localhost:5000/hello-world

2.通过自签名证书方式联机访问(生产环境推荐使用该方案):

在主机上安装一个自签名的证书,并同时给需要访问寄存服务器的每个Docker 守护进程都安装一份。

Registry主机地址:10.76.64.63,  访问者地址:10.76.64.82

Registry主机10.76.64.63做如下操作:

1. 创建目录,存放证书文件:

[root@localhost ]# mkdir centos1_certs

2. 生成自签名证书,拷贝到 /etc/docker/certs.d/centos1:5000目录

[root@centos1 ~]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout centos1_certs/domain.key -x509 -days 365 -out centos1_certs/domain.crt

。。。
Common Name (eg, your name or your server's hostname) []:centos1    ---这个为主机名称,需要和/etc/hosts里对应上
。。。

[root@centos1 ~]# mkdir -p /etc/docker/certs.d/centos1:5000

[root@centos1 ~]# cp centos1_certs/domain.crt /etc/docker/certs.d/centos1:5000/domain.crt

3. 修改hosts文件

[root@centos1 ~]#  vi /etc/hosts

10.76.64.63 centos1

4. 修改docker代理服务器文件(如果原来没有设置可以跳过)

[root@centos1 ~]# vi /etc/systemd/system/docker.service.d/http-proxy.conf      --------该文件配置见:

[Service]

Environment="NO_PROXY=127.0.0.1,localhost,centos1,10.76.*.*"

5. 重启服务

[root@centos1 ~]# systemctl daemon-reload

[root@centos1 ~]# systemctl restart docker.service

6. 启动registry 

[root@centos1 ~]# docker run -d --rm -p 5000:5000 --name registry -v /root/centos1_certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key docker.io/registry:2

7. 测试push命令

[root@localhost ]#  docker tag hello-world centos1:5000/hello-world

[root@centos1 ~]# docker push centos1:5000/hello-world

The push refers to repository [centos1:5000/hello-world]
ee83fc5847cb: Pushed
latest: digest: sha256:aca41a608e5eb015f1ec6755f490f3be26b48010b178e78c00eac21ffbe246f1 size: 524

通过浏览器调用

  到此为止可以通过主机名在本机访问registry了,如何在另外一台安装了docker环境的客户机访问registry呢?

8. 客户机10.76.64.82配置

直接访问:如下,报错是必然的

[root@centosdocker ~]# docker tag hello-world centos1:5000/hello-world:1.1

[root@centosdocker ~]# docker push centos1:5000/hello-world:1.1
The push refers to repository [centos1:5000/hello-world]
Get https://centos1:5000/v2/: Service Unavailable

解决步骤:

把centos1主机的domain.crt文件上传到客户机的centos1_certs目录,然后执行:

[root@centosdocker ~]# mkdir -p /etc/docker/certs.d/centos1:5000

[root@centosdocker ~]# cp centos1_certs/domain.crt /etc/docker/certs.d/centos1:5000/domain.crt

接下来执行上面的3、4、5步。

现在可以测试push命令了:

[root@centosdocker ~]# docker tag hello-world centos1:5000/helloworld

[root@centosdocker ~]# docker push centos1:5000/helloworld
The push refers to repository [centos1:5000/helloworld]
ee83fc5847cb: Mounted from hello-world
latest: digest: sha256:aca41a608e5eb015f1ec6755f490f3be26b48010b178e78c00eac21ffbe246f1 size: 524

 成功啦!

3.另外的方案:

对将要访问寄存服务器的所有Docker 守护进程加上-- insecure-registry ip或hostname:5000 参数,其中的地址和端口需要替换成你的服务器的信息,然后重新启动Docker 守护进程。

1. [root@centosdocker ~]#vi /etc/hosts

10.76.64.82 centosdocker

2. [root@centosdocker ~]# vi /lib/systemd/system/docker.service

....

OPTIONS='--selinux-enabled --insecure-registry centosdocker:5000'      -----添加这一行

[Install]
WantedBy=multi-user.target

3. [root@centosdocker ~]# vi  /etc/docker/daemon.json

{"insecure-registries":["centosdocker:5000"] }

4. [root@centosdocker system]# systemctl daemon-reload

5. [root@centosdocker system]# systemctl restart docker.service
6. [root@centosdocker system]# docker run -d -p 5000:5000 registry:2

7. [root@centosdocker system]# docker tag hello-world centosdocker:5000/hello-world

8. [root@centosdocker system]# docker push centosdocker:5000/hello-world

The push refers to repository [centosdocker:5000/hello-world]
ee83fc5847cb: Pushed
latest: digest: sha256:aca41a608e5eb015f1ec6755f490f3be26b48010b178e78c00eac21ffbe246f1 size: 524

部署到客户机除了不需要[root@centosdocker system]# docker run -d -p 5000:5000 registry:2外,其他操作相同,有兴趣可以试一下,如果有代理的话,需要在docker的no_proxy配置项上添加上registry主机名,如:

[Service]

Environment="NO_PROXY=127.0.0.1,localhost,centos1,centosdocker,10.76.*.*"

 

转载于:https://www.cnblogs.com/onetwothree/p/9402455.html

你可能感兴趣的文章
swift基础之_swift调用OC/OC调用swift
查看>>
Devexpress 15.1.8 Breaking Changes
查看>>
推荐JS插件:imagesLoaded,监测图片加载情况并提供相应的事件(加载成功/失败)...
查看>>
Java B2B2C多用户商城 springcloud架构- common-service 项目构建过程(七)
查看>>
杨老师课堂之ArrayList集合常用方法解析
查看>>
ElasticSearch Client详解
查看>>
新零售讲堂之时代下的传统零售业,何去何从?
查看>>
c++读取和写入TXT文件的整理
查看>>
深入动态人脸识别小场景应用,2019年或将迎来爆发期
查看>>
Ionic2 下处理 Android 设备下返回按钮的事件
查看>>
linux安全问答(1)
查看>>
zabbix监控进程的CPU和内存占用量
查看>>
Error creating bean with name 'userServiceImpl': Injection of autowired dependencies failed
查看>>
mybatis update返回值的意义
查看>>
SVNQuery–如何创建更新索引并查询
查看>>
java高质量图片压缩
查看>>
源码解读Linux的limits.conf文件
查看>>
java this关键字的使用
查看>>
linux基础1
查看>>
jquery之统计数字parseFloat
查看>>