先说说为啥要自己搭镜像仓库。Docker Hub虽然是官方的公共仓库,但要是放商业项目或者敏感数据,那肯定不合适。而且公共仓库有时候拉镜像慢得像蜗牛,尤其是国内网络,动不动就超时。私有仓库呢,就在内网跑,速度飞起,还能自定义权限管理,特别适合团队协作。比如咱们可以用Docker官方提供的Registry工具,轻量级又简单,几分钟就能拉起一个服务。

搭仓库前,得先确保环境没问题。服务器最好是Linux系统,我这里用的是Ubuntu 20.04,Docker版本是20.10.7。如果还没装Docker,可以去官网下个脚本,一行命令搞定:。装完后记得启动Docker服务:,再设成开机自启:。这些基础操作就不多啰嗦了,网上教程一堆。

接下来是重头戏——部署Registry。Registry其实就是一个Docker镜像,我们可以直接用Docker拉下来跑。先打开终端,输入命令拉取最新版的Registry镜像:。这个镜像不大,就几十MB,拉取速度挺快的。拉完后,用看看是不是已经下载成功了。

然后就是运行Registry容器。这里我用了最简单的命令:。解释一下参数:是让容器在后台跑,是把容器的5000端口映射到主机的5000端口,是给容器起个名字,方便后面管理。执行完这步,Registry服务就已经在后台运行了,可以用检查一下状态,如果看到my-registry在列表里,就说明启动成功了。

光启动还不够,得测试一下仓库能不能用。先随便找个本地镜像测试,比如我有个测试镜像叫my-app:latest。要推送到私有仓库,得先给镜像打上标签,指向本地仓库地址。假设我的服务器IP是192.168.1.100,那就用命令:。这步是把镜像重命名,加上仓库地址前缀。接着推送镜像:。如果一切正常,终端会显示上传进度,最后提示推送成功。

推完了,还得验证能不能拉取。可以先把本地镜像删了:,然后拉取回来:。如果拉取成功,镜像又回来了,那就说明仓库工作正常。这里有个小细节:如果用的是HTTP而不是HTTPS,Docker默认会报安全错误。解决办法是修改Docker的daemon.json文件,加个信任仓库地址。编辑文件:,内容加上:,保存后重启Docker服务:。这样就能绕过HTTPS检查了。

不过,这只是最基础的搭建。真要用于生产环境,还得考虑数据持久化和安全。Registry默认把镜像数据存在容器内部,如果容器删了,数据就没了。所以最好用卷挂载,把数据存到主机上。运行容器时可以加个参数:,这样镜像数据就保存在主机的/home/registry-data目录下了。安全方面,如果仓库要对外网开放,建议配个TLS证书,用Nginx做反向代理,加上账号密码认证。不过这些高级配置,今天就不展开说了,以后有机会再细聊。

最后,再提点使用心得。私有仓库搭好后,团队开发效率确实提升了不少。大家可以把常用基础镜像都推上去,省得每次都从公网拉。另外,记得定期清理旧镜像,不然磁盘容易爆满。可以用Registry的垃圾回收功能:先进入容器:,然后执行,就能删掉不再引用的镜像层。

总之,自己搭Docker镜像仓库不难,关键是动手试试。遇到问题多查文档,或者去社区问问,一般都能解决。希望这篇分享能帮到你们,如果有更好的法子,欢迎一起交流!

更多推荐