docker虽然有公共的镜像管理hub,但是我们在日常的使用中,由于不同的业务场景,不同的架构,公共的镜像库不能满足需求,并且出于安全考虑,会搭建私有的docker hub镜像库来管理自己的images,今天我们主要学习的就是搭建私有的images库。

其实搭建私有仓库很简单,只需要下载并运行一个容器就可以了:

#docker pull registry
#docker images

运行这个images启动一个容器:

#docker run -dit -p 5000:5000 -v /opt/data/registry/:/tmp/registry registry

默认的端口是5000,需要吧端口映射到宿主机。

默认的镜像存储容器的/tmp/registry,如果删除了容器,则上传的镜像也会删除,所以为了安全,将目录映射到宿主机。

-v 参数:映射目录到宿主机

#docker ps

接下来我们就找一个images上传上去吧:

#docker pull tomcat:7

下载一个tomcat7

要在本地仓库上传镜像,首先需要标记一个镜像,以下标记tomcat这个镜像:

#docker tag tomcat:7 10.30.234.212:5000/tomcat

然后进行上传:

首次上传会出现以下错误:

Get https://192.168.1.23:5000/v2/: http: server gave HTTP response

出现上面错误的原因分析:

因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。
为了解决这个问题需要在启动docker server时增加启动参数为默认使用http访问。
目前很多文章都是通过修改docker的配置文件“etc/systemconfig/docker",重启docker来解决这个问题。

但发现docker1.12.3版本并无此文件,根据网上创建此文件,并填入相应内容,重启docker无效果,仍然报此错误。

解决方法:
在”/etc/docker/“目录下,创建”daemon.json“文件。在文件中写入:

{ "insecure-registries":["192.168.1.23:5000"] }
#restart docker
#docker start 366c3c5fe1ea #registry容
#docker push  10.30.234.212:5000/tomcat

这样就可以上传成功了,然后我们来查看一下我们上传的images:

查看上传images的log:

