docker 私有仓库搭建
我们都知道maven私服,就是在服务器上有一块jar包共享区域,大家可以在共享仓库里面进行pull或者push。docker的私服差不多也是这个概念,只不过这块共享区域放的不是jar, 而是镜像文件,这样就能实现不同服务器都可以从这块共享区域上传或者拉取镜像,十分方便。我们知道的docker仓库有DockerHub, 还有aliyun提供的镜像服务,docker私服是用docker-registry技术实现的,所以先要下载docker-registry镜像并启动registry容器。
- 下载 registry 镜像,从官网获取registry 最新镜像
1 | docker pull registry:latest |
1. 简单启动registry,不需要TSL安全认证以及用户认证
- ‐d:表示在后台运行该容器
- ‐p 5000:5000:私有镜像仓库容器内部默认暴露的5000端口映射到宿主机的5000端口
- ‐‐restart=always:表示容器启动后自动启动本地私有镜像仓库
- ‐‐name registry:表示为生成的容器命名为registry
- ‐v /usr/docker/registry:/var/lib/registry:表示将容器内的默认存储置/var/lib/registry中的数据挂载到宿主机的/usr/docker/registry目录下,这样当容器销毁后,在容器中/var/lib/registry目录下的数据会自动备份到宿主机指定目录
docker run ‐d ‐p 5000:5000 ‐‐restart=always ‐‐name registry ‐v /usr/docker/registry:/var/lib/registry registry:latest # 检测registry 是否启动 docker ps
- 配置 /etc/docker/daemon.json 文件, 由于registry默认是安全的,http 需要配置docker仓库地址
{ "insecure-registries":[ "192.168.1.1"], "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn/" ], }
- 操作docker
systemctl restart docker # 配置文件生效需要重启docker服务 docker tag registry:latest 192.168.1.1:5000/registry:latest # 镜像重命名。由于推送到本地私有镜像仓库的镜像名必须符合“仓库IP:端口号/repository”的形式 docker push 192.168.1.1:5000/registry:latest # 通过push命令推送镜像到仓库
2. 推荐方式启动registry
- 生成 CA 根证书以及根证书私钥.
‐x509:x509是一个自签发证书的格式,‐days 3650:表示证书有效期,docker.xxx.com:表示具体部署Docker Registry本地镜像仓库的域名(可以使用本地ip:端口),domain.key和domain.crt:就是生成的证书文件,rsa:2048:是证书算法长度
# 生成一个CA私钥 openssl genrsa -out /home/certs/ca.key 4096 # 创建一个自签名证书,有效期为10年 openssl req -x509 -new -nodes -key ca.key -subj "/CN=docker.xxx.com" -days 3650 -reqexts v3_req -extensions v3_ca -out /home/certs/ca.crt
或者
openssl req ‐x509 ‐days 3650 ‐subj '/CN=docker.xxx.com' ‐nodes ‐newkey rsa:2048 ‐keyout /home/certs/ca.key ‐out /home/certs/ca.crt
- 生成用户密码
1 2 | mkdir -p /opt/auth/ # 路径随意 htpasswd -Bbn admin admin.123 > /opt/auth/htpasswd # admin 是用户名,admin.123是密码 |
- 启动registry
1 2 3 4 5 6 7 8 9 | docker run -p 5000:5000 --restart=always --name registry -v /usr/docker/registry:/ var /lib/registry -v /opt/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v /home/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/ca.crt -e REGISTRY_HTTP_TLS_KEY=/certs/ca.key -d 708bc6af7e5ed |
- 将证书复制到客户端的宿主机上
1 | 将刚才生成的证书 /home/certs/ca.crt 复制到客户端宿主机的/etc/docker/certs.d/192.168.1.1:5000/ca.crt |
- 登录docker 仓库
docker login -u admin -p admin.123 192.168.1.1:5000
- 使用域名的方式访问docker 仓库
如果想要使用域名的方式访问docker 仓库,那么修改/etc/hosts 文件,在文件末尾加上域名解析 docker.xxxx.com 192.168.1.1 。docker 推送镜像 docker push 192.168.1.1:5000/registry:latest 或者 docker push docker.xxxx.com:5000/registry:latest 。如果不想要ip或者域名后面带上端口,那么将registry 启在80 或者443端口。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?