[docker]在本地/内部配置部署docker镜像仓库

需求

通常我们在docker中拉取的镜像都是在docker hub在线存储库中获取的,这个在线存储库里的docker镜像可以由任何用户发布和使用。显然,这在某些场景下是不适用的,比如企业级别的隐私项目,又或者是公司完全处于内网状态不能访问外网,再或者是想个性化定制某些配置等等,这时就需要用到私有存储库了

注意:私有存储库是基于docker hub在线存储库的registry镜像搭建的。

前置条件

  • debian/ubuntu/centos
  • 已安装docker

步骤

  1. 拉取并运行registry镜像
docker pull registry:latest
docker run -d 
\--name registry2 
\-p 5000:5000     
\--restart=always     
\-v /opt/data/registry:/var/lib/registry  # 本地文件夹映射
\-e SQLALCHEMY_INDEX_DATABASE=sqlite:opt/docker-image/docker-registry.db  #持久化
\-e STORAGE_PATH=/opt/docker-image registry
  1. 写入docker配置文件

vim /etc/docker/daemon.json

{
  "experimental": false,
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn"
  ],
  "insecure-registries": [
    "192.168.1.6:5000"
  ],
  "debug": true,
  "live-restore": true  # 重载docker守护进程而不重启容器
}
systemctl restart docker.service  # 重启服务
  1. push和pull验证测试

确认registry正在运行/查询所有镜像:

curl http://192.168.1.6:5000/v2/_catalog
docker pull hello-world  # 从公有仓库拉取镜像
docker tag hello-world:latest 私有仓库IP:5000/hello-world:latest  # 更改tag
docker push 私有仓库IP:5000/hello-world:latest # push到私有镜像
docker pull 私有仓库IP:5000/镜像名称:镜像版本号 # 从其他客户端拉取

docker镜像的命名规则:
hub.docker.com/study/mysql:lastest
服务器地址/命名空间/镜像名称:版本号

这是一个完整的image名称,学习过golang语言的朋友大概很熟悉这种规则,与golang库类似:
通过上述地址可追溯到相应的镜像及其版本。

posted @ 2022-05-06 10:42  wildkid1024  阅读(508)  评论(0编辑  收藏  举报