一、什么是Docker仓库
Docker 仓库是用来包含镜像的位置,Docker提供一个注册服务器(Register)来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像。 Docker运行中使用的默认仓库是 Docker Hub 公共仓库。
Docker Hub
Docker Hub是Docker社区分享Docker镜像的网站/存储库。
上面有很多Docker镜像,例如:nginx官方镜像,你可以从Docker Hub上下载这些镜像,也可以在上面分享你自己的镜像。
Docker hub的官方站点是
https://hub.docker.com/
二、Registry的原理
一次docker pull 或 push背后发生的事情 index服务主要提供镜像索引以及用户认证的功能。当下载一个镜像的时候,首先会去index服务上做认证,然后查找镜像所在的registry的地址并放回给docker客户端,docker客户端再从registry下载镜像,在下载过程中 registry会去index校验客户端token的合法性,不同镜像可以保存在不同的registry服务上,其索引信息都放在index服务上。
Docker Registry有三个角色,分别是index、registry和registry client。
index 负责并维护有关用户帐户、镜像的校验以及公共命名空间的信息。 Web UI 元数据存储 认证服务 符号化 registry 是镜像和图表的仓库,它不具有本地数据库以及不提供用户认证,通过Index Auth service的Token的方式进行认证。 Registry Client Docker充当registry客户端来维护推送和拉取,以及客户端的授权。
情景A: 用户要获取并下载镜像。用户发送请求到index来下载镜像,index相应并返回三个相关部分的信息:该镜像所在的registry,该镜像所包含的所有圈层的校验,以授权为目的的token。用户通过响应中返回的token和registry沟通。registry全权负责镜像,它存储基本的镜像和继承的层。registry收到token后与index沟通证实token是被授权通过的。index会发送true或false信号给registry,之后registry允许用户下载所需要的镜像资源。
情景B: 用户要推送镜像到registry中。 用户发送带证书的请求到index要求分配库名,在成功认证,命名空间可用以及库名被分配后index响应并返回临时的token。用户要上传的镜像连带yoken被上传到registry中。registry向index验证token的正确性,在index验证之后开始读取推送流。该index然后更新由docker生成的镜像校验。
情景C: 用户要从index或registry中删除镜像。 index接受来自Docker一个删除库的信号。如果index验证库成功,它将删除该库并返回一个临时的token。registry接收带有该token的删除的信号。registry与index核实该token核实成功后删除库以及相关信息,再通知有关删除的index,index再删除库的所有记录。
三、搭建私有仓库
1、搭建仓库
docker images | grep webserver | awk '{system("docker rmi "$1":"$2"")}'
docker pull registry
docker images registry
docker run -d --name registry -v /opt/registry:/var/lib/registry -p 5000:5000 registry
docker ps
docker info
docker tag yakexi007/game2048:latest localhost:5000/yakexi007/game2048:latest
docker push localhost:5000/yakexi007/game2048
curl localhost:5000/v2/yakexi007/game2048/tags/list
curl http://localhost:5000/v2/_catalog
测试是否能够成功 此仓库目前所有用户都可以访问,处于不安全状态
2、为Docker仓库添加证书加密功能
openssl11:链接:https://pan.baidu.com/s/1zqwTcyezTqss1Tm3J2_eQw 提取码:ud9z
scp -r openssl11/ server1:
cd openssl11
ls---->openssl11-1.1.1g-3.el7.x86_64.rpm openssl11-libs-1.1.1g-3.el7.x86_64.rpm
yum install openssl11-1.1.1g-3.el7.x86_64.rpm openssl11-libs-1.1.1g-3.el7.x86_64.rpm -y
vim /etc/hosts
----------------------
172.25.75.1 server1 reg.westos.org
----------------------
ping reg.westos.org
mkdir -p certs
openssl11 req -newkey rsa:4096 -nodes -sha256 -keyout certs/westos.org.key -addext "subjectAltName = DNS:reg.westos.org" -x509 -days 365 -out certs/westos.org.crt
----->CN-->Saanxi-->Xi'an-->westos-->linux-->reg.westos.org-->root@123.org
cd certs
ls---->westos.org.crt westos.org.key
cd
docker rm -f registry
docker ps
docker run -d \
--restart=always \
--name registry \
-v "$(pwd)"/certs:/certs \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/westos.org.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/westos.org.key \
-p 443:443 \
registry
docker ps
docker tag nginx:latest reg.westos.org/nginx:latest
docker push reg.westos.org/nginx:latest
出现问题,证书是被不知名的ca签名的(因为是我们自建的证书,所以会有问题)
cd /etc/docker/
mkdir certs.d
cd certs.d/
mkdir reg.westos.org
cd reg.westos.org/
cp ~/certs/westos.org.crt ca.crt
ls--->ca.crt
docker push reg.westos.org/nginx:latest
因为使用的是自签证书,客户端要与私有仓库通信,那就必须建一个目录:/etc/docker/certs.d,在这个目录下建立签名的域名目录,然后把私有仓库的证书拷贝到这个目录即可。 再次上传时上传成功
3、为镜像添加用户认证功能
mkdir auth
cd auth/
yum provides */htpasswd
yum install -y httpd-tools-2.4.6-88.el7.x86_64
htpasswd -Bc auth/htpasswd admin
htpasswd -B auth/htpasswd qwe
cat auth/htpasswd
docker ps
docker rm -f registry
docker run -d -p 443:443 \
--restart=always --name registry \
-v "$(pwd)"/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-v "$(pwd)"/certs:/certs \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/westos.org.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/westos.org.key \
registry
docker ps
4、docker主机认证
四、Harbor仓库
1、harbor仓库相关
什么是Harbor?
Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。
Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
2、harbor仓库的安装和部署
docker-compose:https://github.com/docker/compose/releases harbor-online-installer:https://github.com/goharbor/harbor/releases/download/v2.3.4/harbor-online-installer-v2.3.4.tgz harbor:链接:https://pan.baidu.com/s/1lKFe4TiGP4LXZ_zg9gQFWg 提取码:91gd
wget https://github.com/goharbor/harbor/releases/download/v2.3.4/harbor-online-installer-v2.3.4.tgz
wget https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-linux-x86_64
scp harbor-offline-installer-v1.10.1.tgz server1:
scp docker-compose-Linux-x86_64-1.27.0 server1:
mv docker-compose-Linux-x86_64-1.27.0 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
du -h harbor-offline-installer-v1.10.1.tgz
tar zxf harbor-offline-installer-v1.10.1.tgz
cd harbor/
ls
vim harbor.yml
-----------------------------------------------
5 hostname: reg.westos.org
17 certificate: /data/certs/westos.org.crt
18 private_key: /data/certs/westos.org.key
27 harbor_admin_password: westos
------------------------------------------------
mkdir /data
cp ~/certs/ /data/ -r
cd /data/
ls--->certs
cd certs/
ls---->westos.org.crt westos.org.key
cd /root/harbor/
./install.sh
ls---->docker-compose.yml
docker-compose start
测试: 在真机中进行域名解析 在浏览器中访问server1ip 因为是自签证书浏览器不信任,点击advanced—>accept… 输入用户名和密码登陆 在server1中登陆仓库并上传镜像 在web界面中library仓库可以看到上传的nginx镜像 在server1中进行一些操作可以在web的日志中查看到操作记录
3、harbor仓库的使用
(1)创建私有仓库
点击新建项目 输入项目名称,不勾选公开级别的情况下项目为私有状态,点击确定
(2)创建用户
写入需要添加的用户 将创建的用户添加到仓库成员中
(3)私有仓库上传和拉取镜像
登陆私有仓库 向私有仓库中上传镜像
拉取镜像 在web界面的日志中可以查看到操作
4、harbor安全验证
(1)harbor的重新部署
关闭当前容器 重新安装harbor
–with-notary: 镜像信任,Notary是Docker镜像的签名工具,用来保证镜像在pull,push和传输过程中的一致性和完整性,避免中间人攻击,避免非法的镜像更新和运行。 镜像信任功能能够保证镜像的安全,只有打了信任标签的镜像才能被拉取 –with-clair: 镜像安全扫描,Harbor与Clair集成,添加漏洞扫描功能。 默认在运行harbor时漏洞扫描是没有开启的,需要重新开启并添加参数 –with-chartmuseum: 支持chart仓库服务
(2)镜像安全扫描
在仓库配置管理中设置自动扫描镜像,点击底下的保存键
(3)内容信任
启用内容信任功能,重新安装时注意先改回0再安装 上传镜像时失败,因为我们需要根部部署证书 再次进行镜像上传,可以看到签名成功并上传 在web界面可以看到已签名
|