Docker仓库主要用于存放Docker镜像,Docker仓库分为公共仓库和私有仓库,基于registry可以搭建本地私有仓库,使用私有仓库的优点如下:

1)节省网络带宽,针对于每个镜像不用去Docker官网仓库下载;

2)下载Docker镜像从本地私有仓库中下载;

3)组件公司内部私有仓库,方便各部门使用,服务器管理更加统一;

4)可以基于GIT或者SVN、Jenkins更新本地Docker私有仓库镜像版本。

官方提供Docker Registry来构建本地私有仓库,目前最新版本为v2,最新版的docker已不再支持v1,Registry v2使用Go语言编写,在性能和安全性上做了很多优化,重新设计了镜像的存储格式。如下为在192.168.0.123服务器上构建Docker本地私有仓库的方法及步骤:

一、搭建本地私有仓库(无证书)

1、下载Docker registry镜像

docker pull registry

2、启动私有仓库容器

mkdir -p  /data/registry/
docker run -itd -p : -v /data/registry:/var/lib/registry --privileged docker.io/registry

3、上传镜像至本地私有仓库(可以从本地或者另一台机器上传镜像到仓库)

1)客户端上传镜像至本地私有仓库,如下以tomcat镜像为例,将tomcat上传至私有仓库服务器。

docker pull tomcat
docker tag docker.io/tomcat:latest 10.6.191.182:/tomcat:v1
docker rmi docker.io/tomcat:latest

2)客户端docker配置文件(vi /etc/sysconfig/docker)添加如下代码,同时重启docker服务,获取本地私有仓库

OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --insecure-registry 10.6.191.182:5000'
ADD_REGISTRY='--add-registry 10.6.191.182:5000'

在OPTIONS后面添加 --insecure-registry 10.6.191.182:5000解决HTTPS错误问题;

添加 ADD_REGISTRY代码将pull源修改为本地仓库地址,这时候直接 docker pull tomcal:v1(必须加上tag标签,不然将会从官网下载latest)

3)将镜像上传至本地私有仓库

docker push  10.6.191.182:/tomcat:v1

4、检测本地私有仓库

curl -XGET http://10.6.191.182:5000/v2/_catalog              查看本地私有仓库已有镜像
curl -XGET http://10.6.191.182:5000/v2/tomcat/tags/list 查看本地私有仓库镜像以及tag号

二、搭建本地私有仓库(有证书)

1、生成根证书

mkdir -p certs && openssl req -newkey rsa:2048 -nodes -sha256 -keyout certs/rootCA.key -x509 -days 1825  -out certs/rootCA.crt

2、生成证书

cd certs
openssl genrsa -out domain.key
openssl req -new -newkey rsa: -nodes -sha256 -key domain.key -out domain.csr -subj "/C=CN/ST=HB/L=WH/O=DM/OU=YPT/CN=domain"
cat >openssl-exts.conf <<EOF
extensions = san
[san]
keyUsage = digitalSignature
extendedKeyUsage = clientAuth,serverAuth
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
subjectAltName = IP:192.168.0.200,IP:127.0.0.1,DNS:192.168.0.200:,DNS:localhost,DNS:192.168.0.200
EOF
openssl x509 -req -sha256 -in domain.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out domain.crt -days -extfile ./openssl-exts.conf
rm domain.csr
rm openssl-exts.conf

3、复制根证书

mkdir -p  /etc/docker/certs.d/192.168.0.200:5000
cp certs/rootCA.crt /etc/docker/certs.d/192.168.0.200\:5000/ca.crt

4、启动镜像

docker pull registry
或者使用本地tar包
docker load -i registry_2.6.1.tar
docker tag f32a97de94e1 192.168.0.200:5000/registry:2.6.1
docker rmi docker.io/registry
mkdir -p /home/mnt/disks/registry
docker run -d -p 5000:5000 --restart=always --name secure_registry \
-v /root/registry/certs:/certs \
-v /home/mnt/disks/registry:/var/lib/registry \
-e REGISTRY_HTTP_SECRET=mytokensecret \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
192.168.0.200:5000/registry:2.6.1

