搭建公司内部的docker私有仓库

已经有了docker hub,为什么要搭建私有仓库

docker hub为我们提供了很多官方镜像和个人上传的镜像,我们可以下载机构或个人上传上去的images,也可以上传我们本地images,然后我们需要的时候也可以随时下载。看起来docker hub中央仓库很方便,但也有不方便的地地方:

1、我们在docker hub上push和pull images速度可能受影响,有时候可能docker主页都打不开
2、我们在生产或测试环境使用的docker images可能存放着内部code,tools,不想被外部人员获取,只允许内网的开发人员使用,如果上传到docker hub上,所有人都可以看到。这和使用gitlab自己搭建的代码仓而不用GitHub上的公共库是一样的道理

前言

和Maven的管理一样,docker不仅提供了一个中央仓库,同时也允许我们使用registry搭建本地私有仓库。使用docker私有仓库有许多优点:
一、节省网络宽带,针对于每个镜像,不需要每个人都去中央仓库上面下载image,只需要从私有仓库中下载即可;
二、提供镜像资源利用,针对于公司内部使用的images,docker push到本地的私有仓库中,以供公司内部人员使用

搭建前环境准备

环境:两个装有docker的Ubuntu虚拟机
虚机一:192.168.112.132 用户开发机
虚机二:192.168.112.136 用作私有仓库

此处我们准备了两个虚拟机,分别安装了docker,其中132上用作开发机,136上用作registry私有仓库机器。

搭建docker 私有仓库

首先在136上下载registry

sodu docker pull registry:2

在启动该容器时,默认情况下,会将仓库存储在容器的/var/lib/registry目录下,这样的话,如果该容器被删掉,则存放于容器中的images也会丢失,所以我们一般情况下会指定本地一个目录挂载到容器的/var/lib/registry下,通过这种方式来启动,如下:

sudo docker run -d -p 5000:5000 -v /home/hzq/registry:/var/lib/registry --restart always --privileged true --name registry registry :2
  • -v /home/hzq/registry:/var/lib/registry 默认情况下,会将仓库存放于容器内的/var/lib/registry目录下。指定本地目录挂载到容器,在容器被删掉之后,存放的数据还保留在宿主机的/home/hzq/registry

  • -p 5000:5000 端口映射

  • –restart always 在容器退出时总是重启容器,主要应用在生产环境

  • –privileged true 在CentOS7中的安全模块selinux把权限禁掉了,参数给容器加特权,不加上传镜像会报权限错误OSError: [Errno 13] Permission denied: ‘/tmp/registry/repositories/liibrary’)或者(Received unexpected HTTP status: 500 Internal Server Error)错误

  • –name registry 指定容器的名称
    在这里插入图片描述
    通过执行上面的run命令,实际我们已经完成了Docker私有仓库的搭建。

很简答吧!!!下面我们进行测试使用以下。

测试私有仓库的pull和push

接下来我们就要操作把一个本地镜像push到私有仓库中
在132机器上build一个小镜像用作push和pull测试

docker pull centos

接下来修改一下该镜像的tag。

docker tag centos 192.168.112.136:5000/centos

接下来把打了tag的镜像上传到私有仓库。

docker push 192.168.112.136:5000/centos

可以看到push失败,具体错误如下:

Error: Invalid registry endpoint https://192.168.0.153:5000/v1/: Get https://192.168.0.153:5000/v1/_ping: dial tcp 192.168.0.153:5000: connection refused. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add --insecure-registry 192.168.112.136:5000 to the daemon’s arguments. In the case of HTTPS, if you have access to the registry’s CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/192.168.0.153:5000/ca.crt

因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。

为了解决这个问题需要在启动docker server时增加启动参数

Ubuntu下修改方式如下:

修改docker启动配置文件(此处是修改132机器的配置)Ubuntu下配置文件地址为:/etc/init/docker.conf
在其中增加–insecure-registry 192.168.112.136:5000

$ sudo vi /etc/init/docker.conf

在这里插入图片描述
若有多个私有仓库需要添加

