03: 使用docker搭建Harbor私有镜像仓库
1.1 harbor介绍
1、Harbor简介
1. Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器。
2. 镜像的存储harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。
3. harbor在docker distribution的基础上增加了一些安全、访问控制、管理的功能以满足企业对于镜像仓库的需求。
4. harbor以docker-compose的规范形式组织各个组件,并通过docker-compose工具进行启停。
5. docker的registry是用本地存储或者s3都是可以的
6. Harbor的镜像拷贝功能是通过docker registry的API去拷贝,这种做法屏蔽了繁琐的底层文件操作
2、Harbor架构图
3、主要组件
1.2 Harbor安装
1、参考文档及安装步骤梳理
下载v1.4.0版本harbor:https://github.com/goharbor/harbor/releases?after=v1.5.0-rc5
安装参考文档:https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md
配置证书:https://github.com/goharbor/harbor/blob/master/docs/configure_https.md
1、 下载离线安装包
2、 安装docker
3、 安装docker-compose
4、 自签TLS证书
5、 Harbor安装与配置
6、 Docker主机访问Harbor
2、安装docker和docker-compose(192.168.56.14)
# 1)安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2 # 2)添加Docker软件包源(否则doker安装的不是新版本) yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo # 3)安装Docker CE yum install -y docker-ce # 4)启动Docker服务并设置开机启动 systemctl start docker systemctl enable docker # 5)安装docker compose curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose docker-compose --version # 测试docker-compose是否安装好
2、安装Harbor
'''安装Harbor镜像仓库''' # 1、下载离线安装包 https://github.com/goharbor/harbor/releases # 2、解压并配置访问地址''' cd /home/work
tar zxvf harbor-offline-installer-v1.8.1.tgz cd /home/work/harbor vi harbor.yml ''' hostname = 192.168.56.14 harbor_admin_password = 123456 ''' # 3、准备配置 ./prepare # 4、导入镜像并启动 ./install.sh # 5、查看容器状态 docker-compose ps 安装完成后可以登录Harbor:http://192.168.56.14
1.3 为Harbor配置Https
1、简介
1. 配置ssl证书https://github.com/goharbor/harbor/blob/master/docs/configure_https.md
2. 由于Harbor没有附带任何证书,所以它默认使用HTTP来服务注册表请求,但是,强烈建议为任何生产环境启用安全性。
3. 在测试或开发环境中,您可以选择使用自签名证书,而不是来自受信任的第三方CA的证书。
2、获得CA证书颁发机构(CN为域名)
mkdir /home/work/harbor/ssl/ # 创建一个ssl目录用来存放要创建的证书 cd /home/work/harbor/ssl # 获得CA证书颁发机构(CN为域名,最好为主机名) 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=linux-node4.example.com" \ -key ca.key \ -out ca.crt
3、获取服务器证书
1. 假设注册表的主机名是linux-node4.example.com,其DNS记录指向运行Harbor的主机。
2. 在生产环境中,您首先应该从CA获得证书,在测试或开发环境中,您可以使用自己的CA。
3. 证书通常包含一个.crt文件和一个.key文件,例如linux-node4.example.com.crt和linux-node4.example.com.key。
# 创建自己的私钥
openssl genrsa -out linux-node4.example.com.key 4096
# 生成部署请求认证
# 如果使用像linux-node4.example.com这样的FQDN连接注册表主机,则必须使用linux-node4.example.com作为CN(通用名称)。
openssl req -sha512 -new \
-subj "/C=TW/ST=Taipei/L=Taipei/O=example/OU=Personal/CN=linux-node4.example.com" \
-key linux-node4.example.com.key \
-out linux-node4.example.com.csr
4、为注册的主机生成证书
1. 无论您使用的是像linux-node4.example.com这样的FQDN还是IP来连接注册表主机
2. 都可以运行这个命令来生成符合Subject Alternative Name (SAN)和x509 v3扩展要求的注册表主机证书
# 生成v3.ext文件
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=linux-node4.example.com
DNS.2=linux-node4.example
DNS.3=example
EOF
# 生成证书
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in linux-node4.example.com.csr \
-out linux-node4.example.com.crt
5、为Harbor配置服务器证书和密钥
# 在获得linux-node4.example.com.crt和linux-node4.example.com.key文件之后,可以将它们放入/data/cert/这样的目录中
mkdir -p /data/cert
cp linux-node4.example.com.crt /data/cert/
cp linux-node4.example.com.key /data/cert/
6、为Docker配置服务器证书、密钥和CA
# Docker守护进程将.crt文件解释为CA证书,将.cert文件解释为客户机证书
# 将服务器linux-node4.example.com.crt转换为linux-node4.example.com.cert
openssl x509 -inform PEM -in linux-node4.example.com.crt -out linux-node4.example.com.cert
# 为docker部署 linux-node4.example.com.cert、linux-node4.example.com.key和ca.crt
mkdir -p /etc/docker/certs.d/linux-node4.example.com/
cp linux-node4.example.com.cert /etc/docker/certs.d/linux-node4.example.com/
cp linux-node4.example.com.key /etc/docker/certs.d/linux-node4.example.com/
cp ca.crt /etc/docker/certs.d/linux-node4.example.com/
7、配置Harbor
# 编辑文件端口,更新主机名并取消对https块的注释,更新属性证书和private_key
#set hostname
hostname: linux-node4.example.com
harbor_admin_password: 123456
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/example.com.crt
private_key: /data/cert/example.com.key
8、为Harbor重新生成配置文件
#1、为Harbor重新生成配置文件
./prepare
#2、如果Harbor已经运行,则停止并删除现有实例,镜像数据仍然保存在文件系统中
docker-compose down -v
#3、重启harbor
docker-compose up -d
#4、此时可以通过浏览器访问https: https://192.168.56.14/harbor/projects
#5、可以在linux-node4.example.com本机上测试docker登录
docker login linux-node4.example.com
9、在其他docker机器中配置登录harbor(192.168.56.13)
mkdir -p /etc/docker/certs.d/linux-node4.example.com/
scp -r root@192.168.56.14:/home/work/harbor/ssl/linux-node4.example.com.cert /etc/docker/certs.d/linux-node4.example.com/
scp -r root@192.168.56.14:/home/work/harbor/ssl/linux-node4.example.com.key /etc/docker/certs.d/linux-node4.example.com/
scp -r root@192.168.56.14:/home/work/harbor/ssl/ca.crt /etc/docker/certs.d/linux-node4.example.com/
vi /usr/lib/systemd/system/docker.service # 添加--insecure-registry 192.168.56.14
'''
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.56.14
'''
systemctl restart docker.service # 重启docker
111111
1111111111111111
作者:学无止境
出处:https://www.cnblogs.com/xiaonq
生活不只是眼前的苟且,还有诗和远方。