目录
docker仓库
一、docker私有仓库
Ⅰ、安装运行
Ⅱ、上传镜像
Ⅲ、拉取私有库镜像
二、harbor仓库
Ⅰ、前提需要
Ⅱ、创建证书文件
Ⅲ、下载安装harbor
Ⅳ、harbor的管理
Ⅴ、浏览器访问管理
①登录
报错
②上传镜像
③拉取镜像
仓库(Repository)是集中存放镜像的地方。一个容易混淆的概念是注册服务器(Registry)。实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。从这方面来说,仓库可以被认为是一个具体的项目或目录。
有时候使用 Docker Hub 这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用。
本节介绍如何使用本地仓库。docker-registry 是官方提供的工具,可以用于构建私有的镜像仓库。
mkdir -p /opt/registry 创立挂载点
docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 registry:2
#直接运行run,让docker拉取镜像
docker images
确保容器处于运行状态,我们在浏览器上对本地5000端口进行访问
要将镜像上传到私有仓库,需要给镜像打上特定的tag,否则就是上传至公共仓库
docker tag centos:7 lcalhost:5000/centos:7
进行上传
docker push localhost:5000/centos:7
在命令行或浏览器上进行查看
curl -XGET http://192.168.116.22:5000/v2/_catalog
{"repositories":["centos"]}
表示上传成功
先删掉本地源镜像,再进行镜像拉取
docker pull localhost:5000/centos:7
私人库镜像拉取成功
docker 官方提供的私有仓库 registry,用起来虽然简单 ,但在管理的功能上存在不足。 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。harbor在docker distribution的基础上增加了一些安全、访问控制、管理的功能以满足企业对于镜像仓库的需求
先进行docker-compose的下载安装
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
openssl genrsa -des3 -out server.key 2048
#生成密钥文件
openssl req -new -key server.key -out server.csr
#生成证书请求文件
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
#生成根证书
将证书文件存放到/data/cert(配置文件中指定)
mv server.* ./data/cert/
wget https://github.com/vmware/harbor/releases/download/v2.0.1/harbor-offline-installer-v2.0.1.tgz
Release v2.3.5 · goharbor/harbor · GitHub
解压、修改配置文件;运行 install.sh 构建镜像,并把服务启动起来
tar -zxvf harbor-offline-installer-v1.2.2.tgz -C /opt
vim /opt/harbor-offline-installer-v1.2.2.tgz/harbor.cfg
#==================省略部分内容=========================
hostname = 192.168.116.22
#用于访问用户界面和register服务,不能是localhost/0.0.0.0
#==================省略部分内容=========================
db_password = root123
#数据库密码
#==================省略部分内容=========================
harbor_admin_password = Harbor12345
#admin用户的密码
#==================省略部分内容=========================
ssl_cert = ./data/cert/server.crt
ssl_cert_key = ./data/cert/server.key
#上文证书的存放目录
#==================省略部分内容=========================
secretkey_path = ./data
#==================省略部分内容=========================
----wq
./install.sh
#进行安装
docker-compose ps
使用 docker-compose 来管理 Harbor。一些有用的命令如下所示,必须在与docker-compose.yml 相同的目录中运行。
修改harbor配置文件流程:
1.停止现有的 harbour 实例并更新 harbor.cfg
2.运行 prepare 脚本来填充配置
3.重新创建并启动 harbour 的实例
docker-compose ps -a
#查看docker-compose容器情况
docker-compose down -v
#卸载Harbor
docker-compose up -d
#启动Harbor
docker-compose start
#启动相关容器
docker-compose stop
#关闭相关容器
在浏览器上访问http://192.168.116.22
http页面错误码:502
经过排查,发现harbor启动的容器之一adminserver一直处于restarting状态
通过查看日志信息
cat /var/log/2022-10-20/adminserver.log
可以发现,问题出在docker-compose.yml文件里的这个位置
进行登录操作,用户admin,密码在前面编辑的harbor.cfg文件中
此时可使用docker命令在本地通过 127.0.0.1 来登录和推送镜像。默认情况下,Register 服务器在端口 80 上侦听
docker tag tomcat:test 192.168.116.22/myproject-free/tomcat:test
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.116.22/myproject-free/tomcat test 7537d2b4b9e1 45 hours ago 807MB
docker login -u admin -p Harbor12345 http://127.0.0.1
#登录harbor库
docker push 192.168.116.22/myproject-free/tomcat:test
此时,发生报错
当我们使用127.0.0.1代替我们的本地IP时,又可以正常执行了, 但如果其他客户端上传或拉取镜像到 Harbor,就又会报如下错误。出现这问题的原因 Docker Registry 交互默认使用的是HTTPS,但是搭建私有镜像默认使用的是 HTTP 服务,所以与私有镜像交互时这样的错误
解决
vim /usr/lib/systemd/system/docker.service
ExecStart= ** //--insecure-registry 192.168.116.22 **
systemctl daemon-reload
systemctl restart docker
重启后如果docker-compose up -d,仍有容器一直处于重启(restarting),可以尝试去到harbor目录下重新./install.sh
再次尝试上传镜像;登录成功
将192.168.116.22/free/centos:7镜像删除
从我们的harbor库中重新拉取这个镜像
docker pull 192.168.116.22/free/centos:7
拉取成功