5、客户端使用仓库

mkdir /etc/docker/certs.d/192.168.0.200:
scp 192.168.0.200:/etc/docker/certs.d/192.168.0.200\:/ca.crt /etc/docker/certs.d/192.168.0.200\:/

三、安装私有仓库的web界面

mkdir -p /home/mnt/disks/registry-web-db
docker load -i ./images/docker-registry-web_v0.1.2.tar
docker tag hyper/docker-registry-web:v0.1.2 192.168.0.203:/docker-registry-web:v0.1.2
docker rmi hyper/docker-registry-web:v0.1.2
docker run -itd --restart=always -e ENV_DEFAULT_TAGS_PER_PAGE= -e ENV_DEFAULT_REPOSITORIES_PER_PAGE= \
-v /home/ansible_mgr/registry/conf/registry-web.yml:/conf/config.yml -v /home/ansible_mgr/registry/certs/domain.key:/conf/auth.key \
-v /home/mnt/disks/registry-web-db:/data -e REGISTRY_URL=https://192.168.0.203:5000/v2 \
-e REGISTRY_TRUST_ANY_SSL=true -e REGISTRY_BASIC_AUTH="YWRtaW46Y2hhbmdlbWU=" \
-e REGISTRY_NAME=192.168.0.203: -p : --link secure_registry --name registry-web 192.168.0.203:/docker-registry-web:v0.1.2
registry-web.yml内容如下:
registry:
url: https://docker.test.com:5000/v2
name: docker.test.com:
# To allow image delete, should be false
readonly: false
auth:
# Enable authentication
enabled: true
# Token issuer
# should equals to auth.token.issuer of docker registry
issuer: 'YPT'
# Private key for token signing
# certificate used on auth.token.rootcertbundle should signed by this key
key: /conf/auth.key

四、删除本地私有仓库镜像

删除镜像方法一

使用github上别人所写的工具,地址https://github.com/burnettk/delete-docker-registry-image

1、安装脚本,会将脚本下载到本地/usr/local/bin/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

2、给脚本添加执行权限

chmod +x /usr/local/bin/delete_docker_registry_image

3、通过环境变量设置镜像保存在本地的路径

export REGISTRY_DATA_DIR=/data/registry/docker/registry/v2/

4、测试执行删除一个repo,查看哪些目录需要删除,改命令不会立即删除镜像,而是测试

delete_docker_registry_image --image tomcat --dry-run

查看本地镜像是否还在

 curl http://10.6.191.182:5000/v2/_catalog

5、执行删除repo的操作

delete_docker_registry_image --image tomcat

6、删除某个tag

delete_docker_registry_image --image tomcat:v1

测试:将从公共仓库pull下来的centos:7 镜像打两个tag,然后push到私有仓库,会提示镜像已存在,这是因为这两个镜像完全相同,从镜像ID可以看出来

