國內鏡像加速器registry的製作

本文要講的是如何製作項目中自己的鏡像加速器(如果你有牆外的服務器,就不需要我的方案了。直接用國外服務器起registry容器,國內服務器能連到這臺國外服務器就行了),在實際應用過程中,在拉dockerhub鏡像時,因爲存在網絡上被牆的原因,我們無法通過docker pull tomcat這樣的命令直接拉取到鏡像或者拉取的非常慢,這時候就需要用到鏡像加速器了。最簡單的肯定是使用阿里雲和亞馬遜 的鏡像加速地址,放入機器的/etc/docker/daemon.json文件,就像這樣,下面加了阿里雲,科大,道雲等加速器,目前我測試的比較穩定並且不需要登錄獲取的加速器地址是azure加速器地址(https://dockerhub.azk8s.cn):

{
    "registry-mirrors": [
        "https://1nj0zren.mirror.aliyuncs.com",
        "https://docker.mirrors.ustc.edu.cn",
        "http://f1361db2.m.daocloud.io",
        "https://registry.docker-cn.com"
    ]
}

下面正式開始介紹如何製作自己的鏡像加速器,先介紹下我做的,然後再跟大家說下參考的官方地址。
1、配置config.yaml文件
該文件是registry的配置文件,裏面會配置s3存儲和緩存redis等。

version: 0.1
log:
  fields:
    service: registry
  level: info
storage:
  cache:
    blobdescriptor: redis #緩存使用redis,下面需要配置redis信息,這邊是可以配置內存做緩存的,下面會有地址讓給參考
  s3:#存儲配置,我們存儲使用的是minio,你自己部署的時候直接用minio鏡像起個容器就行,以下信息都是Minio提供的。
    accesskey: admin #minio登錄賬號和密碼
    secretkey: A123456z
    region: huadong
    regionendpoint: http://10.124.13.127:9000
    bucket: mirror-registry
    encrypt: false
    secure: false
    v4auth: true
    chunksize: 5242880
    rootdirectory: /
  delete:
    enabled: true
  maintenance:
    uploadpurging:
      enabled: true
      age: 168h
      interval: 24h
      dryrun: false
    readonly:
      enabled: false
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
redis:
  addr: 10.154.12.248:6379  #redis的地址
  password: A123456z #redis密碼
  db: 0
  dialtimeout: 10ms
  readtimeout: 10ms
  writetimeout: 10ms
  pool:
    maxidle: 16
    maxactive: 64
    idletimeout: 300s
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3
proxy:
  remoteurl: https://dockerhub.azk8s.cn
  #這邊可替換成其他加速地址:https://dockerhub.azk8s.cn;https://cduvuqsh.mirror.aliyuncs.com

2、Dockerfile
用於製作我們自己的registry鏡像,基於官方的registry鏡像做的,

FROM registry:latest
LABEL maintainer="fishing_fly <[email protected]>"
COPY entrypoint.sh /entrypoint.sh 
COPY config.yml /etc/docker/registry/config.yml

主要拷貝文件entrypoint.sh和registry的配置文件
3、entrypoint.sh

#!/bin/sh

set -e

CONFIG_YML=/etc/docker/registry/config.yml

if [ -n "$PROXY_REMOTE_URL" -a `grep -c "$PROXY_REMOTE_URL" $CONFIG_YML` -eq 0 ]; then
    echo "proxy:" >> $CONFIG_YML
    echo "  remoteurl: $PROXY_REMOTE_URL" >> $CONFIG_YML
    echo "------ Enabled proxy to remote: $PROXY_REMOTE_URL ------"
elif [ $DELETE_ENABLED = true -a `grep -c "delete:" $CONFIG_YML` -eq 0 ]; then
    sed -i '/rootdirectory/a\  delete:' $CONFIG_YML
    sed -i '/delete/a\    enabled: true' $CONFIG_YML
    echo "------ Enabled local storage delete -----"
fi

case "$1" in
    *.yaml|*.yml) set -- registry serve "$@" ;;
    serve|garbage-collect|help|-*) set -- registry "$@" ;;
esac

exec "$@"

主要做的一件事是將命令行設置的PROXY_REMOTE_URL寫入config.yaml文件,這個地址是加速器的地址,可以寫入阿里雲或者azure的加速器地址
3、Makefile文件

VERSION ?= v1.0

image:
        docker build -t registry-mirror:${VERSION} .


run-azure:
        docker run -itd -p 7998:5000 -e PROXY_REMOTE_URL=https://dockerhub.azk8s.cn  --restart=always  --name registry-mirror-azure registry-mirror:${VERSION}


run-aliyun:
        docker run -itd -p 7999:5000 -e PROXY_REMOTE_URL=https://cduvuqsh.mirror.aliyuncs.com  --restart=always  --name registry-mirror-aliyun registry-mirror:${VERSION}

在運行docker run命令時可以指定代理的加速器地址。你在項目中使用時可以代理多個加速器地址,做高可用。
4、在其他需要拉鏡像的虛擬機上,修改/etc/docker/daemon.json中registry-mirrors配:

{
	"registry-mirrors": ["http://10.143.12.120:7998","http://10.143.12.120:7999"]
}

這兩個ip和端口,是我們上面起registry鏡像的地址和端口。docker 本地拉鏡像會按需去第一個地址拉,拉不到的話,去第二個地址拉。
上面這些文件配置好運行一下命令在待部署registry的服務器上運行:

#打鏡像,鏡像公用
make build
make run-azure #起微軟的registry鏡像
make run-aliyun #起阿里雲的registry鏡像

下面說下參考地址:
https://github.com/docker/docker.github.io/blob/master/registry/deploying.md
https://github.com/docker/docker.github.io/blob/v18.03/registry/configuration.md (這裏面會有配置的詳細解釋)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章