日度归档:2020年10月7日

建立私有docker镜像源

参考:https://linuxhint.com/setup_own_docker_image_repository/

最近非常着迷docker和kubernetes这玩意,感觉完全就是未来发展方向,于是决定好好研究一番。

有时候服务器处于内网环境,不好上网扒镜像,又或者说,由于一些众所周知的原因,从docker hub扒镜像会非常的缓慢,所以,我觉得有必要建立一个本地的docker镜像源。

建立方法

建立方法很简单,docker官方提供了一个镜像方便人们建立私有的镜像源。

根据参考文档,可以直接用一条命令来将服务跑起来,就像这样:

docker container run -d -p 5000:5000 --name registry -v<br> ~/docker/registry:/var/lib/registry registry

不过我个人推荐使用yaml文件+docker compose,方便日后维护,也习惯一下这种方式,为以后上kubernetes做准备。我就弄了一个,内容如下:

[root@docker-repo ~]# cat repo.yaml 
version: "2.4"
services:
  private_docker_repo:
    image: library/registry:latest
    ports:
      - "5000:5000"
    restart: unless-stopped
    volumes:
      - /storage:/var/lib/registry

然后,只要用

docker-compose -f repo.yaml up -d

就可以将服务跑起来了。-f参数是用来指定yaml文件,如果使用了docker-compose.yml作为文件名,可以省略掉。不过推荐自定义文件名,这样就可以将很多yaml放在同一个文件夹了。

日后如果registry镜像有更新,或者是修改什么设置,只要修改好配置文件,再pull一次和up一次即可,docker-compose会处理好更新的。

例子中,我的给机器挂了个100G的盘,挂在了/storage,到时候,数据会存在这里。

DNS修改

然后就是处理dns或者hosts,根据参考文档来看,不做也行,不过做了的话,可以少打几只字。( =ω=)

推荐做dns强制解析,那就不需要和原文一样去修改hosts。以后镜像源迁移、或者是docker母机增加减少之类的就不需要每次都处理hosts文件了。

举个例子,我修改DNS,将pdr(private docker registry)解析为镜像源服务器地址。

在docker母机上增加源

默认情况下,docker只会从docker hub拉镜像,要指定似有的源,就要修改一下配置文件。配置文件是/etc/docker/daemon.json,如果没有的话,就新建一个,添加以下内容:

{
"insecure-registries": ["pdr:5000", "192.168.11.207:5000"]
}

然后,重启docker。(对,是要重启docker的,所有容器都会重启)然后就可以在客户端使用这个似有源了。

对于在私有源上的镜像,用法和官方源差不多,只不过用户名变成了“服务器ip:端口”,于是,镜像名称格式如下:

IP:PORT/IMAGE_NAME:TAG_NAME

比如说,mariadb,在docker hub上,镜像的名称就是mariadb,或者其他用户的话就是xxx/mariadb(xxx是用户名)。但是在私有源上,就是192.168.11.207:5000/mariadb,或者在处理了dns或者hosts之后,可以用pdr:5000/mariadb。(看,可以少打很多个字!)

至此,似有镜像源搭建完成!

至于镜像源里面有什么镜像和有什么tag这个我暂时还没发现,暂时只发现在/storage/docker/registry/v2/repositories能看到有啥镜像。根据官方文档的说明:可以使用 http://服务器IP:5000/v2/_catalog 查看都有什么image。

列出镜像

做了个小脚本,放在docker-compose文件挂载的目录里面,我的是/storage,然后就可以直接列出镜像和列出指定镜像的tag了

#!/bin/bash
case $1 in
	"")
		ls -l docker/registry/v2/repositories/ | grep "drwx" | awk '{print $9}'
		;;
	*)
		ls -l docker/registry/v2/repositories/$1/_manifests/tags/ | grep "drwx" | awk '{print $9}'
		;;
esac

效果如下图