[docker]在本地/内部配置部署docker镜像仓库
需求
通常我们在docker中拉取的镜像都是在docker hub在线存储库中获取的,这个在线存储库里的docker镜像可以由任何用户发布和使用。显然,这在某些场景下是不适用的,比如企业级别的隐私项目,又或者是公司完全处于内网状态不能访问外网,再或者是想个性化定制某些配置等等,这时就需要用到私有存储库了
注意:私有存储库是基于docker hub在线存储库的registry镜像搭建的。
前置条件
- debian/ubuntu/centos
- 已安装docker
步骤
- 拉取并运行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
- 写入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 # 重启服务
- 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库类似:
通过上述地址可追溯到相应的镜像及其版本。