Docker本地私有仓库实战的更多相关文章

  1. centos 7.1搭建docker本地私有仓库返回500错误

    之前有一篇写到在ubuntu14.04系统上安装私有仓库,遇到了两个问题,本次在centos7上遇到了另外一个问题. 安装完仓库并运行registry镜像之后发现push和pull操作都会返回一个50 ...

  2. docker本地私有仓库的创建,及https错误修正

    docker版本1.12.5 #docker run -d -p 5000:5000 -v <HOST_DIR>:/tmp/registry-dev registry #<HOST_ ...

  3. Docker基础-搭建本地私有仓库

    1.使用registry镜像创建私有仓库 安装Docker后,可以通过官方提供的registry镜像来简单搭建一套本地私有仓库环境: docker run -d -p 5000:5000 regist ...

  4. docker使用registry搭建本地私有仓库

    参考链接来自:http://blog.csdn.net/wangtaoking1/article/details/44180901/ 和Mavan的管理一样,Dockers不仅提供了一个中央仓库,同时 ...

  5. docker 搭建本地私有仓库

    1.使用registry镜像创建私有仓库 安装docker后,可以通过官方提供的 registry 镜像来简单搭建一套本地私有仓库环境: docker run -d -p : registry: 这将 ...

  6. Docker容器之搭建本地私有仓库

    Docker容器之搭建本地私有仓库 本地私有仓库搭建的具体步骤 首先下载 registry 镜像 docker pull registry 在 daemon.json 文件中添加私有镜像仓库的地址并重 ...

  7. docker创建私有仓库

    由于网速和大中华局域网效果,使得我们在DockerHub下载镜像的速度很慢,甚至一些国内的镜像仓库,也感觉速度不是很好.所以,很有必要在本地或者一个我们访问很快速的地方(自己的云服务器)搭建一套镜像仓 ...

  8. kubeadm init 时从本地私有仓库下载镜像

    #kubeadm init 时从本地私有仓库下载镜像 images=( gcr.io/google_containers/kube-proxy-amd64:v1.6.1 gcr.io/google_c ...

  9. Kubernetes本地私有仓库配置

    实验环境 master 10.6.191.181 node1 10.6.191.182 node2 10.6.191.183 本地私有仓库 10.6.191.184 一.安装本地私有仓库 1.安装do ...

随机推荐

  1. 12 个最佳 GNOME(GTK)主题

    作者: Phillip Prado 译者: LCTT 郑 | 2019-04-14 09:45   评论: 1 收藏: 2 让我们来看一些漂亮的 GTK 主题,你不仅可以用在 Ubuntu 上,也可以 ...

  2. Kz.layedit-layui.layedit富文本编辑器拓展

    项目介绍 首先欢迎使用 Kz.layedit!本项目基于layui.layedit富文本编辑器,在其之上拓展而来. 新增功能 html源码模式.插入hr水平线.段落格式.字体颜色.字体背景色.批量上传 ...

  3. 基于element的表单渲染器 (el-form-renderer)

    基于 element-ui 封装的表单渲染器,完整继承了 element 的属性定义,并进行了简单扩展,从而用户能够通过使用一段预设的数据渲染出一个完整的 element 表单. 演示地址 项目地址 ...

  4. django-9-请求与响应

    写在表单下面{% csrf_token %} <<<文件上传>>>settings.py UPLOAD_ROOT = os.paht.join(BASE_DIR, ...

  5. Unity 代码集锦之图片处理

    1.将Texture2D保存为jpg void TestSaveImageToJPG(Texture2D buffer) { File.WriteAllBytes("F:/output.jp ...

  6. vuejs 基础总结(one)

    vuejs 入门知识点 1.active-class 是哪个组件的属性?嵌套路由怎么定义 (1).active-class 是 vue-router 模块的 router-link 组件的属性 (2) ...

  7. MyBatis学习总结(18)——MyBatis与Hibernate区别

    也用了这么久的Hibernate和MyBatis了,一直打算做一个总结,就他们之间的优缺点说说我自己的理解: 首先,Hibernate是一个ORM的持久层框架,它使用对象和我们的数据库建立关系,在Hi ...

  8. 循环语句第1种 LOOP ... END LOOP;

     7)循环语句  --------第1种----------   LOOP ... END LOOP;    declare    n number(3) := 1;  begin    LOOP   ...

  9. 洛谷 P1617 爱与愁的一千个伤心的理由

    P1617 爱与愁的一千个伤心的理由 题目背景 (本道题目隐藏了两首歌名,找找看哪~~~) <爱与愁的故事第一弹·heartache>第二章. 经历了心痛后,爱与愁大神不行了. 题目描述 ...

  10. java语言中的多态概述

    多态:一个对象相应着不同类型 多态在代码中的体现:父类或接口的引用指向其子类对象. 多态的优点: 提高了代码的扩展性,前期定义的代码能够使用后期的内容. 多态的弊端: 前期定义的内容不能使用后期子类中 ...