依赖环境:
Python 2.7或以上
Docker 1.10或以上
Docker Compose 1.6.0或以上
1. 安装pip
wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz
tar -vxf setuptools-1.4.2.tar.gz
cd setuptools-1.4.2
python2.7 setup.py install
easy_install-2.7 pip
2. 安装docker-compose
pip install docker-compose
docker-compose --version
3. 安装harbor
3.1下载harbor安装包
链接地址: https://github.com/vmware/harbor/releases
网速快的话可以下载在线或者离线包来安装
我下载太慢,上传到网盘上一个harbor的离线安装包:https://pan.baidu.com/s/1bpUaGbl
3.2解压
tar xvf harbor-offline-installer-v1.1.1.tgz
3.3修改配置文件harbor.cfg
cd harbor
vi harbor.cfg
如果只想能够运行起来的话,只需要修改hostname即可,改成你机器的ip;
看一下harbour_admin_password的默认值是多少,这个是你一会儿登录网页时的用户名admin对应的密码;
至于ldap和email可以不用配置,若是报错,直接把相关参数注释掉即可;
3.4修改docker-compose.yml文件【配置HTTP,若需要配置HTTPS,则不需要配置这步】
添加ports端口,为了使用http快速访问
vi docker-compose.yml(注意空格)
registry:
networks:
- harbor
ports:
- 5000:5000
4. 执行./prepare
初始化common文件夹中的配置文件,若是修改了common中的配置文件,直接重启即可,不能执行该命令
5. 执行./install.sh
6. 查看容器
docke-compose ps
其它命令(修改配置文件后最好把容器删除再创建):
docker-compose up -d ###后台启动,如果容器不存在根据镜像自动创建
docker-compose down -v ###停止容器并删除容器
docker-compose start ###启动容器,容器不存在就无法启动,不会自动创建镜像
docker-compose stop ###停止容器
docker-compose logs ###查看日志(harbor日志存放地址 /var/logs/harbor)
7. 访问页面
http://ip
用户名密码就是harbor.cfg文件中用户admin和其对应的密码
页面操作挺简单,就不详细介绍了,有个迁移的功能挺不错的
8. 配置docker启动文件来使用harbor
因为我前面取巧使用的映射端口5000来使用http,所以我们需要在docker的启动文件上添加非安全模式来连接仓库;
Centos7系统:vi /etc/sysconfig/docker
在OPTIONS的参数中添加–insecure-registry ip:5000
如:OPTIONS=’–selinux-enabled–insecure-registry 192.168.x.x:5000’
或者vi /etc/docker/daemon.json
以json串的形式添加该键值对
重启docker
systemctl daemon-reload
Systemctl restart docker
9. 使用harbor仓库;
说明:push时需要先登录,pull就不需要了
docker login -u admin -p admin 192.168.101.92:5000
给镜像打标签:
docker tag centos:latest 192.168.x.x:5000/library/centos:latest
上传镜像:
docker push192.168.x.x:5000/library/centos:latest
下载镜像:
docker pull192.168.x.x:5000/library/centos:latest
11.配置mirror
网上提这个的挺少,看到一篇博客http://blog.csdn.net/project_harbor/article/details/51261934,但我并没有配出来,想使用的可以试试
参考:https://www.jianshu.com/p/2ebadd9a323d
http://blog.csdn.net/Tech_Salon/article/details/70214267
后补充:
最近因为项目上线的问题,不可能把所有机器的docker访问都改为非安全性的,所以只好配置了一下HTTPS,记录一下;
配置HTTPS访问
声明:我机器ip为192.168.101.85
1.1.建立CA证书发行站点(注意commonName为192.168.101.85)
openssl req -newkey rsa:4096 -nodes -sha256 -keyoutca.key -x509 -days 365 -out ca.crt
一直回车,直至出来commonName,输入你的主机ip
1.2.创建CA证书生成请求(注意commonName为192.168.101.85)
openssl req -newkey rsa:4096 -nodes -sha256 -keyout192.168.101.85.key -out 192.168.101.85.csr
一直回车,直至出来commonName,输入你的主机ip
1.3.创建CA站点文件目录
demoCA是OpenSSL的证书存储依赖目录,建立在与上面的ca.crt的同级目录下。
mkdir demoCA
cd demoCA
touch index.txt
echo ‘01’ > serial
cd …
1.4.生成CA客户端证书
echosubjectAltName = IP:192.168.101.85 > extfile.cnf
opensslca -in 192.168.101.85.csr -out 192.168.101.85.crt -cert ca.crt -keyfile ca.key\
-extfileextfile.cnf -outdir .
若报错:
Check that the request matches thesignature
Signature ok
The mandatory stateOrProvinceName fieldwas missing
该错误的解决办法:
把/etc/pki/tls/openssl.cnf中大约86 87的行
请使用vi把如下内容
stateOrProvinceName= match
organizationName= match
改为:
stateOrProvinceName= optional
organizationName= optional
3.2.在客户端部署证书
将ca.crt 复制到 docker 客户端的 /etc/docker/certs.d/yourdomain.com(registry服务器的IP)。
#获取ca.crt文件,如果目录不存在,则需要预先手动创建之。
sudo scp [email protected]:~/docker/ca.crt/etc/docker/certs.d/192.168.101.85/
注意:
每一个客户端都需要复制上面的ca.crt到Docker相应目录,然后重启Docker。
浏览器需要添加“访问例外”,根据提示进行操作。
2.3.harbor.cfg修改
主要修改以下几个地方:
#配置Harbor服务的主机IP地址或主机名,注意要与CA证书的完全一致。
#hostname = reg.mydomain.com
hostname = 192.168.101.85
配置Harbor使用https
#ui_url_protocol = http
ui_url_protocol = https
#改为上面生成的CA客户端证书,注意路径一致,可使用命令pwd
获得。
#ssl_cert = /path/to/server.crt
ssl_cert = /home/supermap/docker/192.168.101.85.crt
#ssl_cert_key = /path/to/server.key
ssl_cert_key =/home/supermap/docker/192.168.101.85.key
然后按照上面的方法启动运行就OK了;
java使用http或其他方式连接时:
参数介绍:
镜像仓库地址:
证书信息:/etc/docker/certs.d/192.168.101.85(具体查看上面的生成客户端证书)
token:(harbor/common/config/registry/config.yml中的ui模块中有对应信息ISSUER与Service)
ISSUER:harbor-token-issuer
Service:harbor-registry
Private Key(harbor/common/config/ui/private_key.pem[我使用的时候这个不生效,重启之后就可以了]):