创建自己的Docker镜像仓库

很多时候我们并不希望将我们公司内部的项目源码或可执行程序直接托管在第三方网站,这个时候我们就要使用开源产品搭建一套自己的私服了,废话不多说,开干。

① 创建工作目录

mkdir -p /data/docker/registry

② 创建registry的配置文件:config.yml

version: 0.1
log:
  accesslog:
    disabled: true
  level: debug
  formatter: text
  fields:
    service: registry
    environment: staging
storage:
  delete:
    enabled: true
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
auth:
  htpasswd:
    realm: basic-realm
    path: /etc/docker/registry/auth/nginx.htpasswd
http:
  addr: :80
  host: 0.0.0.0
  headers:
    X-Content-Type-Options: [nosniff]
  http2:
    disabled: false
  tls:
#    certificate: /etc/docker/registry/ssl/hub.itmx.xyz.crt
#    key: /etc/docker/registry/ssl/hub.itmx.xyz.key
health:
  storagedriver:
    enabled: true
    interval: 10s
threshold: 3

③ 创建编排文件:docker-compose.yml

version: '3'
services:
  registry:
    image: registry
    expose:
      - "80"
    environment:
      - VIRTUAL_HOST=hub.itmx.xyz
    volumes:
      - ./config.yml:/etc/docker/registry/config.yml:ro
      - ./auth:/etc/docker/registry/auth:ro
      - ./data:/var/lib/registry
    restart: always

④ 创建账户

如果没有auth文件夹,先创建auth文件夹

mkdir /data/docker/registry/auth

创建一个账户

docker run --rm --entrypoint htpasswd registry -Bbn 登录名 登录密码 >> auth/nginx.htpasswd

⑤ 制作证书和配置proxy-nginx (传送门:nginx-proxy

https://freessl.org 制作一份证书并下载,修改文件名分别为

hub.itmx.xyz.keyhub.itmx.xyz.crt

复制这两个文件到nginx-proxycerts文件夹即完成证书配置

为了让nginx-proxy允许上传大文件(镜像文件分为多层上传,每层几十上百M)

我们在nginx-proxyvhost.d目录下创建hub.itmx.xyz_location 文件

client_max_body_size 1g;

并添加目录挂载,修改nginx-proxydocker-compose.yml文件,添加如下:

volumes:
  - ./vhost.d:/etc/nginx/vhost.d:ro

⑥ 跑起来

docker-compose up -d

⑦ 登录、推送、拉取

使用④创建的账号进行登录

docker login -u itmx hub.itmx.xyz

拉取一个官方镜像用于测试

docker pull ubuntu

标记这个镜像为一个新名称。你可以简单的理解为复制了一份镜像并命名为我的仓库地址,以备推送到我的仓库。但这条命令实际上并没有复制操作

#https://docs.docker.com/engine/reference/commandline/tag/

docker tag ubuntu hub.itmx.xyz/tc/ubuntu:0603

推送镜像到我的仓库中

docker push hub.itmx.xyz/tc/ubuntu:0603