一 Docker仓库简介
-
Docker 仓库是用来包含镜像的位置,Docker提供一个注册服
务器(Register)来保存多个仓库,每个仓库又可以包含多个
具备不同tag的镜像。 -
Docker运行中使用的默认仓库是 Docker Hub 公共仓库。
私有仓库
docker hub虽然方便,但是还是有限制
- 需要internet连接,速度慢
- 所有人都可以访问
- 由于安全原因企业不允许将镜像放到外网
如何搭建私有仓库?
- 第一种用docker命令拉取docker registry,将docker的仓库镜像拉取到本地,在本地构建一个docker仓库,这种方法要自己对仓库进行权限管理,没有图形化页面操作,命令操作比较繁琐,另外在dockertoolbox下搭建私有镜像库出现的问题比较多,建议还是安装linux系统进行搭建。
- 第二种集成harbor,docker-compose可以进行图形化页面仓库以及图形化权限管理,harbor也集成了mysql和log。
Registry工作原理
index服务主要提供镜像索引以及用户认证的功能。当下载一个镜像的时候,首先会去index服务上做认证,然后查找镜像所在的registry的地址并放回给docker客户端,docker客户端再从registry下载镜像,在下载过程中 registry会去index校验客户端token的合法性,不同镜像可以保存在不同的registry服务上,其索引信息都放在index服务上。
Docker Registry有三个角色,分别是index、registry和registryclient。
index:
负责并维护有关用户帐户、镜像的校验以及公共命名空间的信息。
Web UI 元数据存储 认证服务 符号化
registry:
是镜像和图表的仓库,它不具有本地数据库以及不提供用户认证,
通过Index Auth service的Token的方式进行认证。
Registry Client
Docker充当registry客户端来维护推送和拉取,以及客户端的授权。
二 创建本地免密仓库
(1)获取私有仓库的镜像
(2)导入镜像
(3)运行容器
[root@server1 ~]# docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry:2.3.1
0cecf56685766c15a0bca6783fd651bec02fcbf3190712205e6045260e900a70
[root@server1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0cecf5668576 registry:2.3.1 "/bin/registry /etc/…" 13 seconds ago Up 12 seconds 0.0.0.0:5000->5000/tcp registry
##查看5000端口是否开启
[root@server1 ~]# netstat -antlp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 727/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 902/master
tcp 0 0 172.25.60.1:22 172.25.60.250:56718 ESTABLISHED 2243/sshd: root@pts
tcp 0 0 172.25.60.1:22 172.25.60.250:56716 ESTABLISHED 2223/sshd: root@pts
tcp6 0 0 :::22 :::* LISTEN 727/sshd
tcp6 0 0 ::1:25 :::* LISTEN 902/master
tcp6 0 0 :::5000 :::* LISTEN 3785/docker-proxy
运行镜像后,5000端口成功开启
(4)上传本地镜像到私有仓库
先设定nginx镜像的标签为localhost:5000/nginx
docker tag nginx:latest localhost:5000/nginx
本地镜像在命名时需要加上仓库的ip和端口
docker images localhost:5000/nginx
##上传镜像到私有仓库
docker push localhost:5000/nginx
(5)删除本地镜像,拉取私有仓库中的镜像
重新拉取,获得镜像说明仓库搭建成功
(6)查看/opt/registry/目录下的镜像的分层结构
关闭真机的防火墙
[root@foundation60 docker_item8]# systemctl stop firewalld.service
server1安装tree
[root@server1 registry]# yum install -y tree
##查看/opt/registry/目录下的镜像分层
[root@server1 registry]# pwd
/opt/registry
[root@server1 registry]# tree docker/
docker/
└── registry
└── v2
├── blobs
│ └── sha256
│ ├── 8c
│ │ └── 8c0120a6f561fe6d8b23be7c15313bc9fe3daa83117640bd6eea33e18d545b5b
│ │ └── data
│ ├── 91
│ │ └── 918b255d86e5ae0936a2f8b4ae276cded2b34b29f29ae93e59b1e2f482b2ddda
│ │ └── data
│ ├── dc
│ │ └── dc85890ba9763fe38b178b337d4ccc802874afe3c02e6c98c304f65b08af958f
│ │ └── data
│ ├── e4
│ │ └── e445ab08b2be8b178655b714f89e5db9504f67defd5c7408a00bade679a50d44
│ │ └── data
│ └── f5
│ └── f5d23c7fed465a9eb762fc4c3cccd551a05914aba42492ceb972497db4df38bf
│ └── data
└── repositories
└── nginx
├── _layers
│ └── sha256
│ ├── 8c0120a6f561fe6d8b23be7c15313bc9fe3daa83117640bd6eea33e18d545b5b
│ │ └── link
│