#curl http://192.168.1.23:5000/v2/_catalog
{"repositories":["tomcat"]

查看tags:

#curl http://10.30.234.212:5000/v2/tomcat/tags/list
{"name":"tomcat","tags":["latest"]

然后我们查看本地的images会发现有已经下载的tomcat,我们把这个都删除掉,测试一下从本地私有镜像库拉取images:

#docker images

我们把上面两个都删除掉:

#docker rmi 10.30.234.212:5000/tomcat
#docker rmi tomcat:7
#docker image

已经没有tomcat了,接下来我们从私有库下载一个tomcat:

#docker pull 10.30.234.212:5000/tomcat
#docker image

也可以在局域网或者能访问到私有镜像地址的其他机器上来远程拉取镜像,需要注意https那个问题,如果遇到,还是需要配置/etc/docker/下面的daemon.json文件。

私有仓库中上传的images是不支持删除的,需要使用第三方插件来删除:

插件地址:

插件github上的位置:
https://github.com/burnettk/delete-docker-registry-image
#curl https://raw.githubusercontent.com/burnettk/delete-docker-registry-image/master/delete_docker_registry_image.py | sudo tee /usr/local/bin/delete_docker_registry_image >/dev/null
#sudo chmod a+x /usr/local/bin/delete_docker_registry_image

设置images库的路径:

查找路径:

#find / -name registry
root@iZuf606noo6islit6xfcq6Z:/usr/local/bin# find / -name registry
/var/lib/docker/volumes/9d875af73ca50c226e8ff3c0cbb52d126ca59cf03381a7830b9d9de7335eb579/_data/docker/registry
/var/lib/docker/volumes/a96c269acc4a365a98823fba6cf11254ecda7787567373b19b2b9b1cc6c36765/_data/docker/registry
/var/lib/docker/overlay2/f1ecdc6224c9fce2b725b1e1dc4e9e6e234afb49e0ed29aa14e420b7a5158193/diff/var/lib/ucf/registry
/var/lib/docker/overlay2/e2984582e55abb4c80d86225eb2ce5187de206c035d49d2c10b7dd537de445be/diff/var/lib/ucf/registry
/var/lib/docker/overlay2/84e5da2816ddfdc7b1d2e5e25d1c516dfc468e8135b25ff2c1a60ea3eb16e0cf/diff/var/lib/ucf/registry
/var/lib/docker/overlay2/d8559fc483ba2956dc6965589e9dbb00259cfbbdc22670428d8e1a8fd78e01d3/diff/bin/registry
/var/lib/docker/overlay2/8185a14e7a67927ddfe51ecc7a33e79a1d162075f34fa2b2d7c238fc71d9d3ab/diff/var/lib/ucf/registry
/var/lib/docker/overlay2/298233ae749cdbf0e7373f88b7374ff158c9e65e79b982fd863c5c60b21a2f40/diff/var/lib/ucf/registry
/var/lib/docker/overlay2/8a6c0d5788cba5d14c85dcea54f4a21713474bf19bf8b213e7d1ac7b3ef5cd2b/diff/tmp/registry
/var/lib/docker/overlay2/8a6c0d5788cba5d14c85dcea54f4a21713474bf19bf8b213e7d1ac7b3ef5cd2b/diff/var/lib/registry
/var/lib/docker/overlay2/8a6c0d5788cba5d14c85dcea54f4a21713474bf19bf8b213e7d1ac7b3ef5cd2b/merged/bin/registry
/var/lib/docker/overlay2/8a6c0d5788cba5d14c85dcea54f4a21713474bf19bf8b213e7d1ac7b3ef5cd2b/merged/tmp/registry
/var/lib/docker/overlay2/8a6c0d5788cba5d14c85dcea54f4a21713474bf19bf8b213e7d1ac7b3ef5cd2b/merged/var/lib/registry
/var/lib/docker/overlay2/8a6c0d5788cba5d14c85dcea54f4a21713474bf19bf8b213e7d1ac7b3ef5cd2b/merged/etc/docker/registry
/var/lib/docker/overlay2/8cec4dd19bf9c878ac8d9a60f46140bc279815dee2a28a83d3917092a7c356ac/diff/etc/docker/registry
/var/lib/ucf/registry
/opt/data/registry

使用这个路径来声明环境变量:/var/lib/docker/volumes/9d875af73ca50c226e8ff3c0cbb52d126ca59cf03381a7830b9d9de7335eb579/_data/docker/registry

#cd /var/lib/docker/volumes/9d875af73ca50c226e8ff3c0cbb52d126ca59cf03381a7830b9d9de7335eb579/_data/docker/registry
#export REGISTRY_DATA_DIR=/var/lib/docker/volumes/9d875af73ca50c226e8ff3c0cbb52d126ca59cf03381a7830b9d9de7335eb579/_data/docker/registry/v2

先看一下我们的私有仓库有哪些images:

#curl http://192.168.1.23:5000/v2/tomcat/tags/list
{"name":"tomcat","tags":["latest"]

只有一个,删除这个images:

#delete_docker_registry_image --image tomcat:latest

在看一下:

#curl http://192.168.1.23:5000/v2/tomcat/tags/list
{"errors":[{"code":"NAME_UNKNOWN","message":"repository name not known to registry","detail":{"name":"tomcat"}}]

已经删除,查不到了。

本次关于私有仓库的学习就到这里。

ubuntu-docker入门到放弃(三)images镜像管理的更多相关文章

  1. Docker入门教程(三)Dockerfile

    Docker入门教程(三)Dockerfile [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第三篇,介绍了Dockerfile的语法,DockerOn ...

  2. docker第三篇 镜像管理基础

    docker 工作原理: 常用的命令docker run .create .start... 都是客户端命令 Docker Daemon 接收到客户端传过来的命令以后 docker daemon会根据 ...

  3. docker入门到放弃

    1.容器简介 Docker是一个开源的应用容器引擎,使用Go语言开发,基于Linux内核的cgroup,namespace,Union FS等技术,对应用进程进行封装隔离,并且独立于宿主机与其他进程, ...

  4. Kafka从入门到放弃(三) —— 详说生产者

    上一篇对Kafka做了简单介绍,还没看的朋友可以点击下方链接. Kafka从入门到放弃(一) -- 初识别Kafka 消息中间件必须与生产者和消费者一起存在才有意义,这次先来聊聊Kafka的生产者. ...

  5. hive从入门到放弃(三)——DML数据操作

    上一篇给大家介绍了 hive 的 DDL 数据定义语言,这篇来介绍一下 DML 数据操作语言. 没看过的可以点击跳转阅读: hive从入门到放弃(一)--初识hive hive从入门到放弃(二)--D ...

  6. Docker系统四:Dcoker的镜像管理

    1. Dcoker镜像初识 $ docker images -a //查看当前所有镜像 REPOSITORY TAG IMAGE ID CREATED SIZE cptactionhank/atlas ...

  7. Docker私有仓库 Registry中的镜像管理

    这里主要介绍Registry v2的版本 查看Registry仓库中现有的镜像: # curl -XGET http://10.0.30.6:5000/v2/_catalog# curl -XGET ...

  8. Docker入门篇(三)之docker-compose单机编排

    1.docker-compose的简介 docker-compose作为dokcer的官方编排工具,它可以让用户通过编写一个简单的模板文件,快速地创建和管理基于docker容器的应用集群.实现对doc ...

  9. Docker入门3------手动编辑自定义镜像

    手动编辑自定义镜像 查看本地现有镜像: 基于centos创建一个,会自动下载centos最新原始镜像 docker run -it --name=web centos /bin/bash 然后在容器内 ...

  10. docker入门小结(三)

    本次笔记主要记录教程中的几个实战案例的实际情况 1,使用supervisor管理进程 忘了截图了,就不写了.教程中写的比较清楚. 但是注意,如果刚刚学习了上一章的网络配置,需要将网络的forward打 ...

随机推荐

  1. 大数据-06-Spark之读写Hive数据

    简介 Hive中的表是纯逻辑表,就只是表的定义等,即表的元数据.Hive本身不存储数据,它完全依赖HDFS和MapReduce.这样就可以将结构化的数据文件映射为为一张数据库表,并提供完整的SQL查询 ...

  2. Buildroot stress-ng Linux系统压力测试

    /********************************************************************** * Buildroot stress-ng Linux系 ...

  3. elfutils cc1: all warnings being treated as errors

    /********************************************************************** * elfutils cc1: all warnings ...

  4. Python3中的运算符

    一.Python3中的运算符 强调这是Python3中的运算符 +    加法 -     减法 *     乘法 /     除法 //    整除,只要整数部分 **   幂运算 %   取余数 ...

  5. 百练-16年9月推免-C题-图像旋转

    C:图像旋转 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 输入一个n行m列的黑白图像,将它顺时针旋转90度后输出. 输入 第一行包含两个整数n和m,表示图 ...

  6. tinyxml2使用

    项目中遇到一个问题,C/C++需要与JAVA通信,JAVA方已经使用了XML序列化传输.本可以考虑JSON/GOOGLE PROTOCOL BUFFER的,但为了使JAVA方不做过多改动,坚持使用XM ...

  7. UE4开发安卓遇到的坑

    做个记录,方便以后自己查询. 1.  打包后,应用出现缺乏google key的问题. 理论上,这个网站可以解决:https://wiki.unrealengine.com/How_To_Sign_U ...

  8. Ubuntu18.10下运行blender2.80bate闪退(问题?)

    Ubuntu18.10下直接运行blender2.80bate闪退, 运行blender2.79正常. ================= root@tom-laptop:/# uname -aLin ...

  9. C++学习(十五)(C语言部分)之 数组二

    数组大纲 多维数组 二维数组 重点 (三位以上基本不会用到) 都是用来存数据 一个班有20个人 可以用一维数组存20个人的年龄 int age[20]; 一个年级10个班 每个班20人 int age ...

  10. 20165313 预备作业3 Linux安装及学习

    虚拟机安装 刚开始我觉得既然有了教程,安装虚拟机应该是很简单的事情,然而由于电脑本身系统地地问题,导致我数次安装失败,后来咨询了老师并查阅了资料,最终才安装好. 其中最主要的问题就是电脑虚拟化的修改. ...