很多时候我们并不希望将我们公司内部的项目源码或可执行程序直接托管在第三方网站,这个时候我们就要使用开源产品搭建一套自己的私服了,废话不多说,开干。
① 创建工作目录
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.key
和hub.itmx.xyz.crt
复制这两个文件到nginx-proxy
的certs
文件夹即完成证书配置
为了让nginx-proxy
允许上传大文件(镜像文件分为多层上传,每层几十上百M)
我们在nginx-proxy
的vhost.d
目录下创建hub.itmx.xyz_location
文件
client_max_body_size 1g;
并添加目录挂载,修改nginx-proxy
的docker-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