使用Harbor搭建Docker私有仓库并建立访问(http与https自签名方式)

Harbor是VMWare在GitHub上开源的一个用于存储和分发Docker镜像的企业级Registry服务器,实际上通过官方文档我们可以很方便地搭建一个Harbor仓库。
Github链接:https://github.com/goharbor/harbor
官方安装指南https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md
下面介绍下如何在服务器上安装Harbor
系统:ubuntu server16.04
版本:docker v17.06.0-ce或更高 docker-compose v1.18.0或更高
本例使用的是docker 19.03.0 docker-compose v1.24.1
首先需要注意的是,如果是将电脑作为服务器,请务必配置静态ip并安装有docker,若需要建立https连接,请务必安装openssl
说明:由于大多数命令需要有root权限,故笔者描述的是root账号下的情况

1.安装docker-compose(docker-compose是docker官方的容器编排工具,可以定义和运行多容器Docker应用程序)

curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#下载docker-compose的当前稳定版本
chmod +x /usr/local/bin/docker-compose
#对二进制文件赋予权限
docker-compose --version
#查看是否安装成功

2.下载harbor脱机安装包并解压(由于国内网络问题,建议下载脱机安装包进行脱机安装)

wget https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.2-rc1.tgz
tar xvf harbour-offline-installer-v1.8.2-rc1.tgz

3.打开解压后文件,编辑harbor.yml

配置文件中各项意义在官方文档中均有描述,这里不多说,还请移步官方文档
主要配置的是hostname以及关于协议的配置,hostname改为主机ip,如果使用http协议,注释掉https的相关行就好,端口默认选择80,若被占用可以进行修改,至于配置https后文再来描述
其他关于账号密码等可自行修改,用户处可先不添加,在图形化界面后添加。

4.修改完harbor.yml后运行install.sh文件

./install.sh

系统会自动从docker上拉取镜像并启动服务
在运行完后便可在浏览器键入http://yourdomain.com:port来进行访问,管理员账号密码在harbor.yml上请自行配置

5.docker login在http情况下访问harbor

docker login在默认情况下是采用https协议,所以我们应该将选项insecure-registry添加到docker的配置文件中。
打开/etc/docker/daemon.json,添加如下内容

{
    "insecure-registries":["yourdomain.com:port"]
}

然后运行

systemctl daemon-reload
systemctl restart docker

如果是自己的域名是自己造的,记得打开/etc/hosts加下ip与域名对应。
然后就可以通过docker login去登陆仓库并可以上传镜像。
上传注意:
打tag的时候需要将镜像重命名,不然上传不到自己的仓库

docker tag imagename:version yourdomain.com/diretory/imagename:version
docker push yourdomain.com/diretory/imagename:version

6.https协议自签名方式访问

在这里先说明,最好对ip地址自己起一个域名并存放于/etc/hosts中与ip对应,并在下面的yourdomain.com中使用自己起的域名,如果不这样做,在后面的docker login中会出现错误,不能实现https通信
首先需要创建证书,此时需要安装openssl

##在存放证书的文件夹下操作
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 \
   -subj "/C=TW/ST=Taipei/L=Taipei/O=example/OU=Personal/CN=yourdomain.com" \##此处根据地区修改
   -key ca.key \
   -out ca.crt
openssl genrsa -out yourdomain.com.key 4096
openssl req -sha512 -new \
   -subj "/C=TW/ST=Taipei/L=Taipei/O=example/OU=Personal/CN=yourdomain.com" \
   -key yourdomain.com.key \
   -out yourdomain.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=yourdomain.com
DNS.2=yourdomain
DNS.3=hostname
EOF
openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in yourdomain.com.csr \
    -out yourdomain.com.crt
cp yourdomain.com.crt /data/cert/
cp yourdomain.com.key /data/cert/
##/data/cert为存放证书的例子,可以建在不同地方
openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert
cp yourdomain.com.cert /etc/docker/certs.d/yourdomain.com/
cp yourdomain.com.key /etc/docker/certs.d/yourdomain.com/
cp ca.crt /etc/docker/certs.d/yourdomain.com/
##需提前建好文件夹/etc/docker/certs.d/yourdomain.com

最终的/etc/docker文件夹如下所示

/etc/docker
├── certs.d
│   └── yourdomain.com
│       ├── ca.crt
│       ├── yourdomain.cert
│       └── yourdomain.key
├── daemon.json
└── key.json

然后创建证书后对harbor.yml进行配置
取消掉关于https的注释(注意不要注释掉http的相关内容)然后对配置进行修改,证书地址为上文中作为例子使用的/data/cert,大家依据自身情况进行修改

#set hostname
hostname: yourdomain.com

http:
  port: 80

https:
  # https port for harbor, default is 443
  port: 443
  # The path of cert and key files for nginx
  certificate: /data/cert/yourdomain.com.crt
  private_key: /data/cert/yourdomain.com.key

然后对harbor重新加载配置并重启(这也是对harbor修改配置后重新加载的方法

./prepare
docker-compose down -v
docker-compose up -d

这样我们就可以通过浏览器去访问网站了https://ip:port,由于我们的网站是自签名的,所以网站会报警,相信此证书就好。
linux使用终端访问的时候,在客户机上修改/etc/hosts添加ip与域名的对应,并修改/etc/docker/daemon.json文档

{
    "insecure-registries":["yourdomain.com:port"]##port为https的端口
}

再在终端运行

systemctl daemon-reload
systemctl restart docker

此时应该就可以在客户机上进行登录操作了

docker login yourdomain.com
##下为交互命令
username:
password:
Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

docker push同http协议时的命名方式,不再重述。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值