搭建 harbor 仓库
docker 官方提供的私有仓库 registry,用起来虽然简单 ,但在管理的功能上存在不足。Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。harbor在docker distribution的基础上增加了一些安全、访问控制、管理的功能以满足企业对于镜像仓库的需求。接下来,咱们安装harbor。
安装docker-compose
若不事先安装 docker-compose ,后续使用会提示,要自行安装。步骤如下,请逐步执行。
1、 配置阿里的epel源
# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
2、 安装Python-pip
# yum install python-pip -y
3、 升级Python-ppip
# pip install --upgrade pip
4、 安装docker-compose
# pip install docker-compose
5、查看docker-compose版本
# docker-compose -v
下载安装Harbor
下载
github地址:https://github.com/goharbor/harbor/release
当前下载 harbor-offline-installer-v2.1.2.tgz 版本
解压
tar -xvf harbor-offline-installer-v2.1.2.tgz
配置
Harbor安装目录下操作
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
修改hostname、http端口,https的部分可以暂时屏蔽。
修改默认密码、harbor数据存储地址。
安装
./prepare
./install.sh
执行“prepare”脚本的情况如下
见上图,其实是在下载多个镜像。紧接着,执行install.sh
若没有安装“docker-compose”,执行“install.sh”脚本时,会提示报错。
提示信息:need to install docker-compose by yourself first...
执行“install.sh”,经历过多个steps之后,在 [Step 5] 开始启动harbor服务。
在[Step 5],提示报错。
提示:已经有了名为“registry”的容器。“registry”的容器在“搭建私有仓库”时创建的。
要在当前机器上,删除名为“registry”的容器。操作如下:
docker stop 容器ID
docker rm -f 容器ID
删除名为“registry”的容器之后,再执行./install.sh
启动成功。
访问Harbor
访问地址:http://xxx.xxx.xx.237:5001
账号密码:admin/your_password
登录成功
在服务器上,查看到多个容器,Harbor的web服务是一个Nginx服务。
Harbor服务管理
## Harbor 安装目录下执行
docker-compose up -d ##启动
docker-compose stop ##停止
docker-compose restart ##重新启动
用端口监听可以查看服务是否启动
登录docker私仓
在客户机上操作,先登录,再推送镜像。
登录命令
docker login xxx.xxx.xxx.xxx:port
输入 用户、密码
见上图,提示报错,http协议的问题。
解决方案:
vim /etc/docker/daemon.json
#以下配置以供格式的参考#
{
"max-concurrent-downloads": 3,
"max-concurrent-uploads": 5,
"registry-mirrors": ["https://999zldxe.mirror.aliyuncs.com/"],
"insecure-registries": ["xxx.xxx.xxx.237:5001"]
}
注意:当前机器是客户机,修改daemon.json文件,是在客户机上进行。
重启docker
systemctl daemon-reload
systemctl restart docker
查看docker状态
systemctl status docker
再次登录,成功。
退出 docker logout
Push到私仓
在客户机上,将制作好的镜像,推送到团队私有仓库。
打标签
针对打算推送的镜像,打标签,加上服务端IP和端口信息。
命令
docker tag yan_springboot xxx.xxx.xxx.237:5001/yan_springboot
yan_springboot 是打算推送的镜像,如上命令,将镜像名称
从
yan_springboot
变成
xxx.xxx.xxx.237:5001/yan_springboot
推送操作
Docker push 镜像名称
docker push xxx.xxx.xxx.237:5001/yan_springboot
提示报错:非法的仓库名称。直接把镜像名称当成了仓库名,说明应该先添加仓库名。
再针对yan_springboot 镜像打标签。
docker tag yan_springboot xxx.xxx.xxx.237:5001/yan/yan_springboot
从
yan_springboot
变成
xxx.xxx.xxx.237:5001/yan/yan_springboot
比第一次的标签多了一个“/yan”,再推送。
docker push xxx.xxx.xxx.237:5001/yan/yan_springboot
提示报错:project not found
说明要预先建立自己的project,在Harbor服务器上,建立自己的“PROJECT”。
新建Project
登录Harbor web服务,点击“新建项目”按钮。
默认有个“library”项目。上图中“yan”就是自己新建的project。
新建项目界面
新建好project之后,再次推送,成功。
推送命令
docker push xxx.xxx.xxx.237:5001/yan/yan_springboot
在harhor web界面上查看推送上来的镜像。
可以看到 yan-tomcat、yan-springboot 这两个由我本人自定义的镜像。
如上,自定义的镜像成功被推送团队私有仓库。
镜像下载与测试
镜像列表
点击镜像名称,查看镜像信息。
基本信息
yan-tomcat的基本信息。
可以看到标签、大小等信息。
拉取操作
获取pull命令
Pull内容如下
docker pull xxx.xxx.xxx.xxx:5001/yan/yan-tomcat@sha256:56ac06269a338084bab2fb1b83afdab10daf8280492adfd689910369a4e6ca79
再找一个docker 客户机,docker login之后执行如上命令,拉取镜像。
启动容器服务
对应端口
容器启动后,访问服务
yan-tomcat服务如下
yan-springboot服务如下
见上图,从团队私有仓库拉取镜像,再启动容器,成功!
如上,创建Harbor 私有仓库,推送镜像、拉取镜像、启动服务,全部成功!
Docker-Compose
先看下官网,docker-compose部分。
根据官网提示,最新加载1.28版本。
下载之后,按官网提示进行安装,运行docker-compose --version报错
GLIBC_2.28 NOT FOUND
经排查,说不要安装最新版。
下载
官网用github下载太慢了,改成daocloud
curl -L "https://github.com/docker/compose/releases/download/1.26.1/docker-compose-Linux-x86_64" -o /usr/local/bin/docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/1.26.1/docker-compose-Linux-x86_64 > /usr/local/bin/docker-compose
若如上命令报错
肯定是机器的网络问题。
如下是在另外一台机器上下载的,一瞬间就下载完成了。
下载完成后,查看
docker-compose --version
果然版本不要太新。安装完成。