离线安装Harbor私有镜像仓库
因为环境需要,本次在 Ubuntu 服务器上部署私有化的容器镜像仓库,并记录下来方便后续临摹。
磁盘扩展
因为采用 VMware 直接克隆的纯净原始机(就挂了个镜像,其他配置全默认),虚拟机磁盘空间较小,考虑到镜像文件的存储需要大量的磁盘空间,我们首先需要在虚拟机中添加一块磁盘,并挂载到服务器上。
将 /dev/sdb 添加为物理卷(PV)
sudo pvcreate /dev/sdb
将 /dev/sdb 添加到现有的卷组(假设卷组名称为 ubuntu-vg):
sudo vgextend ubuntu-vg /dev/sdb
将根逻辑卷(假设为 ubuntu--lv)扩展到新添加的空间:
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
这会将所有可用空间分配给根逻辑卷。
根据你的文件系统类型,扩展文件系统。例如,如果文件系统是 ext4:
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
如果是 xfs 文件系统:
sudo xfs_growfs /dev/ubuntu-vg/ubuntu-lv
运行以下命令检查文件系统大小是否已经扩展:
df -h
安装 docker
这里我给出几种下载 Docker 的方案,大家可以根据需要自行选择。
- 如果需要安装服务器监控管理软件的话我这边推荐 1panel,下载 1panel 的时候会自动帮你下载 Docker。在线安装 - 1Panel 文档
bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)"
- 国内的 Docker 快速下载脚本
bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
- 需要离线安装和原生安装的可以参考 Docker 官网 Docker: Accelerated Container Application Development
原生安装 Docker
首先我们安装 Docker 前置依赖,并添加 Docker apt 仓库。
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
查看仓库所有支持的 Docker 版本
apt-cache madison docker-ce | awk '{ print $3 }'
设置 Docker 版本并安装
VERSION_STRING=5:26.1.3-1~ubuntu.22.04~jammy && sudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin -y
DNS 服务器
因为内网环境需要完全脱离外网环境,所以得自建一个 DNS 服务器,并绑定 Harbor 等应用的域名,做安全证书管理。这里我也推荐如果安全性不是特别高,可以直接使用 1Panel 签发证书。
下载 DNS 服务器
apt install -y bind9
vim /etc/bind/named.conf
zone "example.com" {
type master;
file "/etc/bind/db.example.com";
};
vim /etc/bind/db.example.com
$TTL 3600
@ IN SOA example.com. root.example.com (
2023030801 ; serial
3600 ; refresh
1800 ; retry
604800 ; expire
86400 ) ; minimum
@ IN NS example.com.
IN A 10.10.10.254
mail IN A 10.10.10.254
dns IN A 10.10.10.254
registry IN A 10.10.10.254
systemctl restart bind9
配置HTTPS证书
这一步配置证书主要是为了保证内网安全,以及可以使用 https 访问 Harbor。由于我们采用自签证书,首先得配置 Docker 证书信任,然后再去配置 Harbor 的 https 访问。
CA根证书签发
创建 ca.key 证书。
mkdir /opt/ssl && cd /opt/ssl
openssl genrsa -out ca.key 4096
在某些操作系统或环境中,系统自带的随机数生成器可能不够强大或不可靠。通过生成一个随机数种子文件(.rnd),可以为 OpenSSL 提供一个高质量的随机数源,从而提高生成的密钥和证书的安全性。如果使用IP地址,需要在执行以上命令前执行以下操作:
cd /root
openssl rand -writerand .rnd
cd -
创建 ca.crt 证书。
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=*.example.com" \
-key ca.key \
-out ca.crt
生成服务器认证证书
证书通常包含一个 .crt 文件和一个 .key 文件,例如 example.com.crt 和 example.com.key。
生成私钥。
openssl genrsa -out registry.example.com.key 4096
生成证书签名请求(CSR)。
openssl req -sha512 -new \
-subj "/C=CN/ST=XX/L=XX/O=example/OU=Personal/CN=registry.example.com" \
-key registry.example.com.key \
-out registry.example.com.csr
生成一个x509 v3扩展文件。
无论您使用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=example.com
DNS.2=*.example.com
EOF
如果使用ip,需要使用如下方式进行创建:
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = IP:10.10.10.254
EOF
使用该 v3.ext 文件为您的Harbor主机生成证书。
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in registry.example.com.csr \
-out registry.example.com.crt
Docker自签证书信任
Docker程序将.crt文件解释为CA证书,并将.cert文件解释为客户端证书,所以得做一次证书转换。
openssl x509 -inform PEM -in registry.example.com.crt -out registry.example.com.cert
将服务器证书,密钥和CA文件复制到Harbor主机上的Docker证书文件夹中。您必须首先创建适当的文件夹。
mkdir -p /etc/docker/certs.d/registry.example.com/
cp registry.example.com.crt /etc/docker/certs.d/registry.example.com/
cp registry.example.com.key /etc/docker/certs.d/registry.example.com/
cp ca.crt /etc/docker/certs.d/registry.example.com/
最后需要重启 Docker,让 Docker 加载证书。
安装 Harbor
首先下载 Harbor 的最新版本压缩包,并上传到服务器。Releases · goharbor/harbor
tar xzvf harbor.v2.13.0.tar.gz -C /opt/
进入 Harbor 目录,复制并编辑 Harbor YML 文件。
cd /opt/harbor && cp harbor.yml.tmpl harbor.yml && vim harbor.yml
这里还可以直接修改 Harbor 配置文件中的 SSL 配置使用之前的自签证书,但是我这个项目是在 nginx 中又做了一次反向代理,所以 SSL 是在 nginx 中进行处理的。
5 hostname: 10.10.10.254 # 在第5行进行修改
执行安装脚本
./install.sh
Harbor by systemd,设置 Harbor 的守护进程。
vim /etc/systemd/system/harbor.service
[Unit]
Description=Harbor
After=docker.service systemd-networkd.service systemd-resolved.service
Requires=docker.service
Documentation=http://github.com/vmware/harbor
[Service]
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=/usr/bin/docker compose -f /opt/harbor/docker-compose.yml up
ExecStop =/usr/bin/docker compose -f /opt/harbor/docker-compose.yml down
[Install]
WantedBy=multi-user.target
使用 Harbor
在 Harbor 中创建用户,再创建项目,上传镜像的时候需要登录。
#使用IP地址登录
#username是:admin(默认)
#密码是:Harbor123456(默认)
docker logiu 10.10.10.254
上传镜像示例
[root@localhost ~]# docker tag leidazhuang/web:v0.3 192.168.110.20/ldaz/web:v0.1
[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.110.20/ldaz/web v0.1 613fd44bad96 8 days ago 1.23MB
docker push 10.10.10.254/rancher/web:v0.1