CentOS7安装Docker-Registry
文章目录
- 环境
- 简介
- 准备
- 下载
- 启动
- 无密码
- 测试
- 解决方案
- 映射是否生效
- pull
- 有密码
- 测试
- 启动Secure Registry
- 证书
- 安装证书
- 登录测试
- 客户端[local-12]push
- API
- 最佳实践
- 关键点
- 命令瀑布
- 服务端
- 客户端
- 清理
- 清空所有
- 精准
- 参考
环境
Docker | 版本 |
---|---|
CentOS
|
7
|
Docker
|
19.03.2
|
docker-registry |
2.7.0
|
Registry服务器信息 |
IP:192.168.0.122 主机名: uat Domain:uat.cnswb.com
|
服务器端口映射 |
18080:5000
|
Registry客户端信息 |
IP:192.168.0.12 主机名: local-12
|
简介
Docke官方提供了Docker Hub网站来作为一个公开的集中仓库。然而,本地访问
Docker Hub
速度往往很慢,并且很多时候我们需要一个本地的私有仓库只供网内使用。
Docker仓库实际上提供两方面的功能,一个是镜像管理,一个是认证。前者主要由docker-registry
项目来实现,通过http服务来上传下载;后者可以通过docker-index(闭源)项目或者利用现成认证方案(如nginx)实现http请求管理。
更多信息参考官方文档.
准备
为了方便以后清理,需要指定文件夹用以映射镜像存储路径/var/lib/registry
,创建文件夹/var/lib/registry
mkdir -p /var/lib/registry
注:/var/lib/registry
是默认的根目录,可以通过修改环境变量REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY
自定义,参考配置Registry
环境变量
将REGISTRY_HOME=/var/lib/registry
写入/etc/profile
并重置:resource /etc/profile
。
下载
docker pull registry:2.7.0
启动
无密码
docker run -d --restart=unless-stopped -v /var/lib/registry:/var/lib/registry -p 18080:5000 registry:2.7.0
测试
docker tag swb-svc-house:uat-5 192.168.0.122:18080/swb-svc-house:dev-35
docker push 192.168.0.122:18080/swb-svc-house:dev-35
此时会报错:
The push refers to repository [192.168.0.122:18080/swb-svc-house]
Get https://192.168.0.122:18080/v2/: http: server gave HTTP response to HTTPS client
解决方案
vim /usr/lib/systemd/system/docker.service
- 找到
ExecStart
开头一行,并在最后添加--insecure-registry=192.168.0.12:18080
重启Docker
systemctl daemon-reload && systemctl restart docker
重新push
docker push 192.168.0.122:18080/swb-svc-house:dev-35
映射是否生效
ll /var/lib/registry/docker/registry/v2/repositories/
pull
docker rmi 192.168.0.122:18080/swb-svc-house:dev-35
docker pull 192.168.0.122:18080/swb-svc-house:dev-35
出现类似如下信息表示成功
[root@uat ~]# docker rmi 192.168.0.122:18080/swb-svc-house:dev-35
Untagged: 192.168.0.122:18080/swb-svc-house:dev-35
Untagged: 192.168.0.122:18080/swb-svc-house@sha256:a54c22bbfa197639032d88b198bfe57966a95799dcfc9637f929c88e07078925
[root@uat ~]# docker pull 192.168.0.122:18080/swb-svc-house:dev-35
dev-35: Pulling from swb-svc-house
Digest: sha256:a54c22bbfa197639032d88b198bfe57966a95799dcfc9637f929c88e07078925
Status: Downloaded newer image for 192.168.0.122:18080/swb-svc-house:dev-35
192.168.0.122:18080/swb-svc-house:dev-35
有密码
生成用户名为swb
密码为swbyouwant2019
的htpasswd
mkdir $REGISTRY_HOME/auth
docker run --entrypoint htpasswd registry:2.7.0 -Bbn swb swbyouwant2019 > $REGISTRY_HOME/auth/htpasswd
启动带鉴权功能的Registry:
docker run -d --restart=unless-stopped \-v $REGISTRY_HOME:$REGISTRY_HOME \-e "REGISTRY_AUTH=htpasswd" \-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \-e REGISTRY_AUTH_HTPASSWD_PATH=$REGISTRY_HOME/auth/htpasswd \-p 18080:5000 registry:2.7.0
测试登录:
docker login 192.168.0.122:18080Username: swb
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded
测试
参考上一小节测试。
启动Secure Registry
如果你拥有一个域名,域名下主机提供Registry服务,并且你拥有某知名CA签署的证书文件,那么你可以建立起一个Secure Registry。也就是说可以删除docker.service
中启动项参数--insecure-registry=192.168.0.12:18080
了。
不过局域网没有现成的证书,只能使用自签署的证书。严格来讲,使用自签署的证书在Docker官方眼中依旧属于Insecure,不过这里只是借助自签署的证书来说明一下Secure Registry的部署步骤罢了。
证书
自签名证书
mkdir $REGISTRY_HOME/certs
openssl req -newkey rsa:2048 -nodes -sha256 -keyout $REGISTRY_HOME/certs/domain.key -x509 -days 3650 -out $REGISTRY_HOME/certs/domain.crt
填写相关信息:
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:ShaanXi
Locality Name (eg, city) [Default City]:Xi'an
Organization Name (eg, company) [Default Company Ltd]:swb
Organizational Unit Name (eg, section) []:dev
Common Name (eg, your name or your server's hostname) []:uat.cnswb.com
Email Address []:uat@cnswb.com
修改/etc/hosts
配置自签名证书中CN(Common Name)
所对应域名uat.cnswb.com
的映射
echo "192.168.0.122 uat.cnswb.com" >> /etc/hosts
启动:
docker run -d \--restart=unless-stopped \-v $REGISTRY_HOME:$REGISTRY_HOME \-e "REGISTRY_AUTH=htpasswd" \-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \-e REGISTRY_AUTH_HTPASSWD_PATH=$REGISTRY_HOME/auth/htpasswd \-e REGISTRY_HTTP_TLS_CERTIFICATE=$REGISTRY_HOME/certs/domain.crt \-e REGISTRY_HTTP_TLS_KEY=$REGISTRY_HOME/certs/domain.key \-p 18080:5000 registry:2.7.0
安装证书
本机(服务端)
mkdir -p /etc/docker/certs.d/uat.cnswb.com:18080
cp $REGISTRY_HOME/certs/domain.crt /etc/docker/certs.d/uat.cnswb.com:18080/ca.crt
客户端
# 添加主机映射
echo "192.168.0.122 uat.cnswb.com" >> /etc/hostsmkdir -p /etc/docker/certs.d/uat.cnswb.com:18080
scp root@uat.cnswb.com:$REGISTRY_HOME/certs/domain.crt /etc/docker/certs.d/uat.cnswb.com:18080/ca.crt
登录测试
docker login --username=swb --password=swbyouwant2019 uat.cnswb.com:18080
客户端[local-12]push
API
官方给出了目前所支持的所有Http API
总结,参考Detail
# 无密码,无鉴权
curl http://192.168.0.122:18080/v2/_catalog
curl http://192.168.0.122:18080/v2/swb-svc-house/tags/list# 有密码,有鉴权
curl --cacert /etc/docker/certs.d/uat.cnswb.com\:18080/ca.crt --basic --user swb:swbyouwant2019 https://uat.cnswb.com:18080/v2/_catalogcurl --cacert /etc/docker/certs.d/uat.cnswb.com\:18080/ca.crt --basic --user swb:swbyouwant2019 https://uat.cnswb.com:18080/v2/swb-svc-house/tags/list
## 查看Manifest信息,/v2/<name>/manifests/<reference>,当pull完成会有一个degist返回,就是最后一个参数<reference>
curl --cacert /etc/docker/certs.d/uat.cnswb.com\:18080/ca.crt --basic --user swb:swbyouwant2019 -XGET https://uat.cnswb.com:18080/v2/swb-svc-house/manifests/sha256:12ec47e9755c821ec68b06c0772c4cd6c8258a3d9ac901a482c222cb97636cb8
最佳实践
关键点
- 指定端口
- 指定映射目录
- 重启策略
- 有密码
- 有证书
命令瀑布
服务端
mkdir $REGISTRY_HOMEmkdir $REGISTRY_HOME/auth
docker run --entrypoint htpasswd registry:2.7.0 -Bbn swb swbyouwant2019 > $REGISTRY_HOME/auth/htpasswdmkdir $REGISTRY_HOME/certs
openssl req -newkey rsa:2048 -nodes -sha256 -keyout $REGISTRY_HOME/certs/domain.key -x509 -days 3650 -out $REGISTRY_HOME/certs/domain.crtecho "192.168.0.122 uat.cnswb.com" >> /etc/hostsdocker run -d \--restart=unless-stopped \-v $REGISTRY_HOME:$REGISTRY_HOME \-e "REGISTRY_AUTH=htpasswd" \-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \-e REGISTRY_AUTH_HTPASSWD_PATH=$REGISTRY_HOME/auth/htpasswd \-e REGISTRY_HTTP_TLS_CERTIFICATE=$REGISTRY_HOME/certs/domain.crt \-e REGISTRY_HTTP_TLS_KEY=$REGISTRY_HOME/certs/domain.key \-p 18080:5000 registry:2.7.0
客户端
echo "192.168.0.122 uat.cnswb.com" >> /etc/hosts## 颁发证书
scp root@uat.cnswb.com:$REGISTRY_HOME/certs/domain.crt /etc/docker/certs.d/uat.cnswb.com:18080/ca.crt## 其他docker操作
docker login uat.cnswb.com:18080
docker push ...
docker pull ...
清理
清空所有
进入本机映射目录rm -rf /var/lib/registry/*
。
精准
通过HTTP API
,但是删除功能特别难用,博主总是出现UNSUPPORTED
错误,具体参考https://docs.docker.com/registry/spec/api/
这里记录操作如下
push获取digest,这里以
tomcat
为例docker push uat.cnswb.com:18080/tomcat:latest
此时得到
digest
:sha256:0e5dd4e1cf10a3f4684b797547aa4b376b2eeb6ac983c7a7046be5eba636ddb1
查看
manifests
信息curl --cacert /etc/docker/certs.d/uat.cnswb.com\:18080/ca.crt --basic --user swb:swbyouwant2019 -XGET https://uat.cnswb.com:18080/v2/tomcat/manifests/sha256:0e5dd4e1cf10a3f4684b797547aa4b376b2eeb6ac983c7a7046be5eba636ddb1
此时得到
blobs
摘要信息sha256:6e30b06a90d3206519a5ea730057001a1b830b9169e1baf76a97e1767efc0db7
查看
blobs
信息curl --cacert /etc/docker/certs.d/uat.cnswb.com\:18080/ca.crt --basic --user swb:swbyouwant2019 -XGET https://uat.cnswb.com:18080/v2/tomcat/blobs/sha256:6e30b06a90d3206519a5ea730057001a1b830b9169e1baf76a97e1767efc0db7
截图如下
删除
blobs
curl --cacert /etc/docker/certs.d/uat.cnswb.com\:18080/ca.crt --basic --user swb:swbyouwant2019 -XDELETE https://uat.cnswb.com:18080/v2/tomcat/blobs/sha256:6e30b06a90d3206519a5ea730057001a1b830b9169e1baf76a97e1767efc0db7
此时获得
UNSUPPORTED
错误{"errors":[{"code":"UNSUPPORTED","message":"The operation is unsupported."}]}
参考
- 官方文档
- 部署私有Docker Registry
CentOS7安装Docker-Registry相关推荐
- CentOs7下安装 Docker Registry 私服
Docker Registry 服务器端安装配制 你不希望将自己的镜像放到公网当中,那么你就需要 Docker Registry,它可以用来存储和管理自己的镜像 安装 Docker Registry ...
- CentOS7安装Docker详细教程
CentOS7安装Docker 文章目录 CentOS7安装Docker Docker简介 Docker架构 Docker安装流程 查看Docker 参考文章 Docker简介 Docker 是一个开 ...
- linux设置docker自动启动,CentOS7安装Docker配置服务端和容器自启动
接上一篇,在VirtualBox上安装配置好了CentOS7,继续在这个虚拟机上装好docker并总结一下使用到的常用功能. 安装Docker 安装直接参考官网来安装就OK,没有遇到什么问题,值得注意 ...
- Centos7 安装Docker(v2021 version 20.10.5) 并通过docker-compose运行TiDB集群
Centos7 安装Docker(v2021 version 20.10.5) 卸载docker旧版 注意:新系统不用卸载 yum remove docker \docker-client \dock ...
- centos7安装docker并配置镜像加速
Centos7安装docker 并配置镜像加速 1.如果系统上之前有安装过docker 那么就需要先执行下面的命令 删除旧版本docker sudo yum remove docker \docker ...
- 【Linux】安装 Docker Registry
安装 Docker Registry 一.下载Registry 二.运行私有库Registry 三.验证私服库有什么镜像 四.将新镜像修改符合私服规范的Tag 五.修改配置文件使之支持http 六.p ...
- 安装 Docker Registry 私服
安装 Docker Registry 私服(存放项目及其他自己的镜像) 在docker-compose环境下:在/usr/local/docker/registry目录下(没有的目录自己创建)创建do ...
- CentOS7安装Docker与使用篇
一.在CentOS7上安装Docker篇 1. 查看系统版本: $ cat /etc/redhat-release CentOS Linux release 7.0.1406 (Core) 2. ...
- CentOs7 安装Docker 并配置代理访问外网
提要 环境: Linux version 3.10.0-693.el7.x86_64 安装docker的一部分步骤 步骤 1.配置yum代理 vim /etc/yum.conf proxy=http: ...
- CentOS7安装Docker及配置国内镜像源
环境CentOS7 一.Docker docker安装 https://docs.docker.com/get-docker/ https://docs.docker.com/engine/insta ...
最新文章
- 人脸相关2020eccv
- 第二冲刺阶段个人博客7
- IOS和Android音频开发总结
- 浏览器兼容CSS渐进增强 VS 优雅降级如何选择
- 数学家与诗人,都是这个世界上先知先觉的预言家
- OpenShift 4 之AMQ Streams(2) - 用Kafka Connect访问数据源
- C++ 返回类型协变
- YOLO目标检测,训练自己的数据集(识别海参)
- 数据结构:线性表理论题目集
- 电脑关机程序(源码)
- android如何加载一张大图片,Android 实现加载大图片的方法
- virtualbox安装.img文件
- Cents7 查看当前版本
- 幻数java题_关于数组中的幻数?:数组中的幻数? -C ++
- python爬取网易云音乐排行榜歌单热评(完整版)
- CSS一篇文章搞懂系列6:超全的字体篇与背景设置内容,花里胡哨起来
- AStar2006百度之星程序设计大赛试题
- 用JavaScript写一个类似于windows的气泡屏保效果
- 百度网盘下载慢怎么解决
- git时认证失败(Authentication failed )的解决