docker私有仓库

搭建 docker 私有仓库

使用官方镜像 registry 当作仓库

生成 http 认证文件

根据 usernamepassword 生成文件 docker.htpasswd

1
docker run --rm --entrypoint htpasswd httpd:alpine -Bbn username password > docker.htpasswd

准备 http 证书

运行仓库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
services:
registry:
image: registry
environment:
REGISTRY_AUTH_HTPASSWD_REALM: basic-realm
REGISTRY_AUTH_HTPASSWD_PATH: /etc/docker/registry/htpasswd
REGISTRY_HTTP_TLS_CERTIFICATE: /etc/letsencrypt/live/${DOMAIN_NAME}/fullchain.pem
REGISTRY_HTTP_TLS_KEY: /etc/letsencrypt/live/${DOMAIN_NAME}/privkey.pem
volumes:
- ./docker.htpasswd:/etc/docker/registry/htpasswd # http认证文件
- /etc/letsencrypt:/etc/letsencrypt # letsencrypt http证书
- registry:/var/lib/registry # 镜像存储位置
volumes:
registry:

反向代理

将运行的容器的 5000端口 方向代理出去 网址是 registry.$DOMAIN_NAME

修改 hosts

避免走公网, 本地上传更快

1
echo "127.0.0.1 registry.$DOMAIN_NAME" >> /etc/hosts

本机使用

登录

1
docker login registry.$DOMAIN_NAME

制作镜像

1
docker tag nginx:latest registry.$DOMAIN_NAME/nginx:latest

上传镜像

1
docker push registry.$DOMAIN_NAME/nginx:latest

他人使用

登录

1
docker login registry.$DOMAIN_NAME

拉取镜像

1
docker pull registry.$DOMAIN_NAME/nginx:latest

其他

如果docker login时报错

1
Error saving credentials: error storing credentials - err: exit status 1, out: `Cannot autolaunch D-Bus without X11 $DISPLAY`

问题是系统缺少一个密码管理包gnupg, 它用于加密, 我们在登录时需要这个包将密码加密后才能完成

1
apt install -y gnupg2 pass

参考资料