Docker容器在本质上是宿主机上的一个进程。也就是常说的容器是操作系统级的虚拟化。容器与容器之间做了资源的隔离
安装docker
yum install docker-ce -y
启动docker-ce和开机自启动
systemctl start docker 启动docker
(systemctl stop docker) 停止docker
(systemctl status docker) 查看docker状态
sudo systemctl enable docker
测试docker
sudo docker run hello-world
Harbor的配置要求
内存至少4G,CPU至少2个。
查看内存
free
查看cpu个数
cat /proc/cpuinfo | grep "physical id"
安装docker compose
Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,
harbor的几个组件是用docker-compose启动和管理的,所以需先安装docker-compose.
pip install docker-compose
pip install --upgrade backports.ssl_match_hostname
很多时候都是由于backports.ssl_match_hostname版本的问题,升级backports.ssl_match_hostname一般可以解决该问题。
安装Harbor
如果需要访问https,则需要创建ca证书,我这里直接使用的http.
#创建证书目录
mkdir -p /data/cert
cd /data/cert/
#创建CA根证书
openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt -subj "/C=CN/L=beijing/O=tom/CN=harbor-registry"
#生成一个证书签名, 设置访问域名为 harbor.tom.cn
openssl req -newkey rsa:4096 -nodes -sha256 -keyout harbor.tom.cn.key -out server.csr -subj "/C=CN/L=beijing/O=tom/CN=harbor.tom.cn"
#生成主机的证书
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out harbor.tom.cn.crt
下载Harbor
wget http://harbor.orientsoft.cn/harbor-v1.4.0/harbor-offline-installer-v1.4.0.tgz
tar -zxf harbor-offline-installer-v1.4.0.tgz
cd harbor
配置Harbor.cfg
# 指定私有仓库的主机名,可以是IP地址,也可以是域名,不可以使用localhost或者127.0.0.1.服务器的话需使用私网ip.
hostname = 10.0.40.134
# 用户访问私仓时使用的协议,默认时http,这里不改。
ui_url_protocol = http
max_job_workers = 3
customize_crt = on
# 设置证书文件路径
ssl_cert = /data/cert/harbor.tom.cn.crt
# 设置证书密钥文件路径
ssl_cert_key = /data/cert/harbor.tom.cn.key
secretkey_path = /data
admiral_url = NA
log_rotate_count = 50
log_rotate_size = 200M
email_identity =
email_server = smtp.mydomain.com
email_server_port = 25
email_username = sample_admin@mydomain.com
email_password = abc
email_from = admin <sample_admin@mydomain.com>
email_ssl = false
email_insecure = false
# harbor的管理员账户密码,这个需要自己设定
harbor_admin_password = Harbor12345
auth_mode = db_auth
ldap_url = ldaps://ldap.mydomain.com
ldap_basedn = ou=people,dc=mydomain,dc=com
ldap_uid = uid
ldap_scope = 2
ldap_timeout = 5
ldap_verify_cert = true
self_registration = on
token_expiration = 30
project_creation_restriction = everyone
db_host = mysql
# 指定mysql数据库管理员密码
db_password = root123
db_port = 3306
db_user = root
redis_url =
clair_db_host = postgres
clair_db_password = password
clair_db_port = 5432
clair_db_username = postgres
clair_db = postgres
uaa_endpoint = uaa.mydomain.org
uaa_clientid = id
uaa_clientsecret = secret
uaa_verify_cert = true
uaa_ca_cert = /path/to/ca.pem
registry_storage_provider_name = filesystem
registry_storage_provider_config =
安装Harbor
进入harbor目录,执行**./install.sh**
✔ ----Harbor has been installed and started successfully.----
Now you should be able to visit the admin portal at https://10.0.40.134.
For more details, please visit https://github.com/vmware/harbor .
出现这个信息就可以在浏览器访问Harbor了,不过需要使用公网ip,进入Harbor的web界面。
如果访问失败,类似于这种报错
Error response from daemon: Get https://10.0.40.134
一般需要配置daemon.json,把目标ip设为insecure-registries.
/etc/docker/daemon.json
"insecure-registries" : ["10.0.40.134"]
配置文件应用内网ip,包括在shell界面也应该用内网ip.
访问web需要用公网ip.
上传镜像
这里要使用私网ip登录
# 拉取镜像
docker pull nginx
# 给镜像打标签,标记本地镜像,将其归入某一仓库,也就是Harbor里的路径。
docker tag nginx:latest 10.0.40.134/library/ningx:v1.0
# 把镜像push到Harbor上
docker push 10.0.40.134/library/ningx:v1.0
拉取镜像
用另一台机器从我搭建的Harbor上拉镜像,同样的,也要在/etc/docker/daemon.json配置
"insecure-registries" : ["10.0.40.134"]
docker pull 10.0.40.134/library/ningx:v1.0
这样就能顺利拉取了。
在Harbor界面可以设置针对每个仓库,对每个用户设置权限
1项目管理者2开发者3访客
为方便访问,可以在 /etc/hosts 定义域名,例如,123.123.0.123 hello.world.com,注意同时要在/etc/docker/daemon.json上同步域名。
ps: 有时候,推拉镜像会出现一直preparing的情况,这时候可以尝试重启docker,有时会有效果。
添加链接描述看了这个,貌似harbor不支持命令行查询仓库内的镜像。