企业级私有镜像仓库 Harbor简介: Harbor 是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源 Docker Distribution。作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全。提升用户使用 Registry 构建和运行环境传输镜像的效率。Harbor 支持安装在多个 Registry 节点的镜像资源复制,镜像全部保存在私有 Registry 中,确保数据和知识产权在公司内部网络中管控。另外,Harbor 也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。Harbor 是由 VMware 中国研发团队负责开发的开源企业级 Docker Registry, 不仅解决了我们直接使用 Docker Registry 的功能缺失, 更解决了我们在生产使用 Docker Registry 面临的高可用、镜像仓库直接复制、镜像仓库性能等运维痛点。



1 安装Docker

cd /etc/yum.repos.d
wget https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce -y
systemctl start docker
systemctl enable docker

2 安装 docker-compose

curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose version

3 下载 Harbor 安装包

离线地址
wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.4.tgz
在线地址
wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-online-installer-v1.7.4.tgz

解压:(使用离线包)

tar xf harbor-offline-installer-v1.7.4.tgz

4 自签证书

cd harbor
mkdir ssl  && cd ssl 
#存放证书使用

openssl req -x509 -new -nodes -sha512 -days 3650 \
    -subj "/C=CN/ST=PK/L=PK/O=example/OU=Personal/CN=fuck1899.com" \
    -key ca.key \
    -out ca.crt
openssl genrsa -out fuck1899.com.key 4096


openssl req -sha512 -new \
   -subj "/C=CN/ST=PK/L=PK/O=example/OU=Personal/CN=fuck1899.com" \
   -key fuck1899.com.key \
   -out fuck1899.com.csr 

cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth 
subjectAltName = @alt_names

[alt_names]
DNS.1=fuck1899.com
DNS.2=fuck1899.com
DNS.3=hellozz
EOF

openssl x509 -req -sha512 -days 3650 \
   -extfile v3.ext \
   -CA ca.crt -CAkey ca.key -CAcreateserial \
   -in fuck1899.com.csr \
   -out fuck1899.com.crt

openssl x509 -inform PEM -in fuck1899.com.crt -out fuck1899.com.cert
修改配置文件
vim harbor.cfg
修改一下行
hostname = fuck1899.com
ui_url_protocol = https
ssl_cert = ./ssl/fuck1899.com.crt
ssl_cert_key = ./ssl/fuck1899.com.key
主意:如果不需要做自签证的证书只需要修改一下两个配置
customize_crt = off
hostname = fuck1899.com

保存退出
将证书文件拷贝到docker目录下使我们可以通过命令行提交镜像不受自签证书认证影响
mkdir /etc/docker/certs.d/fuck1899.com -p
cp harbor/ssl/fuck1899.com.cert /etc/docker/certs.d/fuck1899.com/
cp harbor/ssl/fuck1899.com.key /etc/docker/certs.d/fuck1899.com/
cp harbor/ssl/ca.crt /etc/docker/certs.d/fuck1899.com/

如果是其他主机命令行提交或者登陆到这个harbor服务器,那么也需要将这个证书文件拷贝到自己主机/etc/docker/certs.d/fuck1899.com下 没有这个目录可以手动创建

是配置生效
./prepare

5 安装

./install.sh
[Step 3]: checking existing instance of Harbor ...
Creating registry ... done
Creating harbor-core ... done
[Step 4]: starting Harbor ...
Creating harbor-portal ... done
Creating nginx ... done
Creating redis ... 
Creating harbor-adminserver ... 
Creating harbor-db ... 
Creating registryctl ... 
Creating registry ... 
Creating harbor-core ... 
Creating harbor-portal ... 
Creating harbor-jobservice ... 
Creating nginx ... 

✔ ----Harbor has been installed and started successfully.----

Now you should be able to visit the admin portal at https://fuck1899.com. 
For more details, please visit https://github.com/goharbor/harbor .

说明已经安装成功

通过docker-compose查看都运行了一些什么镜像

docker-compose ps
       Name                     Command               State                       Ports                    
-----------------------------------------------------------------------------------------------------------
harbor-adminserver   /harbor/start.sh                 Up                                                   
harbor-core          /harbor/start.sh                 Up                                                   
harbor-db            /entrypoint.sh postgres          Up      5432/tcp                                     
harbor-jobservice    /harbor/start.sh                 Up                                                   
harbor-log           /bin/sh -c /usr/local/bin/ ...   Up      127.0.0.1:1514->10514/tcp                    
harbor-portal        nginx -g daemon off;             Up      80/tcp                                       
nginx                nginx -g daemon off;             Up      0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp,
                                                              0.0.0.0:80->80/tcp                           
redis                docker-entrypoint.sh redis ...   Up      6379/tcp                                     
registry             /entrypoint.sh /etc/regist ...   Up      5000/tcp                                     
registryctl          /harbor/start.sh                 Up

6 浏览器访问测试

访问签需要添加本机 host 文件,因为这个域名是不真实的

linux 添加hosts 文件

47.244.163.105  fuck1899.com

windows添加 hosts 文件

C:\Windows\System32\drivers\etc

编辑hosts 添加:

服务器IP   fuck1899.com

harbor镜像仓库 k8s harbor镜像仓库是什么_docker

但是显示是不安全的

 查看证书是否有我们颁发

harbor镜像仓库 k8s harbor镜像仓库是什么_操作系统_02

上图显示证书有我们颁发

 官方解释

请注意,即使我们通过自签名CA签署证书并将CA部署到上述位置,某些浏览器仍可能出于安全原因显示有关证书颁发机构(CA)未知的警告。这是因为自签名CA本质上不是受信任的第三方CA. 您可以自己将CA导入浏览器以解决警告。

7 登陆

默认密码为
admin  Harbor12345
如果你没有修改过的话

linux 端登陆使用

docker login yourdomain.com

windows直接打开地址

harbor镜像仓库 k8s harbor镜像仓库是什么_运维_03

8 创建项目等

创建项目
      1  公开
      2 不公开
创建用户

用户关联项目
      1 添加成员
      2 角色授权

9 harbor 上传下载镜像

第一步登陆  输入用户名和密码

docker login fuck1899.com
面交互方式登陆:
docker login -u用户名 -p密码 镜像服务器

第二步 给镜像打tag

docker tag oddrationale/docker-shadowsocks fuck1899.com/sundezhao/ss:v1
#oddrationale/docker-shadowsocks 需要大tag的镜像  
#fuck1899.com  harbor服务器
#sundezhao     项目名称
#ss:v1         tag

第三步 push镜像

docker push fuck1899.com/sundezhao/ss:v1

第四步 查看已经push的镜像

harbor镜像仓库 k8s harbor镜像仓库是什么_harbor镜像仓库 k8s_04

第五步 pull 镜像

docker pull fuck1899.com/sundezhao/ss:v1

结束语:

至此Harbor已经搭建完成并可以使用,对于企业来说私有仓库是必须有的,快来测试一下把!