創(chuàng)建Docker私有庫

這篇文章介紹如何搭建一個私有的Docker倉庫,包括配置證書和密碼認(rèn)證。

安裝

因為本身有docker環(huán)境,所以直接通過docker來安裝。

下載

下載registry的docker鏡像,點擊查看官方鏡像地址

$ docker pull registry # 這樣會使用官方docker鏡像庫,或者配置在/etc/docker/domain.json中的鏡像庫。也可以像下面這樣,直接指定下載庫。
$ docker pull registry.docker-cn.com/library/registry

配置數(shù)據(jù)存儲位置

配置存儲位置/var/lib/registry,通過-v指定。

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

這樣就能夠通過:localhost:5000來push自己的鏡像了。

配置證書

生成證書

  • 如果你自己的域名已經(jīng)有證書了,就下載下來會有兩個文件:crtpem,然后合并成一個crt:

    $ cat domain.crt intermediate-certificates.pem > certs/domain.crt
    
  • 如果沒有證書,可以自己通過openssl生成,注意master.mesos是自己的域名,我這里是因為mesosphere的主節(jié)點是這個域名,我就生成master.mesos對應(yīng)的證書。

    $ 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"
    

生成好了就會在當(dāng)前目錄下面有兩個文件:master.mesos.csrmaster.mesos.key,我們最終是需要crt格式的證書,通過下面的方式轉(zhuǎn)換:

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

現(xiàn)在在目錄下面就是三個文件:master.mesos.csr、master.mesos.key、domain.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

注意里面的證書目錄,不能配置錯了?,F(xiàn)在就能夠通過https訪問倉庫了。

密碼認(rèn)證

配置密碼認(rèn)證后,訪問倉庫必須通過輸入用戶名和密碼才行。

創(chuàng)建密碼文件

用戶名是testuser,密碼是testpassword

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

現(xiàn)在在當(dāng)前目錄下面會有一個auth目錄,目錄下面有一個密碼文件:htpasswd,文件內(nèi)容大概像這個:

[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所在目錄結(jié)構(gòu):

[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
倉庫數(shù)據(jù)在./data/registry目錄中

問題

1. 如果出現(xiàn)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放到倉庫所在的機(jī)器上,而是在哪兒使用docker就應(yīng)該在這臺機(jī)器上配置這個證書。比如倉庫在A服務(wù)器,我在B服務(wù)器使用,這個配置操作應(yīng)該在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(倉庫地址)+ 其他。

查看更多 > > >

不登高山,不知天之高也;不臨深溪,不知地之厚也
感謝指點、交流、喜歡

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容