一.什么是仓库
Docker 仓库是用来包含镜像的位置,Docker提供一个注册服务器(Register)来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像。
Docker运行中使用的默认仓库是 Docker Hub 公共仓库。
二、Docker Hub
docker hub是docker公司维护的公共仓库,用户可以免费使用,也可以购买私有仓库。
https://hub.docker.com 可以去注册一个!再看它的官方文档去了解了解。
三、本地仓库搭建及其Registry 工作原理
1.先清理之前的实验
[root@server1 ~]# docker images | grep webserver | awk '{system("docker rmi "$1":"$2"")}'
[root@server1 ~]# docker ps -a
[root@server1 ~]# docker images
2.搭建本地仓库
(1)下载registry镜像
(2)运行registry容器并开放5000端口
docker run -d --name registry -p 5000:5000 registry ##启动本地仓库,端口映射为5000
(3)仓库作用:先上传镜像到本地仓库(本地镜像在命名时需要加上仓库的ip和端口)
[root@server1 ~]# docker tag busybox:latest localhost:5000/busybox:latest
[root@server1 ~]# docker push localhost:5000/busybox:latest 上传
上传成功后本地路径中也产生了文件,
删除之后,重新加载,之前的内容依然存在
3.Registry 工作原理
一次docker pull 或 push 背后发生的事情:
index服务主要提供镜像索引以及用户认证的功能。当下载一个镜像的时候,首先会去index服务上做认证,然后查找镜像所在的registry的地址并放回给docker客户端,docker客户端再从registy下载镜像,在下载过程中 registhy会去index校验客户端token的合法性,不同镜像可以保存在不同的registy服务上,其索引信息都放在index服务上。
Docker Registry有三个角色,分别是index、registry和registryclient.
Web UI、元数据存储、认证服务、符号化。
用户要获取并下载镜像:
用户要上传镜像到registry中:
用户要从index或registry中删除镜像
4. 配置docker镜像加速器
注册阿里云帐号。
登陆之后, 产品与服务—>容器镜像服务—>镜像加速器
使用阿里云的加速器:
[root@server1 ~]# cd /etc/docker/
[root@server1 docker]# ls
key.json
[root@server1 docker]# vim daemon.json 编辑镜像加速器配置
[root@server1 docker]# cat daemon.json
{
"registry-mirrors": ["https://qjjesv8p.mirror.aliyuncs.com"]
}
[root@server1 docker]#
[root@server1 docker]# systemctl daemon-reload
[root@server1 docker]# systemctl restart docker
[root@server1 docker]# docker info
[root@server1 docker]# docker ps
[root@server1 docker]# docker ps -a
[root@server1 docker]# cd
[root@server1 ~]# docker pull mysql
[root@server1 ~]# docker images
将mysql镜像删除,然后使用docker官方的加速器:
[root@server1 ~]# cd -
/etc/docker
[root@server1 docker]# ls
daemon.json key.json
[root@server1 docker]# cat daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
[root@server1 docker]# systemctl daemon-reload
[root@server1 docker]# systemctl restart docker
[root@server1 docker]# docker info
[root@server1 docker]# cd
[root@server1 ~]# docker pull mysql
5.搭建私有仓库
[root@server1 ~]# ls
anaconda-screenshots docker openssl11-libs-1.1.1g-3.el7.x86_64.rpm
base-debian10.tar openssl11-1.1.1g-3.el7.x86_64.rpm
[root@server1 ~]# yum install openssl11-1.1.1g-3.el7.x86_64.rpm openssl11-libs-1.1.1g-3.el7.x86_64.rpm
[root@server1 ~]# mkdir certs
[root@server1 ~]# ls
anaconda-screenshots certs openssl11-1.1.1g-3.el7.x86_64.rpm
base-debian10.tar docker openssl11-libs-1.1.1g-3.el7.x86_64.rpm
[root@server1 ~]# 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
[root@server1 ~]# docker run -d --restart=always --name registry -v /root/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGIDTRY_HTTP_TLS_CERTIFICATE=/certs/westos.org.crt -e REGISTRY_HTTP_TLS_KEY=/certs/westos.org.key -p 443:443 registry
283a5253fbd5e92bf99953630e763c50ce80b7d4a95efb50e9e4f6b61c894c9b
[root@server1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
283a5253fbd5 registry "/entrypoint.sh /etc…" 8 seconds ago Up 7 seconds 0.0.0.0:443->443/tcp, :::443->443/tcp, 5000/tcp registry
[root@server1 ~]# vim /etc/hosts
[root@server1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost:5000/busybox latest beae173ccac6 5 days ago 1.24MB
mysql latest 3218b38490ce 2 weeks ago 516MB
registry latest b8604a3fe854 7 weeks ago 26.2MB
centos latest 5d0da3dc9764 3 months ago 231MB
nginx 1.18 c2c45d506085 8 months ago 133MB
yakexi007/game2048 latest 19299002fdbe 5 years ago 55.5MB
yakexi007/mario latest 9a35a9e43e8c 6 years ago 198MB
gcr.io/distroless/base-debian10 latest d48fcdd54946 52 years ago 19.2MB
[root@server1 ~]# docker tag localhost:5000/busybox:latest reg.westos.org/busybox:latest
[root@server1 ~]# docker push reg.westos.org/busybox:latest ##上传失败
[root@server1 ~]# cd /etc/docker/
[root@server1 docker]# ls
daemon.json key.json
[root@server1 docker]# mkdir certs.d
[root@server1 docker]# ls
certs.d daemon.json key.json
[root@server1 docker]# cd certs.d/
[root@server1 certs.d]# mkdir reg.westos.org
[root@server1 certs.d]# cd reg.westos.org/
[root@server1 reg.westos.org]# cp /root/certs/westos.org.crt ca.crt
[root@server1 reg.westos.org]# ls
ca.crt
[root@server1 reg.westos.org]# pwd
/etc/docker/certs.d/reg.westos.org
[root@server1 reg.westos.org]# cd
[root@server1 ~]# docker push reg.westos.org/busybox:latest
[root@server1 ~]# mkdir auth
[root@server1 ~]# yum install -y httpd-tools
[root@server1 ~]# htpasswd -cB auth/htpasswd admin
New password:
Re-type new password:
Adding password for user admin
[root@server1 ~]# cat auth/htpasswd
admin:$2y$05$DOHbuVGTTS/iMhRq9xBT9uNQd.0m6HqoOwr82qwGvIiPEyAVivx9S
[root@server1 ~]# htpasswd -B auth/htpasswd gyy
New password:
Re-type new password:
Adding password for user gyy
[root@server1 ~]# cat auth/htpasswd
admin:$2y$05$DOHbuVGTTS/iMhRq9xBT9uNQd.0m6HqoOwr82qwGvIiPEyAVivx9S
gyy:$2y$05$PI.LrvlfgP4laHopOlJLoe6XsBPdht6/v5Xmax4AIwTVkT5MI0Wom
[root@server1 ~]# docker rm -f registry
registry
[root@server1 ~]#
[root@server1 ~]# docker run -d --restart=always --name registry -v /root/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 -v /root/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry
[root@server1 ~]# docker ps
[root@server1 ~]# docker images
[root@server1 ~]# docker volume ls
清除没有在使用的卷:
[root@server1 ~]# docker push reg.westos.org/busybox:latest ##没有认证
[root@server1 ~]# docker login reg.westos.org
[root@server1 ~]# docker push reg.westos.org/busybox:latest ##再次上传
[root@server1 ~]# curl -u admin:westos -k https://reg.westos.org/v2/_catalog ##查看是否上传成功
四、 docker-harbor仓库
先把旧的registry删除
[root@server1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2d26479b98f3 registry "/entrypoint.sh /etc…" 31 minutes ago Up 31 minutes 0.0.0.0:443->443/tcp, :::443->443/tcp, 5000/tcp registry
[root@server1 ~]# docker rm -f registry
1.软件包
docker-compose-linux-x86_64-v2.0.1
harbor-offline-installer-v2.3.4.tgz
[root@server1 ~]# mv docker-compose-linux-x86_64-v2.0.1 /usr/local/bin/docker-compose
[root@server1 ~]# chmod +x /usr/local/bin/docker-compose
[root@server1 ~]# tar zxf harbor-offline-installer-v2.3.4.tgz
[root@server1 ~]# cd harbor/
[root@server1 harbor]# ls
[root@server1 harbor]# cp harbor.yml.tmpl harbor.yml
[root@server1 harbor]# vim harbor.yml
hostname: reg.westos.org
certificate: /data/certs/westos.org.crt
private_key: /data/certs/westos.org.key
harbor_admin_password: westos
[root@server1 harbor]# mkdir /data
[root@server1 harbor]# cd
[root@server1 ~]# mv certs/ /data/
[root@server1 ~]# cd /data/
[root@server1 data]# ls
certs
[root@server1 data]# cd certs/
[root@server1 certs]# ls
westos.org.crt westos.org.key
[root@server1 certs]#
2.修改配置信息
[root@server1 harbor]# vim harbor.yml
hostname: reg.westos.org
certificate: /data/certs/westos.org.crt
private_key: /data/certs/westos.org.key
harbor_admin_password: westos
3.安装
[root@server1 ~]# cd harbor/
[root@server1 harbor]# ls
common.sh harbor.v2.3.4.tar.gz harbor.yml harbor.yml.tmpl install.sh LICENSE prepare
[root@server1 harbor]# ./install.sh ##出错
[root@server1 harbor]# netstat -antlp ##查看端口
查看当前正在运行的进程:
查看镜像:
[root@server1 harbor]# docker-compose ps ##docker-compose必须在harbor目录下运行
4.登陆网页
访问https://172.25.52.1/ ——>登陆
5. 获取认证
docker logout reg.westos.org ##退出之前的认证
docker login reg.westos.org
Username: admin
Password:
是登陆web页面的账号密码。
[root@server1 ~]# docker tag reg.westos.org/busybox:latest reg.westos.org/library/busybox:latest
[root@server1 ~]# cat auth/htpasswd
admin:$2y$05$DOHbuVGTTS/iMhRq9xBT9uNQd.0m6HqoOwr82qwGvIiPEyAVivx9S
gyy:$2y$05$PI.LrvlfgP4laHopOlJLoe6XsBPdht6/v5Xmax4AIwTVkT5MI0Wom
[root@server1 ~]# docker logout reg.westos.org ##退出之前的认证
Removing login credentials for reg.westos.org
[root@server1 ~]# cd docker/
[root@server1 docker]# ls
CentOS-Base.repo Dockerfile Dockerfile.old index.html nginx-1.20.2.tar.gz
[root@server1 docker]# cd
[root@server1 ~]# cd .docker/
[root@server1 .docker]# ls
config.json
[root@server1 .docker]# cat config.json
[root@server1 .docker]# docker login reg.westos.org ##重新进行认证
[root@server1 .docker]# cd
[root@server1 ~]# docker push reg.westos.org/library/busybox:latest ##上传
再次上传一个nginx镜像:
在前端访问:https://172.25.52.1
项目——>library——>镜像仓库
可以在日志中查看上传和下载信息等
6.添加默认仓库路径(客户端)
首先需要在server2中下载安装docker-ce,然后进行配置
[root@server2 ~]# cd /etc/yum.repos.d/
[root@server2 yum.repos.d]# ls
Centos-Base.repo docker-ce.repo dvd.repo redhat.repo
[root@server2 yum.repos.d]# yum install -y docker-ce
[root@server2 yum.repos.d]# sysctl --system
[root@server2 yum.repos.d]# systemctl enable --now docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@server2 yum.repos.d]# docker info
在server1中:
[root@server1 sysctl.d]# cd /etc/docker/
[root@server1 docker]# ls
certs.d daemon.json key.json
[root@server1 docker]# scp -r certs.d/ server2:/etc/docker/
[root@server1 docker]# scp -r daemon.json server2:/etc/docker/
添加默认仓库路径
docker info 查看到新的添加的镜像路径
测试:
[root@server2 docker]# docker pull busybox ##拉取镜像
[root@server2 docker]# docker pull nginx:1.18
可以在日志中看到
7.重新下载配置
[root@server1 ~]# cd harbor/
[root@server1 harbor]# docker-compose stop
[root@server1 harbor]# docker-compose down
[root@server1 harbor]# ./install.sh --with-notary --with-trivy --with-chartmuseum
内容信任 ,镜像扫描
相当于:配置中加入了漏洞扫描,内容信任等选项。 在打开的网页中选择漏洞扫描
这里主要是作为后期的优化
进行镜像扫描:
扫描后的镜像如下图:
当扫描之后没有漏洞就可以进行签名(上图中的nginx镜像为1.18版本,版本过旧有漏洞)
启用docker内容信任,网页选择内容信任
部署根证书:
mkdir ~/.docker/tls/reg.westos.org:4443 -p
cd ~/.docker/tls/reg.westos.org:4443
cp /etc/docker/certs.d/reg.westos.org/ca.crt .
启用docker内容信任:
export DOCKER_CONTENT_TRUST=1
export DOCKER_CONTENT_TRUST_SERVER=https://reg.westos.org:4443
上传之前上传的镜像:
[root@server1 ~]# docker push reg.westos.org/library/nginx:1.18
显示已经存在,需要我们输入root key和 repository key 当我们只修改标签的时候,我们只用输入repository key
密码 westos007
在前端访问查看签名:
[root@server1 ~]# docker tag nginx:latest reg.westos.org/library/nginx:latest
[root@server1 ~]# docker push reg.westos.org/library/nginx:latest ##只修改标签,只用输入repository key
网页访问,签名成功
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)