以下示例配置develop-harbor.geostar.com.cn,test-harbor.geostar.com.cn,release-harbor.geostar.com.cn三个私有镜像仓库

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock \
    --insecure-registry develop-harbor.geostar.com.cn \
    --insecure-registry test-harbor.geostar.com.cn \
    --insecure-registry release-harbor.geostar.com.cn \

重启:

$ systemctl daemon-reload 
$ systemctl restart docker

注意: 重启docker之后,如果不起作用,修改/lib/systemd/system/docker.service 配置文件,添加内容同上
–insecure-registry 10.12.101.131:5000

Centos下修改方式如下:

修改/etc/docker/下的daemon.json文件

sudo vim /etc/docker/daemon.json

添加:{ “insecure-registries”:[“192.168.49.132:5000”]} ##192.168.49.132就是私有仓库的IP域名
在这里插入图片描述
添加多个私有仓库如下:

{
    "insecure-registries": [
        "hub.docker.jiankunking.io:5000"
    ]
}
//多个私服写法,逗号分隔即可
{
    "insecure-registries": [
        "test.docker.jiankunking.io:5000", 
        "hub.docker.jiankunking.io:5000"
    ]
}

修改daemon.json文件之后,修改docker启动配置文件/usr/lib/systemd/system/docker.service 添加一行:
在这里插入图片描述
修改完之后,重启Docker服务

$ systemctl daemon-reload 
$ systemctl restart docker

在这里插入图片描述
重启完之后我们再次运行推送命令,把本地镜像推送到私有服务器上。

$ sudo docker push 192.168.112.136:5000/centos

在这里插入图片描述
可以看到镜像已经push到私有仓库中去了,接下来我们删除本地镜像,然后从私有仓库中pull下来该镜像
在这里插入图片描述
删除了本地镜像,然后我们从私有镜像仓库中下载该镜像

$ sudo docker pull 192.168.112.136:5000/centos
在这里插入图片描述
到此就搭建好了Docker私有仓库。

查看仓库中已有的images

语法:curl IP:端口/v2/_catalog
例如:

curl 127.0.0.1:5000/v2/_catalog
{"repositories":["ubuntu"]}

说明仓库已经有我们推送的images了
在这里插入图片描述

查看已启动容器隐藏的运行指令(非run参数):

docker ps -a --no-trunc

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
搭建一个Docker私有仓库,你可以按照以下步骤进行操作: 1. 安装Docker:确保你的服务器上已经安装了Docker。你可以根据你的操作系统和版本在Docker官方网站上找到相应的安装指南。 2. 创建一个存储库文件夹:在服务器上选择一个适当的位置,创建一个用于存储镜像和相关数据的文件夹。 3. 启动私有仓库容器:使用以下命令启动一个私有仓库容器,并将存储库文件夹挂载到容器中: ``` docker run -d -p 5000:5000 --restart=always --name registry -v /path/to/repository:/var/lib/registry registry:2 ``` 这将在端口5000上启动一个私有仓库,并将容器命名为"registry"。请将"/path/to/repository"替换为你在第2步中创建的存储库文件夹的路径。 4. 配置Docker客户端:在需要访问私有仓库的机器上,配置Docker客户端以允许访问私有仓库。编辑或创建`/etc/docker/daemon.json`文件,并添加以下内容: ``` { "insecure-registries" : ["your-server-ip:5000"] } ``` 将"your-server-ip"替换为你运行私有仓库的服务器的IP地址。 5. 重启Docker服务:重启Docker服务以使配置生效。根据你的操作系统,使用适当的命令重启Docker服务。 6. 测试私有仓库:现在你应该能够使用`docker push`和`docker pull`命令来推送和拉取镜像到你的私有仓库了。例如: ``` docker pull ubuntu docker tag ubuntu your-server-ip:5000/ubuntu docker push your-server-ip:5000/ubuntu ``` 这些命令将下载官方的Ubuntu镜像,然后将其标记为你的私有仓库地址,并将其推送到私有仓库中。 现在,你已经成功搭建了一个Docker私有仓库,可以在你的机器上使用它了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值