目录
一、构建私有仓库
1.docker hub
docker hub是docker公司维护的公共仓库,用户可以免费使用,也可以购买私有仓库。
首先在https://hub.docker.com/网站注册一个账号
在docker hub上新建一个公共仓库
可以看到docker信息以及镜像的仓库
使用 docker search 搜索镜像时,搜索出来可以看到下面的镜像列表
从docker主机上传镜像,首先需要登录
可以通过 docker login 命令在终端输入用户名及密码来完成 Docker Hub 的登录。
config.json是用于存储docker registry 的认证信息
创建之后可以看到如下公共仓库
给镜像加标签然后上传镜像到docker hub
可以看到上传成功
通过 docker logout 退出登录。 查看认证信息为空
2.Registry 工作原理
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客户端来维护推送和拉取,以及客户端的授权。
3.配置镜像加速器
从docker hub上下载镜像的速度太慢,需要配置镜像加速器,这里以阿里云为例:(需要提前注册阿里云帐号)
cd /etc/docker/
ls
vim daemon.json #配置阿里云镜像加速器
{
"registry-mirrors": ["https://vo5twm71.mirror.aliyuncs.com"]
}
systemctl daemon-reload ##重载docker服务
systemctl restart docker
docker info
docker images
docker pull zabbix/zabbix-agent #可以看到拉取速度很快
docker images
docker info 可以看到镜像仓库变成设置的
拉取镜像
4.搭建私有仓库
docker hub虽然方便,但是还是有限制 需要internet连接,速度慢 所有人都可以访问 由于安全原因企业不允许将镜像放到外网
docker images
docker search registry
docker pull registry
docker history registry:latest
docker run -d -p 5000:5000 --restart=always --name registry registry
##运行容器 -d 是打入后台 默认端口为5000 --restart=always表示随docker 自己启动
docker ps
netstat -antlp
cd
docker tag nginx:latest localhost:5000/nginx:latest
docker images
docker push localhost:5000/nginx:latest ##上传镜像到本地仓库
curl localhost:5000/v2/_catalog ##查看仓库
官方镜像云
运行registry容器
本地镜像在命名时需要加上仓库的ip和端口
上传镜像到本地仓库
为Docker仓库添加证书
把openssl11的包传输到docker1:
创建加密认证的密钥
创建目录,保存认证和钥匙
make certs
yum install -y openssl11-1.1.1k-2.el7.x86_64.rpm openssl11-libs-1.1.1k-2.el7.x86_64.rpm
生成密钥
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
填写证书信息。域名一定要和DNS解析保持一致
查看密钥
docker rm -f registry ##删除原来的仓库
docker history registry:latest 里面默认卷
docker volume ls
docker volume prune ##清除卷内信息
docker run -d --restart=always --name registry -v /root/certs:/certs -v /opt/registry:/var/lib/registry -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
## -v 选项表示把宿主机的目录挂接到容器内的路径 -e是修改内部选项 监听端口 端口映射443
容器内的程序会在/var/lib/registry
docker ps
ll /opt/registry/ ##里面为空
docker images
vim /etc/hosts #给docker1添加解析:reg.westos.orgdocker tag nginx:latest reg.westos.org/nginx:latest ##贴标签
docker push reg.westos.org/nginx:latest
上传时发现需要认证
mkdir -p /etc/docker/certs.d/reg.westos.org
cd certs/
ls
cp westos.org.crt /etc/docker/certs.d/reg.westos.org/ca.crt ##拷贝证书到指定目录中,docker引擎会识别到
ll /etc/docker/certs.d/reg.westos.org/ca.crt
docker push reg.westos.org/nginx:latest
cd /opt/registry/docker/registry
加入认证功能
mkdir auth
yum install -y httpd-tools
htpasswd --help
htpasswd -cB auth/htpasswd admin ##为admin用户和dmq用户添加认证信息和密码,并查看,第一次用-c
cat auth/htpasswd ##看到用户密码
htpasswd -B auth/htpasswd wxh
cat auth/htpasswd
docker rm -f registry
docker ps -a
docker run -d --restart=always --name registry -v /root/certs:/certs -v /opt/registry:/var/lib/registry -v /root/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -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 images
curl --help
curl -k https://reg.westos.org/v2/_catalog -u admin:westos ##查看仓库镜像
ll -d /opt/registry/
docker tag yakexi007/game2048:latest reg.westos.org/game2048:latest
docker push reg.westos.org/game2048:latest ##需要认证
docker login reg.westos.org ##登陆到域名reg.westos.org
cat .docker/config.json ##认证信息
docker push reg.westos.org/game2048:latest
curl -k https://reg.westos.org/v2/_catalog -u admin:westos ##可以看到上传的镜像
二、harbor--企业级私有仓库
1、harbor安装部署
Harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是Docker Registry的更高级封装,它除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计等功能外,它还整合了K8s的插件(Add-ons)仓库,即Helm通过chart方式下载,管理,安装K8s插件,而chartmuseum可以提供存储chart数据的仓库【注:helm就相当于k8s的yum】。另外它还整合了两个开源的安全组件,一个是Notary,另一个是Clair,Notary类似于私有CA中心,而Clair则是容器安全扫描工具,它通过各大厂商提供的CVE漏洞库来获取最新漏洞信息,并扫描用户上传的容器是否存在已知的漏洞信息,这两个安全功能对于企业级私有仓库来说是非常具有意义的。
harbor git 地址:
https://github.com/goharbor/harbor
删掉之前的镜像
docker ps
docker rm -f registry
docker ps -a
真机中:把docker-compose-linux-x86_64-v2.2.3和harbor-offline-installer-v2.3.4.tgz传给docker1
tar zxf harbor-offline-installer-v2.3.4.tgz ##解压
cd harbor/
cp harbor.yml.tmpl harbor.yml ##生成配置文件.tmpl是模板
vim harbor.yml ##修改配置文件5 hostname: reg.westos.org #域名要和刚才生成认证的域名保持一致 17 certificate: /data/certs/westos.org.crt #证书的位置 18 private_key: /data/certs/westos.org.key #key的位置 34 harbor_admin_password: westos
mkdir /data
cd
ls
mv certs/ /data/ ##移动原来创建的证书
cd /data/crets/
ls
cd harbor/
ls
./install.sh ##启动脚本失败需要安装docker-compose
file docker-compose-linux-x86_64-v2.2.3 ##查看版本信息
mv docker-compose-linux-x86_64-v2.2.3 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose ##给执行权限
which docker-compose
docker-compose ##运行
cd harbor/
ls
./install.sh ##启动脚本成功, ##会自动生成docker-compose文件【此命令必须和docker-compose.yml保持在同一目录】ls
docker-compose ps ##执行的时候是从docker-compose.yml文件里加载信息的【有9个容器】docker ps
netstat -antlp
docker images #可以看到启动容器导入的镜像
网页:访问172.25.254.1 #访问80时做了端口映射,【仓库监听的是本机的80,且访问80会自动重定向到443】
网页中library是默认项目,存在library项目里的镜像在拉取的时候直接指向镜像名
开启docker2 :
cd /etc/yum.repos.d/
ls
scp Centos-7.repo docker-ce.repo root@172.25.254.2:/etc/yum.repos.d/ ##软件仓库传过去为了安装docker
cd /etc/sysctl.d/
ls
scp docker.conf root@172.25.254.2:/etc/sysctl.d/ ##传输文件为了修改内核选项
docker2上安装
yum install -y docker-ce
sysctl --system #生效
systemctl start docker #启动
systemctl enable docker #设置开机自起
docker info
vim /etc/hosts
#给docker1添加解析:reg.westos.org
docker info ##可以看到docker 信息说明安装成功
vim /etc/hosts
docker images
docker rmi reg.westos.org/game2048:latest
docker rmi reg.westos.org/nginx:latest
docker tag busybox:latest reg.westos.org/library/busybox:latest
docker tag nginx:latest reg.westos.org/library/nginx:latest
docker push reg.westos.org/library/nginx:latest ##上传镜像docker push reg.westos.org/library/busybox:latest
cd /etc/docker/
ls
scp -r certs.d/ root@172.25.254.2:/etc/docker/ ##传输证书文件
ls
cat daemon.json
scp daemon.json root@172.25.254.2:/etc/docker/ ##写有仓库信息的文件
docker1上删除 原来的镜像
网页中:刷新可以看到在library项目里可以看到刚刚上传的镜像
docker pull reg.westos.org/library/nginx:latest
docker pull reg.westos.org/library/busybox:latest
docker images
vim daemon.json
#修改为:https://reg.westos.org/ #指定私有仓库
systemctl daemon-reload
systemctl restart docker
docker info ##查看是否生效
docker images
docker rmi reg.westos.org/library/busybox:latest ##删除刚才的拉取的镜像
docker rmi reg.westos.org/library/nginx:latest
docker images
docker pull nginx ##此时直接从私有仓库中拉取,速度较快
docker images
可以看到拉取的日志信息
2、harbor 功能
安装添加内容签名和扫描
cd harbor/
ls
docker-compose stop ##停止【docker-compose整体停止】
docker ps -a
docker ps
docker-compose down ##关闭容器
docker ps -a
docker network ls ##查看网络
docker volume ls ##查看卷
ls
./install.sh --help./install.sh --with-notary --with-trivy --with-chartmuseum
##加上内容信任,扫描器和helm仓库重新安装
docker-compose ps ##可以看到开了较多容器
可以看到以前上传的镜像都是没有经过扫描的,可以对已经上传的镜像进行扫描:
可以看到正在扫描:
扫描出来很多漏洞
内容信任---镜像签名
可以看到刚上传的内容是没有签名的,接下来就进行harbor内容信任的配置:
打开项目内容信任功能即不允许没有签名的镜像上传下载。
在docker2中拉取镜像失败
拉取失败
内容信任的服务端口是4443,
cd .docker/
ls
部署根证书:
mkdir -p tls/reg.westos.org:4443 ##建立目录
cd tls/
ls
cd reg.westos.org:4443
cp /data/certs/westos.org.crt ca.crt
启动docker内容信任
export DOCKER_CONTENT_TRUST=1
export DOCKER_CONTENT_TRUST_SERVER=https://reg.westos.org:4443
docker push reg.westos.org/library/nginx:latest #在上传的时候一定要加标签,因为内容信任是通过标签判断的
docker images nginx
docker tag nginx:1.18.0 reg.westos.org/library/nginx:1.18.0
docker push reg.westos.org/library/nginx:1.18.0
需要给两个密码,跟key传的是nginx镜像,标签改了没有关系,镜像本身不改没有关系。【镜像名不发生改变不用输入根key】
网页:进入library可以看到已经签名
docker2中:拉取带有标签的镜像成功
docker pull nginx:1.18.0 #拉取时速度很快【从仓库匿名拉取】
可以看到拉取日志信息
helm charts需要上传chart包,类似于yum软件包
cd /data/
cd trivy-adapter/
ls
cd trivy/
cd db/
ls
pwd
du -h trivy.db #扫描完后查看大小
网页扫描busybox
建立一个私有仓库
取消内容信任
unset DOCKER_CONTENT_TRUST
export
上传镜像到私有仓库
docker tag yakexi007/game2048:latest reg.westos.org/westos/game2048:latest
docker push reg.westos.org/westos/game2048:latest
看到上传成功
在docker2中拉取镜像不能认证
新建一个用户
进入projects --> westos--> menbers-->+ user为维护人员
登陆域名拉取成功