docker搭建私有仓库

背景

在公司里面,自己的项目在打包成镜像时,可能需要将镜像共享给其它同事使用,如果使用公有仓库共享可能会不安全,且拉取镜像时受网络带宽影响,拉取镜像时会很慢。为解决这些问题,用户可以使用docker官方提供的registry来搭建本地私有仓库。

Registry简介

registry是一种无状态,高扩展性的服务端应用,它可用于存储并使你可以分发你的容器镜像和其它内容。registry是基于Apache License开源协议的,最初由docker官方提供,后捐赠给CNCF

部署Registry

registry是搭建仓库的应用程序,本身也是需要部署的,在docker中同样以容器的方式运行。

1.拉取registry镜像

docker pull registry

2.运行registry镜像

docker run -d -p 5000:5000 --restart=always --name=my-registry registry
  • docker run   运行容器的基本命令
  • -d   表示在后台执行,如果你想将终端焊住,可以用-it
  • -p 5000:5000   将宿主机的5000端口映射到容器中的5000端口,格式是:-p 宿主机端口:容器端口,registry容器内的默认端口是5000,可以通过环境变量进行修改,稍后会进行介绍
  • –restart=always   设置重启策略为总是重启,即Linux重启后容器也会自动重启
  • –name=my-registry   设置容器的名称为my-registry
  • registry   运行的容器使用的镜像是registry

使用docker ps命令查看容器列表,如下截图,表明仓库就已经搭建好了:

在这里插入图片描述

列举两个运行registry常用的配置:

  • 挂卷
    docker history查看镜像的层
    在这里插入图片描述
    可以看到,运行容器时,仓库的镜像是存储在/var/lib/registry下面,使用-v选项将容器中的地址挂载都宿主机中。
docker run -d -p 5000:5000 --restart=always --name=my-registry -v /docker/volume/registry:/var/lib/registry registry

上面的-v /docker/volume/registry:/var/lib/registry表示将容器中的/var/lib/registry挂载到宿主机的/docker/volume/registry目录,这样,仓库中的镜像文件就保存在了宿主机中,方便管理。

  • 自定义容器内的端口
    需要使用到环境变量REGISTRY_HTTP_ADDR
docker run -d -p 5000:5000 --restart=always --name=my-registry -e REGISTRY_HTTP_ADDR=0.0.0.0:5001 registry

上面的-e REGISTRY_HTTP_ADDR=0.0.0.0:5001表示将容器内的端口设置为5001。

3.推送镜像到本地仓库

3.1 拉取测试镜像

docker pull redis

从远程仓库拉取一个redis镜像作为测试镜像。

3.2 给测试镜像打标签

docker tag redis localhost:5000/my-redis

给redis镜像打标签,docker会从localhost:5000/my-redis解析ip和端口为localhost:5000,后续拉取或推送镜像时都会从localhost:5000这个服务器上去拉取或推送。

执行上述命令后,用docker images查看一下镜像列表:

在这里插入图片描述

3.3 推送镜像

docker push localhost:5000/my-redis

执行上述命令,docker会将my-redis镜像推送到本地为5000端口的镜像仓库中。

使用curl localhost:5000/v2/_catalog命令查看仓库中的镜像

执行推送命令前:

执行推送命令后:

在这里插入图片描述

4.从本地仓库拉取镜像

4.1先删除本地镜像

docker rmi localhost:5000/my-redis

执行上述命令后使用docker images查看本地镜像列表:

在这里插入图片描述

可以看到本地不存在localhost:5000/my-redis镜像了

4.2从本地仓库拉取镜像

docker pull localhost:5000/my-redis

执行上述命令后使用docker images查看本地镜像列表:

在这里插入图片描述

拉取成功!

配置Registry可用IP访问

上面的示例中都是通过localhost:5000来访问仓库的,如果通过仓库所在服务器的IP地址来访问,你会发现拉取或推送不了镜像。这是由于registry默认是以HTTPS方式推送的,由于我们没有CA,是没办法通过HTTPS来访问,不过,可以通过配置来取消这个限制。

  • windows
    Docker Desktop->Settings>Docker Engine,在insecure-registries中添加仓库所在服务器的IP和端口
    在这里插入图片描述
    点击Apply & restart

  • Linux
    在/etc/docker/daemon.json添加insecure-registries配置(Linux安装的docker默认没有daemon.json文件,需要你自己手动创建)。

{
  "insecure-registries": [
    "192.168.xx.xx:5000"
  ]
}

注意:以上配置是在客户端上配置

使用systemctl restart docker命令重启docker,重启后才会生效

测试:
在这里插入图片描述
推送成功!

  • 27
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值