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. day15 函数对象以及作用域

    目录 函数对象 函数对象的四大功能 函数的嵌套 名称空间和作用域 名称空间 考试必考 作用域 global nonlacal LEGB原则 函数对象 ==Python中一切皆对象== 函数名也可以看成 ...

  2. 2019-03-25 Python Pandas 基本操作

    新建表 data1 = { "name": ["Tom", "Bob", "Mary", "James&quo ...

  3. STM32 Cubemx 配置定时器定时1mS

    最近才发现原来我把定时器里的配置参数代表的意义给搞混了,这里记录一下,防止以后自己忘记. 以建立一个定时1mS定时器为例: 1.先打开定时器 2.配置好时钟 3.配置定时器设置 重点来了,以前在这里我 ...

  4. 2、Koa2 路由+cookie

    一.koa2 原生路由的实现 const Koa = require('koa'); const app = new Koa(); const fs = require('fs'); function ...

  5. 使用PoolingHttpClientConnectionManager解决httpclient的多线程请求问题

    直接上代码 1.主程序 public class TestMain { public static void main(String[] args) throws NSQException, Time ...

  6. Java Web学习总结(26)——Servlet不同版本之间的区别

    1.   2.3版本 2.3版本 <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2. ...

  7. [React] Work with HTML Canvas in React

    React's abstraction over the DOM means that it's not always obvious how to do DOM-related things, li ...

  8. python爬虫 分页获取图片并下载

    --刚接触python2天,想高速上手,就写了个爬虫,写完之后,成就感暴增,用起来顺手多了. 1.源代码 #coding=utf-8 import urllib import re class Pag ...

  9. ruby on rails错误undefined method `title&#39; for nil:NilClass

    首先搞清楚这句话,在 Ruby 中,方法分为 public.private 和 protected 三种,仅仅有 public 方法才干作为控制器的动作. 我的出错的代码例如以下: controlle ...

  10. [Android] Android开发优化之——对界面UI的优化(1)

    在Android应用开发过程中,屏幕上控件的布局代码和程序的逻辑代码通常是分开的.界面的布局代码是放在一个独立的xml文件中的,这个文件里面是树型组织的,控制着页面的布局.通常,在这个页面中会用到很多 ...