Docker 搭建私有仓库

如果不想用私有镜像库,你可以用docker的库 https://hub.docker.com


环境准备

环境:两个装有Docker 17.09.0-ce 的centos7虚拟机

虚拟机一:192.168.0.154 用户开发机

虚拟机二:192.168.0.153 用作私有仓库



搭建私有仓库

在153机器上下载registry镜像

docker pull registry

下载完之后我们通过该镜像启动一个容器

docker run -d -p 5000:5000 registry

默认情况下,会将仓库存放于容器内的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载到容器内的/tmp/registry下,

不过具体的情况还是要到容器里去看

先启动容器

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

b4c21ca8cf8a23ea72e0471909742541ffc312ea5cf492486b5bdc3130179864


可以看到容器存放位置不在/tmp 下

我们接着来查找下,挂载位置到底在哪里

可以看到registry 挂载目录是 在 /var/lib/registry 下

我们重新启动下 registry

docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry  -v /data/config.yml:/etc/docker/registry/config.yml  registry 


/data/config.yml 这个是什么呢?我们在下面删除仓库镜像介绍

这里需要说明一点,在启动仓库时,需在配置文件中的storage配置中增加delete=true配置项,允许删除镜像。默认的镜像是没有这个参数

cat config.yml


version: 0.1

log:

  fields:

    service: registry

storage:

  delete:

    enabled: true

  cache:

    blobdescriptor: inmemory

  filesystem:

    rootdirectory: /var/lib/registry

http:

  addr: :5000

  headers:

    X-Content-Type-Options: [nosniff]

health:

  storagedriver:

    enabled: true

    interval: 10s

    threshold: 3

可以看到我们启动了一个容器,地址为:192.168.0.153:5000。


测试

接下来我们就要操作把一个本地镜像push到私有仓库中。首先在153机器下pull一个比较小的镜像来测试(此处使用的是busybox)。

docker pull busybox

接下来修改一下该镜像的tag。

docker tag busybox 192.168.0.153:5000/busybox

接下来把打了tag的镜像上传到私有仓库。

docker push 192.168.0.153:5000/busybox

可以看到 push 失败:

Error: Invalid registry endpoint https://192.168.0.153:5000/v1/: Get https://192.168.0.153:5000/v1/_ping: dial tcp 192.168.0.153:5000: connection refused. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry 192.168.112.136:5000` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/192.168.0.153:5000/ca.crt

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

vim  /usr/lib/systemd/system/docker.service

找到ExecStart

ExecStart=/usr/bin/dockerd --insecure-registry 192.168.0.153:5000

红色字体为添加的


重启docker:

systemctl daemon-reload

systemctl restart docker

重启完之后我们再次运行推送命令,把本地镜像推送到私有服务器上。

docker push 192.168.0.153:5000/busybox


接下来我们从私有仓库中pull下来该镜像。

sudo docker pull 192.168.0.153:5000/busybox

查看镜像

# curl -XGET http://registry:5000/v2/_catalog

# curl -XGET http://registry:5000/v2/image_name/tags/list


Registry删除镜像、垃圾回收

Docker仓库在2.1版本中支持了删除镜像的API,但这个删除操作只会删除镜像元数据,不会删除层数据。在2.4版本中对这一问题进行了解决,增加了一个垃圾回收命令,删除未被引用的层数据

打包上传镜像

[root@master scripts]# docker tag alpine:v1 192.168.0.153:5000/fbgweb:v1

[root@master scripts]# docker push 192.168.0.153:5000/fbgweb:v1

The push refers to a repository [192.168.0.153:5000/fbgweb]

e30c8796115a: Pushed

9922d8737f34: Pushed

c3cc0aba53da: Pushed

f73b42f6c905: Pushed

4a3fe911d00f: Pushed

187a385eda60: Pushed

0e23c00d0c30: Pushed

d221a7f5318b: Pushed

7e2d3752fd4f: Pushed

v1: digest: sha256:6a67ba482a8dd4f8143ac96b1dcffa5e45af95b8d3e37aeba72401a5afd7ab8e size: 2204


