docker harbor搭建和使用

我们通常使用Harbor来管理docker镜像,公司内部自己构建的镜像都会上传到harbor,帮客户搭建服务时可以直接从公司的harbor上拉取镜像

注意:安装harbor之前需要安装好docker和docker-compose

下载、解压和配置

由于网络原因,我们采用offline安装方式,从https://github.com/goharbor/harbor/releases/tag/v2.2.2下载offline的安装文件,就是近500M的那个文件

下载后上传到服务器上,如放到/usr/local/harbor目录下,tar -xzvf解析tgz文件,对于tar命令的参数,主要记住-x是解压(可以这么记忆:用剪刀剪开),-c是压缩(可以这么记忆:用一个袋子把文件装进去)

解压后,vi命令编辑harbor.yml.tmpl文件,这是一个yaml文件,内容的格式大家应该都会,主要修改以下内容:

  1. hostname 这个是域名,需要修改成大家公司自己的域名,如果是自己测试,可以随便填个域名,然后在/etc/hosts中解析域名到127.0.0.1就好,在这里我们输入hub.demo.com
  2. http.port 这个是端口,默认是80,一般不改,除非80端口被占用了
  3. https 这个是https配置,需要提供SSL证书,如果是自己生成的证书,需要在docker配置文件中设置insecure-registries,否则docker会认为这是不安全的域名,下文会说,等会自己生成一个证书再回来修改
  4. harbor_admin_password 这是harbor提供的管理后台的管理员密码
  5. database 这个节点下面的配置是harbor自己依赖的数据库密码以及连接参数
  6. data_volume 这是harbor数据存储的目录,不用修改,之后可以在docker-compose.yml中挂载宿主机目录,只要记住这个目录就好

其他的配置参数就不用动了,接下来我们来生成SSL证书

生成SSL证书

注意:这里介绍的生成SSL证书只是用作测试的,真正的SSL证书要从第三方(如阿里云)上生成,自己随便生成的证书,浏览器是不认的

下面开始生成

openssl genrsa -des3 -out server.key 2048
复制代码

执行上面这行命令后,会要求填写密码,密码长度不能小于4位,我们测试就搞简单一点的密码,输入1234即可,输入密码后按回车会在当前目录下生成一个server.key文件

openssl req -new -key server.key -out server.csr
复制代码

上面这行命令执行时要输入上一步生成server.key时输入的密码,然后会要求依次输入国家、省份、城市、组织名称和自己的姓名,测试时随便填就好,全填完之后会生成一个server.csr文件

接下来我们去掉server.key的密码

// 先复制server.key
cp server.key server.key.old

openssl rsa -in server.key.old -out server.key
复制代码

执行命令时要输入原server.key的密码

现在可以来生成crt证书文件了

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
复制代码

经过上面的步骤得到两个需要用到的文件,分别是:server.crtserver.key,修改harbor.yml.tmpl文件,将https节点下的certificate修改为server.crt的路径,将private_key修改为server.key的路径

安装harbor

执行以下命令

mv harbor.yml.tmpl harbor.yml
./install.sh
复制代码

由于我们下载的harbor是offline版本,所有需要用到的docker镜像都已经下载好了,所以安装过程很快,如果你下载的不是offline版本,可能在这一步会等很久甚至会提示网络错误(下载不了镜像文件)

安装完成后会在当前目录生成一些文件,其中有一个眼熟的文件docker-compose.yml,说明安装之后停止harbor可以用docker-compose down,再次启动harbor可以用docker-compose up -d命令,修改容器配置可以编辑docker-compose.yml文件

安装完成后默认就已经启动了harbor的docker容器

现在需要修改本机的/etc/hosts文件,添加192.168.3.3 hub.demo.com,其中IP是运行harbor的服务器IP

我们访问上面配置的域名https://hub.demo.com/,如果浏览器上打不开,就修改harbor.yml文件,注释掉https的配置,再重新./install.sh,最后访问http://hub.demo.com,注意不是https而是http

打开harbor管理如下:

用户名admin,密码是在harbor.yml中配置的,登录后界面如下:

在左边点击Users创建一个用户,假设用户名为test

在左边点击Projects创建一个项目,假设项目名为test,项目创建成功后会自动进入该项目详情页,点击Members再点击+ USER,输入上面创建的test用户,使test用户对test项目有权限

docker推送镜像到harbor

先要通过docker命令登录harbor

docker login http://hub.demo.com
复制代码

输入上面创建的test用户名和密码,如果提示Error response from daemon: Get https://hub.demo.com/v2/: dial tcp: lookup hub.demo.com: no such host,说明本机无法解析hub.demo.com这个域名,需要修改/etc/hosts

提示Login Succeeded表示登录成功了,接下来就可以推送镜像了

// 先在本地docker images找一个镜像,也可以自己提前构建一个镜像
// 对镜像打一个带上harbor域名的tag,我这里以busybox镜像为例
docker tag busybox:latest hub.demo.com/test/busybox:v1

// 开始推送
docker push hub.demo.com/test/busybox:v1
复制代码

解释一下上面的tag hub.demo.com/test/busybox:v1,hub.demo.com是harbor的域名,test是harbor中项目名,busybox:v1是镜像的名称和版本号

推送后,刷新harbor管理后台就可以看到test这个项目下已经有了一个busybox:v1镜像

docker从harbor拉取镜像

也先要通过docker命令登录harbor,为什么其他镜像仓库不用登录呢?因为人家设置了所有人都可以拉取镜像

docker login http://hub.demo.com
复制代码

为了验证拉取是否成功,我们先删除掉本地刚才打好tag的busybox:v1这个镜像

docker rmi hub.demo.com/test/busybox:v1
复制代码

开始拉取镜像

docker pull hub.demo.com/test/busybox:v1
复制代码

查看镜像是否拉取成功

docker images | grep busybox
复制代码

拉取成功后,可以再次对本地镜像重新打上需要的tag

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享