Docker Registry
docker run -itd -v /root/data/registry:/var/lib/registry -p 5000:5000 --restart=always --name docker-registry registry:latest
对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存
在请新建该文件)
{
"registry-mirror": [
"https://registry.docker-cn.com"
],
"insecure-registries": [
"192.168.199.100:5000"
]
}
当前镜像tag
[root@JD ~]# docker tag mysql:5.7 127.0.0.1:5000/registry-mysql:5.7
推送到镜像仓库
[root@JD ~]# docker push 127.0.0.1:5000/registry-mysql
用 curl 查看仓库中的镜像。
[root@JD ~]# curl 127.0.0.1:5000/v2/_catalog
{"repositories":["registry-mysql"]}
Docker 默认不允许非HTTPS
方式推送镜像
使用 Docker Compose 搭建一个拥有权限认证、TLS 的私有仓库
将harbor.sh脚本从 GitHub Gist下载到您的Ubuntu机器或VM。
harbor.sh脚本需要梯子才能下载。我在CSDN上传了一份harbor:v1.10
版本的脚本。
使用安装脚本快速部署Harbor的脚本文件-harbor.sh
向当前用户授予运行权限。
chmod u+x
要注意修改脚本中的端口号。
Harbor要求在目标主机上打开以下端口。
港口 | 协议 | 描述 |
---|---|---|
443 | HTTPS | Harbor门户和核心API在此端口上接受HTTPS请求。您可以在配置文件中更改此端口。 |
4443 | HTTPS | 与Harbor的Docker内容信任服务的连接。仅在启用公证人的情况下才需要。您可以在配置文件中更改此端口。 |
80 | HTTP | Harbor门户和核心API在此端口上接受HTTP请求。您可以在配置文件中更改此端口。 |
以超级用户身份运行脚本。
sudo ./harbor.sh
选择是使用主机的IP地址还是FQDN部署Harbor。
Would you like to install Harbor based on IP or FQDN?
这是您访问Harbor接口和注册表服务的地址。
要使用IP地址,请输入1。
要使用FQDN,请输入2。
该脚本需要几分钟才能运行。在运行时,该脚本会从Ubuntu下载所需的软件包和依赖项,安装最新的稳定版本的Docker和Docker Compose,并安装最新的稳定版本的Harbor。
当脚本报告时Harbor Installation Complete,登录到新的Harbor实例。
docker login
用户名: admin
密码: VMware12345
在浏览器中输入Harbor地址,以登录Harbor接口
harbor 下载
配置YML文件
hostname 这里设置本机的ip
harbor_admin_password web页面的密码,默认的用户名和密码为admin和Harbor12345
如果没有https,则需要先注释:
https:
# https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
certificate: /your/certificate/path
private_key: /your/private/key/path
sh ./install.sh
Creating harbor-log ... done
Creating registry ... done
Creating harbor-db ... done
Creating harbor-portal ... done
Creating redis ... done
Creating registryctl ... done
Creating harbor-core ... done
Creating harbor-jobservice ... done
Creating nginx ... done
✔ ----Harbor has been installed and started successfully.----
https://114.67.79.102:8088
openssl genrsa -out ca.key 4096
调整-subj选项中的值以反映您的组织。如果使用FQDN连接Harbor主机,则必须将其指定为通用名称(CN)属性。
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
-key ca.key \
-out ca.crt
证书通常包含一个.crt文件和一个.key文件,例如yourdomain.com.crt和yourdomain.com.key。
openssl genrsa -out yourdomain.com.key 4096
调整-subj选项中的值以反映您的组织。如果使用FQDN连接Harbor主机,则必须将其指定为公用名(CN)属性,并在密钥和CSR文件名中使用它。
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
-key yourdomain.com.key \
-out yourdomain.com.csr
无论您使用FQDN还是IP地址连接到Harbor主机,都必须创建此文件,以便可以为您的Harbor主机生成符合主题备用名称(SAN)和x509 v3的证书扩展要求。替换DNS条目以反映您的域。
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
将yourdomain.comCRS和CRT文件名中的替换为Harbor主机名。
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in yourdomain.com.csr \
-out yourdomain.com.crt
生成后ca.crt,yourdomain.com.crt和yourdomain.com.key文件,必须将它们提供给港口和码头工人,和重新配置港使用它们。
将服务器证书和密钥复制到Harbor主机上的certficates文件夹中。
cp yourdomain.com.crt /data/cert/
cp yourdomain.com.key /data/cert/
转换yourdomain.com.crt为yourdomain.com.cert,供Docker使用。
Docker守护程序将.crt文件解释为CA证书,并将.cert文件解释为客户端证书。
openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert
将服务器证书,密钥和CA文件复制到Harbor主机上的Docker certificate文件夹中。必须首先创建适当的文件夹。
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/
如果将默认nginx端口443 映射到其他端口,请创建文件夹/etc/docker/certs.d/yourdomain.com:port或/etc/docker/certs.d/harbor_IP:port。
重新启动Docker Engine
systemctl restart docker
echo "10.19.46.15 yourdomain.com" >> /etc/hosts
./prepare
docker-compose down -v
docker-compose up -d
[root@JD harbor]# docker login 127.0.0.1:443
Username: admin
Password:
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
部署单机版harbor
通过Helm部署具有高可用性的harbor