Ubuntu下使用Docker 建立本地私有registry

版本信息

  1. ubuntu 16.04
  2. docker 1.11.2
  3. registry 2

安裝docker

使用安裝腳本安裝docker,保證本機有安裝curl。

$ sudo curl https://get.docker.com/ | sh

安裝完成之後,可以使用docker info 或 docker version 查看docker的相關信息。
由於docker需要sudo命令,所以可以將當前用戶加入docker組,然後退出當前用戶,再次登錄,就可以不用使用sudo了。

$ sudo gpasswd -a ${USER} docker

安裝registry

由於docker中registry的latest版本爲1.x, 所以我們指定安裝版本2。

$ docker pull registry:2

通過這個image創建一個container

$ docker run -p 5000:5000 -d --name=local_registry registry:2
$ docker ps 

之後使用docker ps查看就能看到名爲 local_registry的container已經在後臺運行了。
這裏寫圖片描述

測試registry

從官方下載hello-world image 用以測試, 192.168.1.102是本機局域網IP。

$ docker pull hello-world:latest
$ dcoker tag hello-world:latest 127.0.0.1:5000/hello-world
$ docker tag hello-world:latest 192.168.1.102:5000/hello-world

嘗試push

$ docker push 127.0.0.1:5000/hello-world

這裏寫圖片描述
進入container容器查看

$ docker exec -i -t local_registry /bin/bash

這裏寫圖片描述

這個就看到了我們的上傳的image了, 由於使用registry:2所以在容器中上傳的image存在 /var/lib/registry中,我們將其刪除。

這裏寫圖片描述
然後exit退出容器。
如果再按照這個地址push, 就會出現錯誤。

$ docker push 192.168.1.102:5000/hello-world

這裏寫圖片描述

這是由於使用https原因,查了很多,都說在/etc/default/docker中修改 DOCKER_OPTS, 然後重啓docker。 然而這並沒有什麼卵用

這裏寫圖片描述

所以,這種方式只能用於本地主機,不能用在局域網中。所以,我們採取官方推薦的,用https,自建證書。

搭建https regsitry

server 端:

  • 生成自簽名證書
$ mkdir -p ~/registry/certs && cd ~/registry/certs
$ openssl req -x509 -days 3650 -subj '/CN=reg.domain.com/' -nodes -newkey rsa:2048 -keyout registry.key -out registry.crt

這個由於ca認證不支持ip地址,所以採用域名,之後在hosts中添加映射就可以了。

  • 生成用戶名密碼
$ mkdir -p ~/registry/auth && cd ~/registry/auth
$ docker run --rm --entrypoint htpasswd registry:2 -Bbn testuser password > ./htpasswd

使用registry:2中的 htpasswd 生成用戶名密碼 testuser password 並存到本地。

  • 創建證書目錄
$ mkdir -p /etc/docker/certs.d/reg.domain.com:5000
$ cp ~/registry/certs/registry.crt /etc/docker/certs.d/reg.domain.com:5000
  • 啓動registry , 刪除之前的 local_registry
$ docker stop local_registry && docker rm local_registry
$ docker run -d -p 5000:5000 --name=registry --restart=always -v ~/registry/auth:/auth -v ~/registry/certs:/certs -v /data/registry:/var/lib/registry -e REGISTRY_AUTH=htpasswd -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt -e REGISTRY_HTTP_TLS_KEY=/certs/registry.key registry:2

client 端:

  • 證書相關
    通過scp將證書copy到本地
$ sudo mkdir -p /etc/docker/certs.d/reg.domain.com:5000
$ sudo scp -r todd@192.168.1.102:/home/todd/registry/certs/registry.crt /etc/docker/certs.d/reg.domain.com:5000
  • 添加域名
    在 /etc/hosts 添加一行 192.168.1.102 reg.domain.com
$ sudo vim /etc/hosts
  • 測試
    登錄輸入之前設置的 testuser 和 password
$ docker login reg.domain.com:5000
Username: testuser
Password: password
$ docker pull hello-world
$ docker tag hello-world:latest reg.domain.com:5000/hello-world
$ docker push reg.domain.com:5000/hello-world
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章