建立私有docker registry與基本設定

 

私有registry

docker run -d -p 5000:5000 --restart=always --name registry registry:2

非常有docker的style,registry本身也docker一下。不過我們跑私有就是要持久化,看一下image設定的內容是放在

  • 儲存庫位置: /var/lib/registry
  • 設定檔位置: /etc/docker/registry/config.yml

雖然上面指令小改一下就好,但是我都統一改用docker-compose

私有docker registry最小設定

只是可以跑起來的compose設定檔(docker-compose.yml)
version: "3.8"
services:
registry:
restart: always
image: registry:2
ports:
- 5000:5000
volumes:
- ./data:/var/lib/registry

回憶: 啟動服務 docker-compose up -d
回憶: 關閉服務 docker-compose down


私有docker registry簡易設定

可登入的compose設定檔(docker-compose.yml)

version: "3.8"
services:
registry:
container_name: my-docker-hub
restart: always
image: registry:2
ports:
- 5000:5000
environment:
REGISTRY_HTTP_SECRET: simpletokensecret
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_PATH: /myauth/htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
volumes:
- ./data:/var/lib/registry
- ./.htpasswd:/myauth/htpasswd
  • REGISTRY_HTTP_SECRET 自訂密碼鹽
  • REGISTRY_AUTH表示驗證方式
  • REGISTRY_AUTH_HTPASSWD_PATH指定驗證路徑
回憶: 除錯 docker exec -it my-docker-hub sh

產生密碼檔

為了讓registry可登入最簡易就是用HTTP基本認證,為此我們需要產生htpasswd密碼,可以用htpasswd來處理,簡單用法如下

htpasswd -Bb {你的使用者} {你的密碼} > .htpasswd

  • -B是bcrypt加密
  • -b是從command line讀取密碼而不是要求輸入密碼。
  • -n是不更動既有設定,在stdout螢幕輸出結果
  • 另可用-C設定bcrypt加密次數,次數越多強度越強。

若是不想裝套件在本機的話,可以用docke借httpd的image跑一下

docker run --rm -it httpd htpasswd -Bbn {你的使用者} {你的密碼} > .htpasswd

提醒: -b這個選項其實有一個安全性疑慮,就是bash histroy會紀錄下你的指令,所以可以看到你的使用者密碼

私有docker registry的良好設定

前一個小節的簡易設定是設了HTTP的認證,建議是只提供自己或內部網路使用,對外服務至少得使用HTTPS的認證才是良好的設定。這部份請參考Miles大大的 使用 Private Registry 分享 image 一文。


登入私有docker registry

docker login localhost:5000

上傳到私有docker registry

平常會使用pull來抓docker image

docker pull ubuntu:18.04

但是我們並不能使用 push 上傳到私有registry,因為它會push到來源registry - https://docker.io/

docker push ubuntu:18.04

命名image

所以上傳前,要用tag命名一下待會要上傳的docker image放到私有registry的名稱

docker tag ubuntu:18.04 localhost:5000/ubuntu18

命名格式是

docker tag IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]

回憶:看有哪些映像檔 docker images

上傳到私有registry

用上面的命名指令可以用以下指令上傳

$ docker push localhost:5000/ubuntu18

$ docker push localhost:5000/ubuntu18:latest

如果是命名有指定TAG

$ docker tag ubuntu:18.04 localhost:5000/ubuntu:18.04

就用這條指令上傳

$ docker push localhost:5000/ubuntu18:latest

參考

  • https://docs.docker.com/registry/deploying
  • http://dockone.io/article/627
  • https://philipzheng.gitbook.io/docker_practice/repository/local_repo

留言