自建docker镜像加速服务

上一个文章部署股票神器instock过程中,虽然作者提供了打包好的镜像文件,但是不想使用,想自己拉取。但是又想起之前自己群辉的docker套件中的注册表功能基本用不了,每次都是自己通过命令行的方式拉取镜像,这需要提前把网关改到旁路由且拉取十分的不稳定。虽然也有别人搭建的镜像加速服务可以使用(诸如https://dockerpull.org/),但是考虑到安全性,还是决定自己搭建。

服务搭建

作者这里选择在云服务上自己搭建,虽然也有用CF的work搭建的方法(利用Cloudflare Workers搭建Docker镜像加速服务).

1.下载config目录下对应的yml文件到云服务器上。我这里只需要docker-hub.yml,也可直接新建文件插入以下代码

version: 0.1
log:
  fields:
    service: registry
storage:
  filesystem:
    rootdirectory: /var/lib/registry
  #inmemory: #此存储驱动程序不会在运行期间保留任何数据,适合磁盘空间下的机器使用(但是会使用内存开销,只适合测试)
  delete:
    enabled: true
  cache:
    blobdescriptor: inmemory   
    blobdescriptorsize: 10000
  maintenance:
    uploadpurging:
      enabled: true
      age: 168h
      interval: 24h
      dryrun: false
    readonly:
      enabled: false
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
    Access-Control-Allow-Origin: ['*']
    Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE']
    Access-Control-Allow-Headers: ['Authorization', 'Accept', 'Cache-Control']
    Access-Control-Max-Age: [1728000]
    Access-Control-Allow-Credentials: [true]
    Access-Control-Expose-Headers: ['Docker-Content-Digest']

health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

proxy:
  remoteurl: https://registry-1.docker.io
  username: 
  password:
  ttl: 168h  

2.docker-compose.yaml文件编辑

version: '3'
services:
  ## docker hub
  dockerhub:
    container_name: reg-docker-hub
    image: dqzboy/registry:latest
    restart: always
    environment:
      - OTEL_TRACES_EXPORTER=none
      # 如果需要配置代理,请把下面的注释去掉,并配置你的代理地址
      #- http_proxy=http://host:port
      #- https_proxy=http://host:port
    volumes:
      #这里需要注意registry-hub.yml文件的具体路径
      - /docker/docker-proxy/registry/data:/var/lib/registry
      - /docker/docker-proxy/registry-hub.yml:/etc/distribution/config.yml
      #- ./htpasswd:/auth/htpasswd
    ports:
      - 51000:5000
    networks:
      - registry-net
  ## UI
  registry-ui:
    container_name: registry-ui
    image: dqzboy/docker-registry-ui:latest
    environment:
      # UI所关联的REGISTRY容器服务地址,这里我是后来才更改的,原来是ip:端口的模式
      - DOCKER_REGISTRY_URL=https://hub.daoker.cc
      # [必须]使用 openssl rand -hex 16 生成唯一值
      - SECRET_KEY_BASE=9f18244a1e1179fa5aa4a06a335d01b2
      # 启用Image TAG 的删除按钮
      - ENABLE_DELETE_IMAGES=true
      - NO_SSL_VERIFICATION=true
    restart: always
    ports:
      - 50000:8080
    networks:
      - registry-net
 
networks:
  registry-net:

3.在NPM里将域名反代至相关端口

可视化页面:ui.daoker.cc

加速地址:hub.daoker.cc

使用方法docker pull hub.daoker.cc/library/nginx:latest

library必须有,github上有省略的办法,但是在npm的规则编辑里没有成功,先凑合用。

所遇问题及解决方案

1.添加hub.daoker.cc/library至黑群晖docker中的注册表加速地址后,导致docker套件直接无法使用

(1)查看日志文件/var/log/upstart/pkg-Docker-dockerd.log

发现是我改的加速地址惹得锅。在docker服务要启动sock的时候,因为无法加载json配置文件失败,json文件有错

(2)编辑配置文件/var/packages/Docker/etc/dockerd.json

删除registry-mirrors的值,如下所示,只保留[]

{
"data-root" : "/var/packages/Docker/target/docker",
"log-driver" : "db",
"registry-mirrors" : []
}

(3)到套件中心启动docker,成功搞定

2.在黑群辉上使用自建的加速地址拉取镜像,返回x509: certificate signed by unknown authority,其它系统环境上并没有此问题

 真正的解决方案是更新系统的ca证书,从letsencrypt.org网站中获取证书更新到系统中

sudo -i && cp /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt.ORIG && curl -k "https://letsencrypt.org/certs/isrgrootx1.pem" >> /etc/ssl/certs/ca-certificates.crt && reboot

3.找资料时发现的小tips,留着以后备用

(3)    docker的容器镜像如何迁移到其他设备?
解答:
群晖的docker管理界面里,容器-设置-导出-可以选择导出内容和设置,以及只导出设置。导出后是一个txz文件,例如transmission挂了几百个种,想迁移设备咋办?如果不拔盘整个迁移的话,可以用这个功能导出容器,在其他设备docker直接导入即可。(注意data目录、config目录要重新配置)
(4)    重点干货来了,如果我手贱卸了docker,例如我这次为了定位,卸载、重装了docker几十次(当然卸载时没勾选干掉容器镜像和数据),且没做提前做容器导出备份(docker都启动不了,导出个毛啊),此时我怎么恢复docker数据?
解答:
首先,在你原来docker的存储空间位置装上docker,此时注意存储空间下会有2个目录,如果你都被挪,自然就好了。如果要无界面备份的话,我再说说这两个目录作用:
目录1:存储空间下@docker目录
你有多少个容器,容器的文件、docker本身的配置,各类数据都在这里面,卸载时这个目录不会被清空,所以安装后就回来了。如果在docker无法启动时要备份docker数据,第一就是备份这个目录,今后在其他地方安装后,把这个目录的东西盖回去。
目录2:存储空间下docker目录

这是一个共享文件夹,各容器的config、data目录都在这下面,备份并盖回去。当然,如果没挪位置,重装后自然就好了。

暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