一.什么是仓库
??????? Docker 仓库是用来包含镜像的位置,Docker提供一个注册服务器(Register)来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像。
??????? Docker运行中使用的默认仓库是 Docker Hub 公共仓库。
二、Docker Hub
docker hub是docker公司维护的公共仓库,用户可以免费使用,也可以购买私有仓库。
https://hub.docker.com 可以去注册一个!再看它的官方文档去了解了解。
三、本地仓库搭建及其Registry 工作原理
1.先清理之前的实验
?docker image prune ?docker container prune
?
2.搭建仓库
(1)下载registry镜像
?(2)运行registry容器并开放5000端口
?docker run -d --name registry -p 5000:5000 registry???
#启动本地仓库,端口映射为5000
?(3)仓库作用:先上传镜像到本地仓库 (本地镜像在命名时需要加上仓库的ip和端口)
先查看有哪些镜像
docker tag ubuntu:latest localhost:5000/ubuntu:latest
?docker push localhost:5000/ubuntu 上传
上传成功后本地路径中也产生了文件 删除之后,重新加载,之前的内容依然存在
?
?docker rmi localhost:5000/ubuntu:latest ?? 10? docker tag ubuntu:latest localhost:5000/ubuntu:latest ?? 11?? docker push localhost:5000/ubuntu? 此处会报错
?
?
?
可以看到成功了,但是这个库目前任何人都可以访问,不安全,下面我们要增加库的安全性
3、为仓库添加证书加密功能
(1)安装必要软件
先把registy停掉
docker stop registry registry [root@server4 ~]#? docker rm registry registry
要安装的软件原位置:lftp 172.25.254.111:/pub/docs/docker> mirror openssl11/
进入目录,直接?yum install? -y *
?
?(2)生成密钥
????? 首先,做到这里时出现过由于ssl版本太低的问题,这是因为执行opsenssl那个命令的时候,没有用最新版,解决办法就是删掉registry,再从mkdir certs开始做起,下面的内容是经过改进后,直接用最新版ssl的步骤。记得删掉原来的文件
创建一个目录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
接着是添加一些信息
结束后certs里会有文件
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
运行docker容器????? -v表示挂载
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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
标记重命名nginx并归类到本地reg.westos.org仓库中 然后上传容器: docker tag nginx:latest reg.westos.org/nginx:latest docker push reg.westos.org/nginx:latest
此时发现上传容器的时候,报错了,如下图的错误,
?
解决办法: ?mkdir -p /etc/docker/certs.d/reg.westos.org cp /root/certs/westos.org.crt /etc/docker/certs.d/reg.westos.org/ca.crt
重新标记上传 docker push reg.westos.org/nginx:latest
?
4.添加认证功能
创建认证目录并进入?? mkdir auth 需要安装认证的软件??? yum install -y httpd-tools-2.4.6-88.el7.x86_64
?
为用户admin和cyy添加密码
?htpasswd -Bc auth/htpasswd admin ? htpasswd -B auth/htpasswd cyy
?
?删除之前的仓库信息registry,docker rm -f registry
运行容器并查看进程!
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 -v "$(pwd)"/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -p 443:443 registry
?测试:docker push reg.westos.org/nginx:latest??? 上传文件,有报错,因为没有登陆
解决办法:登陆
docker login reg.westos.org
显示登陆成功后,就可以上传了
?
信息都在? /root/.docker/config.json 登陆信息都在这 下次不需要在登陆
一劳永逸,不需要传一次登一次
除非执行了logout
?
|