Docker hub 是用于管理公共镜像的仓库,跟代码库托管到 GitHub 是一个道理。在一些场景下,我们需要拥有一个私有的镜像仓库用于管理我们自己的镜像,本文就来介绍搭建私有 Docker 仓库。

运行

docker pull registry

参数解释:

  • -v /opt/registry:/var/lib/registry 表示将本地目录 /opt/registry 映射到仓库容器中的 /var/lib/registry 目录,该目录中存储仓库中的镜像文件。
docker run --name registry \
-p 5000:5000 \
-v /opt/registry:/var/lib/registry \
--restart=always \
-d registry

打开浏览器输入 http://127.0.0.1:5000/v2,返回 {} 说明 registry 运行正常。

测试

接下来我们就要操作把一个本地镜像 push 到搭建的私有仓库中。

# 下载 busybox 镜像
docker pull busybox
# 修改 busybox 镜像的 tag
docker tag busybox 115.47.124.247:5000/busybox
# 上传到私有仓库
docker push 115.47.124.247:5000/busybox

不过会 push 失败,因为 docker 从 1.3.X 之后,与 docker registry 交互默认使用的是 https,然而此处搭建的私有仓库只提供 http 服务,所以当与私有仓库交互时就会报上面的错误。为了解决这个问题需要在启动 docker server 时增加启动参数为默认使用 http 访问。

The push refers to a repository [115.47.124.247:5000/busybox]
Get https://115.47.124.247:5000/v1/_ping: http: server gave HTTP response to HTTPS client

修改 docker 启动配置文件

vi /usr/lib/systemd/system/docker.service

找到 ExecStart,在该行最后新增 --insecure-registry 115.47.124.247:5000

ExecStart=/usr/bin/dockerd  --insecure-registry 115.47.124.247:5000

重启 docker,即可生效

systemctl daemon-reload
systemctl restart docker

查看镜像

curl -XGET http://registry:5000/v2/_catalog

删除镜像

# name:镜像名称
# reference: 镜像对应sha256值
curl -I -X DELETE /v2/<name>/manifests/<reference>

# 例
curl -I -X DELETE http://115.47.124.247:5000/v2/busybox/manifests/sha256:897638d338e0a6b7e9d7fe77df840fb35ef6e225aa3eb185b5e3f7e565615ecf

上面搭建的 docker 私有仓库是命令行界面的,很丑陋。有个开源项目叫 harbor,是 在 docker registry 基础上带了个 web 界面,还支持冗余等,是个非常不错的项目,下篇将介绍搭建 harbor。

results matching ""

    No results matching ""