docker搭建私有仓库笔记
为什么80%的码农都做不了架构师?>>>
安装之前需要docker环境,安装docker环境参考:http://www.runoob.com/docker/centos-docker-install.html
10.138.60.136:5000是私有仓库的地址
1、私有仓库也是通过docker来实现的,所以需要拉取一个仓库镜像
docker pull registry
2、将该镜像运行起来成为一个容器,执行下面命令,复制命令粘贴一直报错,得手工敲进去才行。
docker run -d -p 5000:5000 -v /home/lwt/registry:/var/lib/registry --restart=always --privileged=true registry
-p 5000:5000 端口映射,前面是主机的端口号,后面是容器的端口号
-d 指明是后台运行容器
-v /home/lwt/registry:/var/lib/registry registry 将仓库存放于容器内的/tmp/registry目录下,将本地目录/home/hzq/registry挂载到容器,可以防止容器意外停止后镜像的丢失。
--restart=always 在容器退出时总是重启容器,主要应用在生产环境
--privileged=true 在CentOS7中的安全模块selinux把权限禁掉了,参数给容器加特权,不加上传镜像会报权限错误:OSError: [Errno 13] Permission denied或者(Received unexpected HTTP status: 500 Internal Server Error)错误
到这里仓库就搭建完成了,接下来就打包一个镜像搞上去看看吧。
首先给这个镜像添加一个带有私有仓库IP的TAG,这样后面才能成功推送到私有仓库,我服务器上就有一个叫dockertest的镜像文件。
所以先执行下面命令给这个镜像打上标记,我这里都没有加版本号,默认就是latest,如果是生产环境最好打上版本号,进行回退版本也会很方便,我这里都没有加版本号,版本号格式为10.138.60.136:5000/dockertest:1.0
docker tag 044ddfc1fe00 10.138.60.136:5000/dockertest
然后在将这个镜像推送到搭建的私有仓库去,然后你会发现出来一个问题。
docker push 10.138.60.136:5000/dockertest
错误信息:Get https://10.138.60.136:5000/v1/_ping: http: server gave HTTP response to HTTPS client
这个问题需要你在/etc/docker/daemon.json文件中添加一段配置信息,注意,注意,注意,因为之前配置过镜像加速节点,格式需要注意,地一个图片也就是我一开始写的,是错误的,需要写在一起。第二张图片的格式。
{ "insecure-registries":["10.138.60.136:5000"] }
然后重新启动下
systemctl daemon-reload
systemctl restart docker
然后重新push,你会发现成功了。
然后浏览器打开仓库:http://10.138.60.136:5000/v2/_catalog,完工。
来练习下从私有仓库拉取镜像吧,首先将我原本打标记的镜像删除,docker rmi 镜像id,然后你会发现报错。
Error response from daemon: conflict: unable to delete 044ddfc1fe00 (must be forced) - image is referenced in multiple repositories
意思是说,镜像有其余引用,这个时候你会发现,你打标签的镜像的ID和你原始的镜像ID是相同的。
所以你删除的其实是原始镜像,所以出现这个问题,这个时候我们根据镜像名来删除即可。
拉取私有仓库镜像很简单:docker pull 10.138.60.136:5000/dockertest
接下来删除私有仓库的镜像笔记
首先查看仓库中的景象已经tag(其实就是版本),在浏览器输入下面的地址,我的镜像就叫dockertest
http://10.138.60.136:5000/v2/dockertest/tags/list
删除仓库私有镜像需要先将配置文件调整一下,启用删除功能。
首先进入私有仓库的容器内部:docker exec -it c8aa1a12db2c /bin/sh
然后查看仓库环境的配置文件:cat /etc/docker/registry/config.yml
然后添加一个可以进行删除的节点:sed -i '/storage:/a\ delete:' /etc/docker/registry/config.yml
添加完成,我们在看看配置文件成什么样子了,多了个delete标签,但是没有值。
然后我们给这个标签添加一个值:sed -i '/delete:/a\ enabled: true' /etc/docker/registry/config.yml
好,到这里配置就算是完成了,然后退出容器重新启动下
docker restart c8aa1a12db2c
想要删除,需要一个digest的东西,但是这个东西需要添加一个http请求头Accept:application/vnd.docker.distribution.manifest.v2+json,所以命令如下,其中Docker-Content-Digest就是需要的内容。
curl --header "Accept:application/vnd.docker.distribution.manifest.v2+json" -I -XGET 10.138.60.136:5000/v2/dockertest/manifests/latest
然后我们开始进行删除操作
curl -XDELETE 10.138.60.136:5000/v2/dockertest/manifests/sha256:9cfeb6314649807b2230bfb5db72e6efec8be5505fb828070520849e12ed6f46
然后再去看就会发现没有了。
看似已经删除了,其实硬盘地址并没有释放。是因为docker删除image只是删除的image的元数据信息。层数据并没有删除。现在进入registry中进行垃圾回收。
进入容器:docker exec -it c8aa1a12db2c /bin/sh
切换到镜像目录:cd /var/lib/registry
查看占用空间:du -sch
启动垃圾回收:registry garbage-collect /etc/docker/registry/config.yml
查看占用空间:du -sch
第二次运行du -sch你会发现空间少了很多。
但是http://10.138.60.136:5000/v2/_catalog看这个还是会有这个东西,需要手工把这个东西给删除掉即可,但是因为挂载在宿主机上,所以可以直接删除宿主机即可,然后再看就发现这个东西已经没有了。
转载于:https://my.oschina.net/uwith/blog/1942457
docker搭建私有仓库笔记相关推荐
- Windows系统用Docker搭建私有仓库
Windows系统用Docker搭建私有仓库 一.安装Docker Desktop 二.创建私有仓库 三.验证私有仓库是否创建成功 一.安装Docker Desktop 1.1.可以在软件管家安装这个 ...
- docker搭建私有仓库
紧接上一篇镜像发布到官方之后,我们来搭建我们自己的私有仓库,比较,如果真的要在生产环境使用的话,这是必须的. 首先,我们来准备一下搭建私有仓库所需要的信息. #先吧私有仓库down下来,这需要一点时间 ...
- docker 搭建私有仓库registry (多用户)
Docker Registry v2 + Token Auth Server (Registry v2 认证) 环境:虚拟机中的centos 1,创建目录(基于/data/目录下) auth_serv ...
- docker 搭建私有仓库
https://www.cnblogs.com/lasdaybg/p/9768445.html
- Docker容器私有仓库——Harbor私有仓库的搭建
Docker容器私有仓库--Harbor私有仓库的搭建 一.Harbor介绍 1.Harbor概念 2.Harbor的核心组件 3.Harbor的优点 二.Harbor搭建的环境准备 1.当前Harb ...
- Docker入门之四搭建私有仓库
前面学习了下镜像和容器,今天来学习下仓库,来搭建本地私有仓库.当然可以使用远程的共有的仓库,但在企业中有的还是放在本地,所以需要搭建私有仓库. 一.搭建仓库 可以在容器中run一个仓库镜像. dock ...
- 【Docker】Registry搭建私有仓库、证书认证、用户登录认证
一.Docker Registry工作原理 02_Docker Registry角色 Docker Registry有三个角色,分别是index.registry和registry client. i ...
- Docker 容器仓库之搭建私有仓库、hub仓库
一.什么是仓库 Docker 仓库是用来包含镜像的位置,Docker提供一个注册服务器(Register)来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像. Docker运行中使用的默认仓库 ...
- Docker harbor私有仓库部署与管理
Docker harbor私有仓库部署与管理. 前言 一.什么是Harbor 二.Harbor的特性 三.Harbor的构成 四.Harbor部署 4.1 环境准备 4.2 部署Docker Comp ...
最新文章
- S5PV210开发 -- 通信
- java 类似xamarin_有人有基准(代码和结果)比较在Xamarin C#和Java编写的Android应用程序的性能吗?...
- 信息学奥赛一本通 2031:【例4.17】四位完全平方数
- 关于某系统的全面质量属性战术
- 2019年第二届全国大学生大数据技能竞赛通知
- R语言爬虫系列(1)XML抓取表格数据
- pytorch实现attention_Self-Attention手动推导及实现
- docker运行jenkins挂掉_docker搭建jenkins
- java google翻译api接口_java 免费调用google 谷歌翻译api
- 摄像机标定学习笔记(1)
- Android 常用颜色值及半透明效果配置
- vscode 是干什么用的_vscode是干嘛用的
- 吴伯凡-认知方法论-如何犯一个“正确”的错误
- 求2+22+222+2222+22222
- SFP光模块相关知识
- 白话 贝叶斯公式_[白话解析] 深入浅出朴素贝叶斯模型原理及应用
- Win10 解决CSDN、阿里云国内站、小米商城国内站等国内网站打不开的问题(超详细教程)
- presenting view controller
- 企业工商信息查询第三方软件/API查询原理分析
- 亮剑精神---程序人生路
热门文章
- Python将字符串转换为列表
- jdbc 数据源_Java数据源,JDBC数据源示例
- Hibernate本机SQL查询示例
- android共享元素动画_Android共享元素过渡动画
- c ++向量库_C ++中的2D向量–实用指南2D向量
- C++高级教程之多线程
- 开课吧:什么是包?如何定义包?
- ActiveMQ RabbitMQ RokcetMQ Kafka实战 消息队列中间件视频教程
- Mybatis-no getter for property named 'col_name' in 'class com.xxx.onebean'
- IPv6协议漏洞将威胁核心路由器安全