Docker私有仓库Harbor
前面学习了Docker及Dockerfile构建镜像,那么构建的镜像放在哪里才能被Docker容器快速获取到呢?我们知道,可以把镜像放入Docker Hub镜像仓库,但是Docker Hub是国外网站,一方面镜像放在Docker Hub不安全,另一方面从Docker Hub下载镜像比较慢,尽管可以配置Docker Hub镜像加速器,但是速度最快只能到10m/s。因此,将镜像放入私有仓库是一种更好的做法。
Harbor概念及证书签发
Harbor是一个企业级的容器镜像仓库,它提供了镜像的存储、管理、分发、安全扫描等一系列功能。企业可以轻松管理和创建自己的私有仓库,可以自定义访问控制、镜像复制和同步等策略,使之安全高效。
Harbor作为优秀的私有镜像仓库,被很多企业和个人使用,Harbor提供了有好的UI界面,我们访问Harbor UI界面时可以通过HTTP和HTTPS的方式访问,一般为了安全性都是HTTPS访问,如何通过HTTPS访问?在实际应用中,我们可以通过购买CA证书,或通过自签发证书来实现HTTPS方式的访问。
自签发证书是相对简单的一种方式,我们通过OpenSSL生成自签发证书
- 创建存放证书的目录
mkdir /data/ssl -p
cd /data/ssl
- 生成CA证书
CA(Certificate Authority)是数字证书的签发机构,我们需要生成一个CA证书来签署服务器证书。
openssl genrsa -out ca.key 3072
openssl req -new -x509 -days 3650 -key ca.key -out ca.pem
这个命令会使用OpenSSL命令工具生成一个长度为3072位的RSA
私钥文件ca.key
和一个自签名的X.509
证书ca.pem
,有效期10年。生成过程中,需要按照提示输入证书的相关信息,如国家、省份、城市、单位名等,也可以直接回车默认。
生成服务器证书
该证书用于对客户端的HTTPS请求进行响应。生成服务器证书:
- 创建一个服务器证书的私钥文件
server.key
openssl genrsa -out server.key 3072
- 创建一个证书签名请求,(Certificate Signing Request, CSR)文件,
server.csr
,该文件包含需要在证书中包含的信息:
openssl req -new -key server.key -out server.csr
生成CSR过程中,同样需要填写相关信息。
- 最后,使用之前生成的CA证书
ca.pem
对服务器证书进行签名,生成最终的服务器证书server.crt
:
openssl x509 -req -days 3650 -in server.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out server.crt
这个命令会使用OpenSSL工具生成一个自签名的X.509数字证书server.crt,有效期10年。生成证书过程中,需要输入CA证书的密码,按照提示输入即可。
完成上述步骤,就可以用HTTPS访问Harbor UI界面了。需要注意的是:在使用自签发证书的情况下,浏览器会显示证书不受信任,需要手动添加证书信任才能正常访问。
安装Harbor
准备harbor
- 创建安装目录
mkdir /data/install -p
cd /data/install
-
Harbor离线包
harbor-offline-installer-v2.3.0-rc3.tgz
上传到/data/ssl
目录 -
解压Harbor离线包
tar -zxvf harbor-offline-installer-v2.3.0-rc3.tgz
- 修改Harbor配置文件
cd harbor # 到harbor目录下
cp harbor.yml.tmpl harbor.yml # 拷贝一份文件更名为harbor.yml
vim harbor.yml # 修改配置
hostname: harbor # 用于访问用户界面和harbor服务。它应该是目标机器的IP地址或域名不要使用localhost或127.0.0.1为主机名,这里和上面签发的服务器证书中的域名一致就行
certificate: /data/ssl/ca.pem # harbor的根证书,只有开启HTTPS才用到
private_key: /data/ssl/ca.key # harbor的私钥,开启HTTPS才用到
Harbor默认的账号和密码:admin/Harbor12345
安装Docker compose
Docker-compose是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。安装Harbor是通过Docker-compose命令实现的,可以通过以下方法安装Docker-compose
docker-compose-Linux-x86_64.64
离线文件上传到/data/install
目录下,把文件复制到/usr/bin目录下,重命名为docker-compose
mv docker-compose-Linux-x86_64.64 /usr/bin/docker-compose
- 赋予docker-compose执行权限
chmod +x /usr/bin/docker-compose
docker-compose工程配置文件默认为docker-compose.yml文件,docker-compose运行目录下必须有docker-compose.yml文件。docker-compose可以管理多个docker的实例
安装Harbor
- 执行安装脚本
cd /data/install/harbor
./install.sh
会去拉取下载很多镜像,时间可能比较长,耐心等待…
这样就成功了。客户端若想通过域名访问自己的harbor可以在电脑的hosts文件中设置
xxx.xxx.xxx.xxx harbor
- 若要停止并删除由docker-compose命令启动的harbor服务
cd /data/install/harbor # 因为这个目录下有docker-compose.yml文件,所以在这个目录下面运行
docker-compose down
命令会:
- 停止容器
- 删除所有已经停止的容器
- 删除所有与服务相关的网络(除非是external指令定义的外部网络)
- 删除所有与服务关联的匿名和命名卷
需要注意的是:docker-compose down不会删除镜像或构建的缓存
- 启动harbor
cd /data/install/harbor
docker-compose up -d
Harbor界面使用
直接访问harbor私有库的ip地址即可,选择信任继续访问,输入账号密码
页面如下:
其中有一个library
的镜像仓库,所有的基础镜像都在这个仓库里面,这是一个公开的镜像仓库。
我们创建一个自己的镜像仓库来使用,也选择公开,公开后其他人命令行访问这个仓库时是不需要进行身份认证的,请留意
。
测试使用harbor私有库
要使用Harbor私有镜像仓库,需要docker login登录Harbor,默认是基于HTTPS的,若使用HTTPS,那么还需要配置客户端的证书,若不使用HTTPS而是使用HTTP,可以增加insecure-registries
字段,若Docker客户端添加了insecure-registries配置,就不需要在Docker客户端配置对应的证书。
修改Docker配置
- vim编辑daemon.json文件
vim /etc/docker/daemon.json
- daemon.json默认是不存在的,需要自己创建,写入内容如下
{
"insecure-registries": ["192.168.40.181","harbor"]
}
192.168.40.181:是Harbor机器的ip
harbor是192.168.40.181对应的主机名
- 设置hosts
vim /etc/hosts
# 内容如下
192.168.40.181 harbor
- 重启服务使生效
systemctl daemon-reload && systemctl restart docker
登录Harbor
docker login xxx.xxx.xxx.xx
输入账号密码,默认admin/Harbor12345,出现Login Succeeded
,说明登录成功。
测试上传镜像到Harbor私有仓库
- 先去Docker Hub下载Tomcat镜像作为测试镜像。
docker pull tomcat
- 给镜像打标签
docker tag tomcat:latest ip地址或域名/test/tomcat:v1
相当于给镜像起名字,tomcat:latest
表明给这个镜像打标签。
ip地址或域名表示指定仓库地址(不写默认是Docker Hub的地址)
/test/tomcat:是这个镜像在harbor中的命名空间和仓库名,v1是版本号。
- push推送到仓库
docker push xxx.xxx.xx.xxx/test/tomcat:v1
推送完毕后如图。
- 从私有库拉取镜像
docker pull xxx.xxx.xxx.xxx/test/tomcat:v1