创建 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
- 如果在线安装失败可以去 官网下载 https://github.com/docker/compose/releases
- 注:docker-compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。Docker-Compose 的工程配置文件默认为 docker-compose.yml,Docker-Compose 运行目录下的必要有一个 docker-compose.yml。docker-compose 可以管理多个 docker 实例。
-
安装 Harbor 私有仓库
- 下载 Harbor 安装文件
-
https://github.com/goharbor/harbor/releases
- wget https://ghproxy.com/https://github.com/goharbor/harbor/releases/download/v2.3.1/harbor-offline-installer-v2.3.1.tgz
- tar xf harbor-offline-installer-v2.3.1.tgz
- cd harbor/
- 配置 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-storeLogin 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创建私有仓库 | 数据卷和数据卷容器 | 容器互联 操作详解