创建Docker私有库

这篇文章介绍如何搭建一个私有的Docker仓库,包括配置证书和密码认证。

安装

因为本身有docker环境,所以直接通过docker来安装。

下载

下载registry的docker镜像,点击查看官方镜像地址

$ docker pull registry # 这样会使用官方docker镜像库,或者配置在/etc/docker/domain.json中的镜像库。也可以像下面这样,直接指定下载库。
$ docker pull registry.docker-cn.com/library/registry

配置数据存储位置

配置存储位置/var/lib/registry,通过-v指定。

$ docker run -d \
  --restart=always \
  --name registry \
  -v data:/var/lib/registry \
  registry

这样就能够通过:localhost:5000来push自己的镜像了。

配置证书

生成证书

  • 如果你自己的域名已经有证书了,就下载下来会有两个文件:crtpem,然后合并成一个crt:

    $ cat domain.crt intermediate-certificates.pem > certs/domain.crt
    
  • 如果没有证书,可以自己通过openssl生成,注意master.mesos是自己的域名,我这里是因为mesosphere的主节点是这个域名,我就生成master.mesos对应的证书。

    $ openssl req -new -SHA256 -newkey rsa:2048 -nodes -keyout master.mesos.key -out master.mesos.csr -subj "/C=CN/ST=Sichuan/L=Chengdu/O=/OU=/CN=master.mesos"
    

生成好了就会在当前目录下面有两个文件:master.mesos.csrmaster.mesos.key,我们最终是需要crt格式的证书,通过下面的方式转换:

$ openssl x509 -req -in master.mesos.csr -signkey master.mesos.key -out domain.crt

现在在目录下面就是三个文件:master.mesos.csrmaster.mesos.keydomain.crt

使用证书

生成好了domain.crt后,通过以下方式使用证书:

$ docker run -d \
  --restart=always \
  --name registry \
  -v `pwd`/certs:/certs \
  -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  -p 443:443 \
  registry

注意里面的证书目录,不能配置错了。现在就能够通过https访问仓库了。

密码认证

配置密码认证后,访问仓库必须通过输入用户名和密码才行。

创建密码文件

用户名是testuser,密码是testpassword

$ mkdir auth
$ docker run \
  --entrypoint htpasswd \
  registry:2 -Bbn testuser testpassword > auth/htpasswd

现在在当前目录下面会有一个auth目录,目录下面有一个密码文件:htpasswd,文件内容大概像这个:

[root@master auth]# cat htpasswd 
testuser:$2y$05$pQC8s2X7.k0/yrRr6ksdfsdfsdlkxlkjskld235Im

[root@master auth]#

使用密码

$ docker run -d \
  -p 5000:5000 \
  --restart=always \
  --name registry \
  -v `pwd`/auth:/auth \
  -e "REGISTRY_AUTH=htpasswd" \
  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  -v `pwd`/certs:/certs \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  registry

这样使用docker仓库的时候就需要先登录:

$ docker login -u testuser -p testpassword localhost:5000

登录后就可以同之前一样推送和拉去镜像了。

通过docker-compose来启动

我比较喜欢使用docker-compose。完整的配置如下:

registry:
    restart: always
    container_name: registry
    image: registry.docker-cn.com/library/registry
    environment :
      TZ : 'Asia/Shanghai'
      REGISTRY_HTTP_TLS_KEY: /certs/domain.key
      REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
    volumes:
      - ./data/registry:/var/lib/registry
      - ./conf/registry/auth:/auth
      - ./conf/registry/certs:/certs
    ports:
      - 5000:5000 

docker-compose所在目录结构:

[root@master docker]# ls -al
总用量 12
drwxr-xr-x   5 root root   84 5月  30 11:00 .
dr-xr-x---. 15 root root 4096 5月  30 15:24 ..
drwxr-xr-x   4 root root   35 5月   8 17:52 conf
drwxr-xr-x   4 root root   35 5月   8 17:55 data
-rw-r--r--   1 root root  815 5月   9 11:26 docker-compose.yml

目录说明:

domain.crt放到./conf/registry/certs
htpasswd放到./conf/registry/certs
仓库数据在./data/registry目录中

问题

1. 如果出现x509: certificate signed by unknown authority

解决方案:

$ mkdir -p /etc/docker/certs.d/master.mesos:5000 # `master.mesos`是自己的域名
$ 通过scp等方式拷贝之前生成的`domain.crt`到/etc/docker/certs.d/master.mesos:5000/ca.crt

注意:这个不是把domain.crt放到仓库所在的机器上,而是在哪儿使用docker就应该在这台机器上配置这个证书。比如仓库在A服务器,我在B服务器使用,这个配置操作应该在B操作,同样如果在A上也要操作也需要这样做。

简单的使用

$ docker login -u testuser -p testpassword master.mesos:5000
$ docker tag xxxx master.mesos:5000/library/java:8 # xxxx是docker镜像,通过`docker images`查看
$ docker push master.mesos:5000/library/java:8
$ docker pull master.mesos:5000/library/java:8

docker tag这一步很重要,必须要是这种格式:master.mesos:5000(仓库地址)+ 其他。

查看更多 > > >

不登高山,不知天之高也;不临深溪,不知地之厚也
感谢指点、交流、喜欢

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

推荐阅读更多精彩内容