Docker私有仓库搭建

Docker私有仓库搭建

起因

众所周知的原因,我们访问 hub.docker.com 很慢,需要使用加速镜像,具体如何使用,请看官自行搜索,这里不做重点说明,这里要说的是另外一种加速的方法:搭建私有镜像。

环境说明

受制于开发环境,我在 Windows Server 2016 Standard 中构建了很多 Images, 计划在hyper-v中创建debian系统(纯命令版本,无GUI),在debian中搭建私有的docker镜像仓库,然后将Host(Windows Server 2016 Standard)中构建的镜像上传到 debian 中, debian中仓库中存放的镜像路径使用-v操作映射到debian系统的 root/registry 路径下。

  1. Windows Server 2016 Standard 安装(略)

  2. Hyper-v 安装(略)

  3. 在hyper-v中安装debian并配置

    1. 首先在hyper-v中新建一个虚拟网络交换机,类型选“外部”,选中物理网卡点确定;
      Docker私有仓库搭建

    2. 下载最小的debian镜像(ISO文件),大概300多MB,设置启动镜像后,还要在hyper-v中选中虚拟机,在设置里面将安全启动项勾掉
      Docker私有仓库搭建

    3. 安装debian系统(略)

    4. 配置sudo
      由于安装的是网络版镜像,安装好的系统没有sudo,执行sudo command的时候会报sudo: command not found的错误,解决方案如下:

      1. 切换到root用户,输入root口令(安装debian的时候设置的)
        $ su
        
      2. 更新软件源并安装sudo
        $ apt update
        $ apt install sudo
        
      3. 执行visudo修改sudoers(推荐),还有一种方式是 vi /etc/sudoers(不推荐)
        ...
        # User privilege specification
        root       ALL=(ALL) ALL
        youruser   ALL=(ALL) ALL
        ...
        
      4. 不需要重启即可使用。
    5. 设置debian系统网卡

      $ sudo vi /etc/network/interfaces
      

      将动态获取地址注释掉,用如下代码代替

      ...
      # The primary network interface
      # iface eth0 inet dhcp
      iface eth0 inet static
      address 192.168.0.90
      netmask 255.255.255.0
      gateway 192.168.0.1
      

      重新启动

      $ sudo reboot
      
  4. debian中安装docker

    1. 我用的是一键安装脚本
      $ curl -fsSL get.docker.com -o get-docker.sh
      $ sudo sh get-docker.sh
      
    2. 测试安装
      $ sudo docker info
      

开始搭建私有仓库(registry)

  1. 创建并运行registry
    有了docker,一切都变得梦幻般美好,一个命令:

    $ sudo docker run -d -p 5000:5000 -v /root/registry:/var/lib/registry  --restart always registry:2
    

    解释一下参数:

    • -d 后台运行;
    • -p 5000:5000 端口映射 主机的5000端口(debian系统):容器的5000端口
    • -v 路径map,将主机的 /root/registry 路径 map 到容器的 /var/lib/registry
    • --restart always ,恩,这个解释起来优点麻烦,在我这里的意思是开机启动,官方的解释见Start containers automatically

    这样,私有 registry 就运行起来了,且支持开机启动。

  2. 在 windows server standard 中设置虚拟机为自动启动
    Docker私有仓库搭建
    这样当物理机(windows server 2016)启动时,debian虚拟机会自动启动,debian系统内的docker 仓库也会自动启动

  3. 使用

    1. tag 镜像

      PS > docker tag windowsservercore-demo 192.168.0.90:5000/windowsserver-core-demo
      
    2. 上传镜像

      1. 先要修改配置文件daemon.json
        windows下的路径是 c:/programdata/docker/config/daemon.json, linux下的路径 /etc/docker/daemon.json
        在配置文件中增加节点:
        {
            "insecure-registries": ["192.168.0.90:5000"]
        }
        
      2. restart docker
        PS > restart-service *docker*
        
      3. 上传
        PS > docker push 192.168.0.90:5000/windowsserver-core-demo
        
    3. 用 curl 查看仓库中的镜像

      PS > curl 192.168.0.90:5000/v2/_catalog
      

      或者直接用网页打开 http://192.168.0.90:5000/v2/_catalog ,结果是一样的

    4. 下载镜像(局域网内可用)

      PS > docker pull 192.168.0.90:5000/windowsserver-core-demo
      

参考资料