创建 docker 私有化仓库

Posted 笨小孩@GF 知行合一

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建 docker 私有化仓库相关的知识,希望对你有一定的参考价值。

  • 私有仓库介绍
  • 有时候使用 Docker Hub 这样的公共仓库可能丌方便(有时候无法访问),用户可以创建一个本地仓库供私人使用,这里使用官方提供的工具 docker-registry 来配置私有库 
  • 私有仓库好处:
    1、节约带宽
    2、可以自己定制系统
  • 搭建私有仓库的思路:
    老的思路:下载源码 tar/yum 安装 -》 安装-》修改配置文件-》启动服务
  • 使用 docker 思路:直接下载并使用 registry 镜像吭劢 docker 实例,这样仓库就搭建成功了。
  • 有了 docker 以后,所有软件丌再以 office.exe 或者 lrzsz.rpm 形式发布,而以 docker 镜像发布。只需要下载 docker 镜像并运行一个 docker 实例。有了 docker 以后,再也不用为安装 linux 服务而发愁!
  • 实验环境:
    docker 私有仓库地址:192.168.2.234
    docker 服务器地址 : 192.168.2.2  会使用 2.234 上 docker 私有仓库来pull/push 镜像
  • 首先配置 192.168.2.234 为 docker 私有仓库
  • yum install -y yum-utils device-mapper-persistent-data lvm2
  • yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • yum install docker-ce docker-ce-cli containerd.io -y
  • systemctl enable docker --now
  • 停止防火墙,注意每次重启 docker 服务都会重新加载 iptables 

  • 拉取 registry 镜像。 registry 镜像中包括搭建本地私有仓库的软件
  • docker pull registry

  •  不指定版本会 pull 最新 latest
  • registry 镜像中已经把搭建私有库程序安装好了,只需要使用 registry 镜像运行一个 docker 实例就可以了。
  • 默认情况下,Registry 程序的存放镜像信息的目录是/var/lib/registry 目录下,这样如果容器被移除,则存放于容器中的镜像也会丢失,所以一般情况下会指定本地物理机一个目录如/opt/registry 挂载到容器的/var/lib/registry 下。
  • 使用-v 参数,指定本地持久的路径。registry 服务监听到端口号,默认是 5000
  • docker run -d -p 5000:5000 -v /opt/registry:/var/lib/registry registry:latest
  • 会自动创建 registry 目录

  • 查看私有仓库中的镜像列表:
    http://192.168.2.234:5000/v2/_catalog
  • 发现,现在还是空的,后面上传了本地 docker 镜像到私有仓库中,就有数据了。 


  • 在 192.168.2.2上搭建 docker 服务并使用私有仓库

  • yum install -y yum-utils device-mapper-persistent-data lvm2
  • yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • yum install docker-ce docker-ce-cli containerd.io -y
  • systemctl enable docker --now

  • 修改 docker 配置文件,指定 docker 镜像加速结点为:私有仓库的地址
  • vim /etc/docker/daemon.json #创建这个 daemon.json 文件,写入以下内容:
    {
     "insecure-registries": [ "192.168.2.234:5000" ] 
    }
  •  注:添加红色标记文字。 insecure-registries 不安全的注册。这里的不安全指的是走 http 协议,要想安全传输镜像,需要使用 https 协议。私有仓库一般是局域中使用,所以直接使用 http 协议就可以了。

  • 上传本地镜像到私有仓库,下载一个实验用的 容器 busybox
  • docker pull busybox
  • 注:
    BusyBox 概述: BusyBox 是一个集成了一百多个最常用 Linux 命令和工具的软件。BusyBox 包含了 BusyBox 包含了一些简单的工具,例如 ls、cat 和 echo 等等,还包含了一些更大、更复杂的工具,例 grep、find、mount 以及 telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说BusyBox 就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 android 系统的自带的 shell。

  • 创建镜像链接并为基础镜像打个标签(复制一个镜像并起一个名字)
    语法: docker tag 原镜像名:标签 私有仓库地址/新镜像名:标签
  • docker tag busybox:latest 192.168.2.234:5000/busybox:latest 
  • 将刚新打好标签的 192.168.2.234:5000/busybox 镜像,push 到本地私有仓库中。
  • docker push 192.168.2.234:5000/busybox

  • 在 web 端刷新查看
  • 或者
  • curl http://192.168.2.234:5000/v2/_catalog

  • 在 234 上查看

  • 使用私有仓库中的镜像创建服务
  • 删除原先的镜像

  • 重新拉取镜像
  • docker pull 192.168.2.234:5000/busybox

  • 使用新导入的镜像,运行一个新 docker 实例:
  • docker run --rm 192.168.2.234:5000/busybox:latest echo "hello" 


  • 使用 harbor 搭建 Docker 私有仓库

  • harbor 介绍
    Docker容器应用的开发和运行离丌开可靠的镜像管理,虽然 Docker 官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的 Registry 也是非常必要的。Harbor 是由 VMware
    公司开源的企业级的 Docker Registry 管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界
    面、自我注册、镜像复制和中文支持等功能。
  • 官网地址:https://github.com/goharbor/harbor
  • 注:安装 harbor,系统根分区的可用空间需要大于 6G,否则安装时会报空间丌足。内存 2G 以上
  • 安装 docker-compose
  • 在线安装:
  • curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  • 添加执行权限
    chmod +x /usr/local/bin/docker-compose
  • 加入系统环境变量
  • vim /etc/profile.d/docker-compose.sh
    export PATH=/usr/local/bin:$PATH

  • 配置 Harbor
  • vim harbor.yml.tmpl #查看配置文件中的基本信息
  • # hostname 设置访问地址,可以使用 ip、域名,不可以设置为 127.0.0.1 戒 localhost
    改:  hostname = reg.mydomain.com 
    为:  hostname = 192.168.2.234
  • # 启动 Harbor 后,管理员 UI 登录的密码,默认是 Harbor12345,改为 123456
  • 改: harbor_admin_password = Harbor12345
  • 为: harbor_admin_password: 123456
  • 以下 3 处,默认就可以了
  • # 访问协议,默认是 http,也可以设置 https,如果设置 https,则 nginx ssl 需要设置 on
  •  ui_url_protocol = http
  •  data_volume: /data # 这是密钥存储路径,需要稍后手动创建这个目录
  • # mysql 数据库 root 用户默认密码 root123,实际使用时修改下
    db_password = root123
  • 建存储数据的目录:
    mkdir /data
    注:后期的私有库中的镜像存放路径是:/data/registry/ 

  • 部署启动 Harbor
  • mv harbor.yml.tmpl harbor.yml
  • ./prepare     #初始化安装环境

  •  安装 harbor
    ./install.sh #执行./install.sh,Harbor 服务就会根据当期目录下的/opt/harbor/docker-compose.yml 开始下载依赖的镜像,检测并挄照顺序依次吭劢各个服务。最终弹
    出以下画面,说明安装成功了。

  

  • 查看 Harbor 依赖的镜像及启动服务如下:

  • 使用 harbor 管理镜像
  • 打开浏览器 访问 http://192.168.2.234
  • admin 123456

  • 新建一个创库项目
    新建一个名称为 test 的项目,设置公开。
  • 注意:当项目设为公开后,任何人都有此项目下
    镜像的读权限。命令行用户不需要“docker login”就可以拉取此项目下的镜像。

  • 修改本地 docker 服务使用 http 协议和私有仓库通信
    在 daemon.json 中添加以下参数
    vim /etc/docker/daemon.json #创建此文件,并写入以下内容
    {
    "insecure-registries": [ "192.168.2.234" ] 
  • 注:出现这问题的原因是:Docker 自从 1.3.X 之后 docker registry 交互默认使用的是 HTTPS,但是搭建私有镜像默认使用的是 HTTP 服务,所以需要加上这一行。 丌然 docker 没有办法往私有仓库中上传镜像。

  • 重启 docker 服务
  • systemctl daemon-reload && systemctl restart docker
  • 重启 harbor
  • cd /opt/harbor/
    docker-compose stop # 停止 harbor
  • docker-compose start 

  •  登录私有仓库
  • docker login 192.168.2.234
    Username: admin
    Password: 
    WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
    Configure a credential helper to remove this warning. See
    https://docs.docker.com/engine/reference/commandline/login/#credentials-store

    Login Succeeded

  • 上传镜像到私有仓库中:
  • docker tag SOURCE_IMAGE[:TAG] 192.168.2.234/test/REPOSITORY[:TAG]
  • docker tag centos:7.6.1810 192.168.2.234/test/centos:7.6.1810
  • docker push 192.168.2.234/test/centos:7.6.1810

  •  在 2.2 上拉取镜像
  • 需要修改 /etc/docker/daemon.json 
    {
     "data-root": "/var/lib/docker", 
     "live-restore": true, 
     "log-driver": "json-file", 
     "log-opts": {
      "max-file": "3", 
      "max-size": "10m"
     }, 
     "insecure-registries": [
     "192.168.2.234"

     ]
    }


  • 使用阿里云私有仓库存储自己的 docker 镜像 

  • 需要登陆阿里云

 

以上是关于创建 docker 私有化仓库的主要内容,如果未能解决你的问题,请参考以下文章

Docker创建私有仓库 | 数据卷和数据卷容器 | 容器互联 操作详解

Docker创建私有仓库 | 数据卷和数据卷容器 | 容器互联 操作详解

创建 docker 私有化仓库

Docker镜像的创建和私有仓库的创建

Docker镜像的创建和私有仓库的创建

docker 私有仓库搭建以及用户认证