docker 仓库
registry仓库
一、下载镜像
docker pull registry:2.7.0
二、创建两个文件保存数据
mkdir -p /home/docker/registry/
mkdir -p /home/auth/
三、创建用户的认证
命令中:username password 替换为自己的用户名与密码
docker run --entrypoint htpasswd registry:2.7.0 -Bbn username password > /home/auth/htpasswd
四、启动registry镜像
docker run -d \
-p 5000:5000 \
--restart=always \
--name registry \
-v /home/docker/registry:/var/lib/registry \
-v /home/auth:/auth \
-v `pwd`/config.yml:/etc/docker/registry/config.yml
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-e REGISTRY_STORAGE_DELETE_ENABLED=true \ --私有仓库,允许删除
registry:2.7.0
五、访问镜像仓库
浏览器直接访问: http://ip:port/v2/
- 查询registry中所有的镜像名称
http://ip:port/v2/_catalog
- 依据镜像名称查询镜像版本(imagename需替换成真实的镜像名字)
http://ip:port/v2/imagename/tags/list
六、使用web界面管理Registry
1)、安装docker-registry-frontend的镜像
$ docker pull konradkleine/docker-registry-frontend:v2
2)、运行docker-registry-frontend镜像
docker run --name registry-ui -d -e ENV_DOCKER_REGISTRY_HOST=192.168.1.121 -e ENV_DOCKER_REGISTRY_PORT=5000 -p 8090:80 konradkleine/docker-registry-frontend:v2
3)、访问管理页面
浏览器直接访问:http://ip:8090
七、安装过程中遇到的问题
- 创建用户认证时,出现以下的错误的信息:
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"htpasswd\": executable file not found in $PATH": unknown.
ERRO[0000] error waiting for container: context canceled
解决的办法: registry镜像的版本号的问题,latest 与 2的版本都会出现这个问题,换成2.7.0则没有这个问题
- 向私仓中推送镜像时,出现以下错误,报非https的客户端
The push refers to repository [imagename]
Get https://xxx.xx.xx.xx:5000/v2/: http: server gave HTTP response to HTTPS client
解决办法:
- 将镜像私仓地址写入到/etc/docker/daemon.json中的insecure-registries的value中,重启docker即可
八丶使用过程中可能会遇到的问题
忘记repository密码
- 登录过私有仓库的docker服务器获取auth的值
- 通过base64解析密码获得用户名与密码
sh cat /root/.docker/config.json
{
"auths": {
"localhost:5000": {
"auth": "YWRtaW46YWRtaW4xMjM="
}
}
}
sh echo YWRtaW46YWRtaW4xMjM= | base64 -d
常用的镜像访问的api
获取指定镜像的tag列表
GET http://repository_ip:5000/v2/image_name/tags/list
获取镜像的Digest, GET /v2/registry/manifests/2.3.0
GET http://repository_ip:5000/v2/image_name/manifests/tag
删除指定镜像的版本
DELETE http://repository_ip:5000/v2/image_name/manifests/Digest的值sha256:48
- 清除镜像后并没有释放镜像占用的空间,需要清理占用的空间
registry garbage-collect /etc/docker/registry/config.yml
harbor仓库
必须先安装Docker并启动Docker才能选择安装harbor
Harbor(港口,港湾)是一个用于存储和分发Docker镜像的企业级Registry服务器。
除了Harbor这个私有镜像仓库之外,还有Docker官方提供的Registry。相对Registry,Harbor具有很多优势:
- 提供分层传输机制,优化网络传输 Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。
- 提供WEB界面,优化用户体验 只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。
- 支持水平扩展集群 当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。
- 良好的安全机制 企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。
Harbor安装
准备工作
mkdir -p /home/harbor/repository /home/harbor/logs #创建镜像的保存地址+harbor的日志文件
安装docker-compose
下载Harbor的压缩包(使用版本为:v1.9.2)
https://github.com/goharbor/harbor/releases
百度网盘地址v1.9.2 提取码:fan3
直接下载到服务器
wget /https://github.com/goharbor/harbor/releases/download/v2.11.0/harbor-offline-installer-v2.11.0.tgz
上传压缩包到linux,并解压
tar -xzf harbor-offline-installer-v1.9.2.tgz;
mkdir /opt/harbor;
mv harbor/* /opt/harbor;
cd /opt/harbor;
修改Harbor的配置
配置的修改需要在install.sh的步骤之前,不然部分的配置不会生效ls
修改harbor.yml配置文件
2.0后的版本与之前版本区别较大,如果不需要https,在installs.sh步骤前请注释掉
修改harbor.yml文件的配置需要重新安装才会生效
#修改hostname和port
hostname: 192.168.66.102 #自己机器的ip(最好配置外网的IP)
port: 5000 # 端口
#配置admin的初始密码(随便定义,能通过web页面定义)
harbor_admin_password: Harbor12345
#配置镜像的存放地址
data_volume: /home/harbor/repository
#配置日志文件的规则
log:
level: info
local:
rotate_count: 50
rotate_size: 200M
location: /home/harbor/logs
安装Harbor
./prepare;
./install.sh;
启动Harbor
# 启动
docker-compose up -d
# 停止
docker-compose stop
# 重新启动
docker-compose restart
访问Harbor
http://192.168.66.102:5000
默认账户密码:admin/Harbor12345
附registry仓库启动镜像时的配置文件:
cat config.yml
version: 0.1
log:
fields:
service: registry
storage:
delete:
enabled: true
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
注意:本文归作者所有,未经作者允许,不得转载