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. day01 编程概述及计算机组成原理

    目录 编程概述 计算机硬件的五大组成部分 Central Processing Unit(cpu中央处理器) 存储器 输入,输出设备 打开QQ的流程 计算机五大组成部分补充 多核CPU ×64/x86 ...

  2. SpringMVC框架入门

    简介 SpringMVC采用模型(Model)-视图(View)-控制器(controller)的方法把业务逻辑.数据与界面显示分离.用通俗的话来讲,MVC的理念就是把数据处理.数据展示和程序/用户的 ...

  3. css——外部样式

    外部样式 先建立一个css文件,如下: 然后开始写代码,不要加<style> 然后可以在html文件中的<head>内引用:<link rel="stylesh ...

  4. BZOJ 2141 排队 (三维偏序CDQ+树状数组)

    题目大意:略 洛谷传送门 和 [CQOI2015]动态逆序对 这道题一样的思路 一开始的序列视为$n$次插入操作 把每次交换操作看成四次操作,删除$x$,删除$y$,加入$x$,加入$y$ 把每次操作 ...

  5. Git 合并流程

    首先把自己的代码提交到自己的分支 再把master[主分支]的代码拉下来更新 解决冲突 推送至自己的分支 请求合并到master[主分支]

  6. django开发微信公众平台遇到的问题记录

    在pythonanywhere.com上使用django开发微信公众平台应用,结果用户发送的信息,微信服务器一次也没有成功转发到pythonanywhere上来,但是用接口测试工具调试却发现是正常的, ...

  7. debian mysql 定时自己主动备份的脚本

    #!/bin/sh LOG=/var/log/mysql-backup.log # mysql db info USER_ROOT=XXXXXX USER_PWD=XXXXXXX # mysql da ...

  8. hdu 4521 小明系列问题——小明序列(线段树+DP或扩展成经典的LIS)

    小明系列问题--小明序列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Tot ...

  9. 在openwrt上编译一个最简单的ipk包

    1 什么是opkg Opkg 是一个轻量快速的套件管理系统,目前已成为 Opensource 界嵌入式系统标准.常用于路由.交换机等嵌入式设备中,用来管理软件包的安装升级与下载. opkg updat ...

  10. Process Explorer

    https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer Ever wondered which program ...