查看仓库镜像 (查看仓库镜像脚本 get.py

[root@master scripts]# python get.py                          192.168.0.153:5000/fbgweb:v1192.168.0.153:5000/nginx:1.7.9192.168.0.153:5000/nginx:1.8



查看数据进行仓库容器中,通过du命令查看大小

[root@master ~]# docker exec -it f70d0c79e6d546d4 sh

~ # du  -chs  /var/lib/registry/

182.4M  /var/lib/registry/

182.4M  total

删除镜像

删除镜像对应的API如下:

DELETE /v2//manifests/

name:镜像名称

reference: 镜像对应sha256值


发送请求,删除刚才上传的镜像

[root@master scripts]#  curl -I -X DELETE http://192.168.0.153:5000/v2/fbgweb/manifests/sha256:6a67ba482a8dd4f8143ac96b1dcffa5e45af95b8d3e37aeba72401a5afd7ab8e

HTTP/1.1 202 Accepted

Docker-Distribution-Api-Version: registry/2.0

X-Content-Type-Options: nosniff

Date: Mon, 13 Nov 2017 13:04:24 GMT

Content-Length: 0

Content-Type: text/plain; charset=utf-8


查看镜像

[root@master scripts]# python get.py

192.168.0.153:5000/nginx:1.7.9

192.168.0.153:5000/nginx:1.8

192.168.0.153:5000/nginx:latest

可以看到镜像索引已经被删除


查看数据大小

[root@master ~]# docker exec -it f70d0c79e6d546d4 sh

~ # du  -chs  /var/lib/registry/

182.4M  /var/lib/registry/

182.4M  total

可以看到数据大小没有变化(只删除了元数据)

垃圾回收

进行容器执行垃圾回收命令

~ # registry garbage-collect /etc/docker/registry/config.yml

31 blobs marked, 5 blobs eligible for deletion

blob eligible for deletion: sha256:5e7cf06c8745d0985f94191c60aad8b87371c8a674162525bff0efccdb805931

INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/5e/5e7cf06c8745d0985f94191c60aad8b87371c8a674162525bff0efccdb805931  go.version=go1.7.6 instance.id=c38f4c35-9914-4b77-a59f-ea584137fae0

blob eligible for deletion: sha256:6a67ba482a8dd4f8143ac96b1dcffa5e45af95b8d3e37aeba72401a5afd7ab8e

INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/6a/6a67ba482a8dd4f8143ac96b1dcffa5e45af95b8d3e37aeba72401a5afd7ab8e  go.version=go1.7.6 instance.id=c38f4c35-9914-4b77-a59f-ea584137fae0

blob eligible for deletion: sha256:966e2fb5980b2a854c03551418af0b2ee2bef082dfaae075026d00fa36620960

INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/96/966e2fb5980b2a854c03551418af0b2ee2bef082dfaae075026d00fa36620960  go.version=go1.7.6 instance.id=c38f4c35-9914-4b77-a59f-ea584137fae0

blob eligible for deletion: sha256:a122ad1ef7a033582abfc7bae980cc11bdcc2d19bed7d8ea5b7efc50d16456c8

INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/a1/a122ad1ef7a033582abfc7bae980cc11bdcc2d19bed7d8ea5b7efc50d16456c8  go.version=go1.7.6 instance.id=c38f4c35-9914-4b77-a59f-ea584137fae0

blob eligible for deletion: sha256:b29205236f1d3eb6143e95f3a412a8f21a16a10b09c7aee28ecba3d803832285

INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/b2/b29205236f1d3eb6143e95f3a412a8f21a16a10b09c7aee28ecba3d803832285  go.version=go1.7.6 instance.id=c38f4c35-9914-4b77-a59f-ea584137fae0

查看数据大小

~ # du  -chs  /var/lib/registry/

159.5M  /var/lib/registry/

159.5M  total

可以看到镜像数据已被删除

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容

  • 和Mavan的管理一样,Dockers不仅提供了一个中央仓库,同时也允许我们使用registry搭建本地私有仓库。...
    阮凯_7423阅读 967评论 2 1
  • 1、拉取 registry 镜像 命令docker pull registry 2、启动容器创建私有仓库 启动命令...
    IT锟阅读 346评论 1 3
  • 和Mavan的管理一样,Dockers不仅提供了一个中央仓库,同时也允许我们使用registry搭建本地私有仓库。...
    阮凯_7423阅读 3,277评论 0 1
  • Doker 在业界的应用越来越广泛,怎么用户管理好自己的镜像、容器等就是一个迫在眉睫的任务。 由于业务需要,我们需...
    zwsuo阅读 15,988评论 9 6
  • 妈妈一直在说,人的一生呀要活到老学到老,八十八岁再学巧。自己的理解就是要不断的学习成长。成长率这个概念真的是第一次...
    MH红阅读 134评论 0 1