简介

本文主要讲述在CentOS 8上面搭建Docker镜像仓库的步骤。

在实际项目过程中,项目产生的镜像需要部署至目标服务器,镜像和目标服务器之间需要使用一个镜像仓库作为镜像的存储中介,提供镜像的上传、下载、保存。

下面介绍搭建本地Docker镜像仓库的步骤。

安装Docker

本文使用的Docker版本为19.03.12,使用国内的相关安装镜像包安装,这里使用的时阿里云的镜像站点。

添加docker yum源

# 安装必要依赖
yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加aliyum docker-ce yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 重建yum缓存
yum makecache

安装docker

# 安装指定版本docker,这里以19.03.12为例说明
yum install -y docker-ce-19.03.12-3.el7 # 执行此命令后可能会出现错误如下:
Last metadata expiration check: 0:01:15 ago on Wed 26 Aug 2020 06:00:10 PM PDT.
Error:
Problem: package docker-ce-3:19.03.12-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
- conflicting requests
- package containerd.io-1.2.10-3.2.el7.x86_64 is filtered out by modular filtering
- package containerd.io-1.2.13-3.1.el7.x86_64 is filtered out by modular filtering
- package containerd.io-1.2.13-3.2.el7.x86_64 is filtered out by modular filtering
- package containerd.io-1.2.2-3.3.el7.x86_64 is filtered out by modular filtering
- package containerd.io-1.2.2-3.el7.x86_64 is filtered out by modular filtering
- package containerd.io-1.2.4-3.1.el7.x86_64 is filtered out by modular filtering
- package containerd.io-1.2.5-3.1.el7.x86_64 is filtered out by modular filtering
- package containerd.io-1.2.6-3.3.el7.x86_64 is filtered out by modular filtering
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages) # 错误原因:需要安装高版本的containerd.io # 解决措施:可以安装最新的containerd.io,但是使用官方的下载安装时比较慢,可以使用迅雷等下载工具将此安装包下载后上传至服务器安装
# 这里使用xshell连接服务器为例执行,具体命令如下:
yum install lrzsz
mkdir software
cd software/
rz
yum localinstall -y containerd.io-1.2.6-3.3.el7.x86_64.rpm # 重新执行安装docker命令,安装成功
yum install -y docker-ce-19.03.12-3.el7

确保网络模块开机自动加载

由于需要使用远程访问,因此需要使用网络模块,并且要保证此模块开机自动启动。

lsmod | grep overlay
lsmod | grep br_netfilter

若上面的命令无返回值输出或提示文件不存在,需要执行以下命令:

cat > /etc/modules-load.d/docker.conf <<EOF
overlay
br_netfilter
EOF modprobe overlay
modprobe br_netfilter

使桥接流量对iptables可见

cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF sysctl --system # 验证是否生效,下面两个命令结果需均返回 1
sysctl -n net.bridge.bridge-nf-call-iptables
sysctl -n net.bridge.bridge-nf-call-ip6tables

配置docker

mkdir /etc/docker

# 修改cgroup驱动为systemd[k8s官方推荐]、限制容器日志量、修改存储类型,最后的docker根目录可修改
# 下面文件中第一行insecure-registries的值需要修改为对应机器的IP地址
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"registry-mirrors": ["https://7uuu3esz.mirror.aliyuncs.com"],
"data-root": "/data/docker"
}
EOF # 添加开机自启动,立即启动
systemctl enable --now docker

验证docker是否正常

# 查看docker信息,判断是否与配置一致
docker info # hello-docker测试
docker run --rm hello-world # 删除测试的image
docker rmi hello-world

添加用户到docker组

非root用户,无需sudo即可使用docker命令。

# 添加用户到docker组,此处zgs为其他账号信息
usermod -aG docker zgs # 当前会话立即更新docker组
newgrp docker

至此,Docker已经安装完成,下面配置Docker镜像仓库。

搭建Docker私有仓库

使用registry镜像类配置我们的私有仓库,即搭建私有仓库使用的组件也是一个docker镜像。

下载registry镜像

这里使用registry的版本为2,拉取对应镜像,也可以从hub.daocloud.io站点上查看对应的版本并获取对应镜像。

# 拉去registry仓库
docker pull registry:2 # 查看镜像拉取结果
docker images # 拉取的镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
registry 2 2d4f4b5309b1 2 months ago 26.2MB

启动registry镜像

启动registry镜像时需要注意下面几点:

  • 开机启动,设置restart属性为always
  • 目录挂载,默认上传的镜像文件是存放在registry镜像运行是container的内部,如果容器消亡,对应的文件也消失,因此要将其目录映射到宿主机的目录上面
  • 端口映射,映射宿主机的5000端口到容器的5000端口
# 在宿主机创建挂在目录
cd ~
mkdir data
cd data/
mkdir docker
cd docker/
mkdir registry
cd registry
pwd # 启动registry镜像
docker run -d -v /root/data/docker/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2 # 查看启动的容器
docker ps # registry已启动
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8e6516273466 registry:2 "/entrypoint.sh /etc…" 4 seconds ago Up 2 seconds 0.0.0.0:5000->5000/tcp registry

验证是否部署成功

访问http://192.168.43.131:5000/v2/地址,如果出现下面的结果证明私有仓库部署成功。

{}

可以访问http://192.168.43.131:5000/v2/_catalog地址查看仓库中的镜像信息,目前我们的仓库中没有镜像,显示结果如下:

{"repositories":[]}

镜像的上传与下载

镜像上传

使用另外一台宿主机,将其nginx的镜像,上传至镜像仓库测试,并确认上传后的结果。

# 下载nginx镜像,实际需要使用自己打包好的镜像文件
docker pull daocloud.io/library/nginx:1.7.8 # 重新给镜像打标签,注意:更新后的镜像标签一定要以镜像仓库的IP地址和端口号作为前缀,是否可以使用域名代替IP地址需要验证
docker tag daocloud.io/library/nginx:1.7.8 192.168.43.131:5000/test:v01 # 镜像列表如下
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.43.131:5000/test latest a343d51dff65 5 years ago 91.7MB
daocloud.io/library/nginx 1.7.8 a343d51dff65 5 years ago 91.7MB # 将镜像上传至镜像仓库
docker push 192.168.43.131:5000/test # 返回结果如下,出现了错误,错误信息如下
The push refers to repository [192.168.43.131:5000/test]
Get https://192.168.43.131:5000/v2/: http: server gave HTTP response to HTTPS client # 解决方法请参考下面的章节

解决之后,重新执行推送镜像命令,结果如下:

# 推送镜像,可以在镜像名称后面添加版本号:v1,默认为latest
docker push 192.168.43.131:5000/test # 推送镜像执行结果
The push refers to repository [192.168.43.131:5000/test]
5f70bf18a086: Pushed
242390e67cbf: Pushed
fc521005216a: Pushed
6f0124c2157c: Pushed
5a29dcc5d0b4: Pushed
6607e4d8ecb7: Pushed
8b116ab6d885: Pushed
latest: digest: sha256:5e3e9ea21051fcb23c6ede0b2c59b950bea07701db6360cff5e556636d3d48f2 size: 3012

可以通过域名地址验证镜像是否推送成功。

# 查看镜像列表
http://192.168.43.131:5000/v2/_catalog # 执行结果
{"repositories":["test"]}
# 查看指定镜像的各个版本
http://192.168.43.131:5000/v2/{镜像名称}/tags/list
http://192.168.43.131:5000/v2/test/tags/list # 执行结果
{"name":"test","tags":["latest"]}

解决http: server gave HTTP response to HTTPS client

由于docker镜像拉取与推送服务使用的是https协议,但是仓库服务器上面没有配置https证书,可以修改客户端的配置,使用http协议进行通信。

# 修改/etc/docker下的daemon.json配置文件,添加服务端的IP和端口配置,在文件中添加下面的命令:
"insecure-registries": ["192.168.43.131:5000"] # 修改后de daemon.json文件如下所示:
{
"insecure-registries": ["192.168.43.131:5000"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"registry-mirrors": ["https://7uuu3esz.mirror.aliyuncs.com"],
"data-root": "/data/docker"
}

重新启动客户端docker服务即可。

systemctl restart docker

镜像下载

先将我们本地的192.168.43.131:5000/testdaocloud.io/library/nginx 先删除掉。

docker rmi 192.168.43.131:5000/test:latest
docker rmi daocloud.io/library/nginx:1.7.8

查看本地的镜像列表中已经没有对应镜像,使用下面命令从镜像服务器上下载镜像。

# 从镜像服务器上下载镜像
docker pull 192.168.43.131:5000/test:latest # 执行结果
latest: Pulling from test
4f4fb700ef54: Pull complete
9a1209a4c986: Pull complete
95a23bb7571d: Pull complete
3f6b880dd9d0: Pull complete
08f502ddc2a2: Pull complete
5db29f58d80d: Pull complete
acf00ce452a6: Pull complete
Digest: sha256:5e3e9ea21051fcb23c6ede0b2c59b950bea07701db6360cff5e556636d3d48f2
Status: Downloaded newer image for 192.168.43.131:5000/test:latest
192.168.43.131:5000/test:latest

查看本地镜像列表中已经存在对应镜像。

# 查看镜像列表
docker images # 执行结果
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.43.131:5000/test latest a343d51dff65 5 years ago 91.7MB

结束

至此,Docker镜像仓库服务器已经搭建完成。

CentOS 8搭建Docker镜像私有仓库-registry的更多相关文章

  1. centos 7.1搭建docker本地私有仓库返回500错误

    之前有一篇写到在ubuntu14.04系统上安装私有仓库,遇到了两个问题,本次在centos7上遇到了另外一个问题. 安装完仓库并运行registry镜像之后发现push和pull操作都会返回一个50 ...

  2. CentOS搭建Docker Hub私有仓库

    docker pull registry拉取registry镜像 docker images查看镜像 docker run -d -p 5000:5000 -v /opt/data/registry: ...

  3. 七、docker镜像私有仓库

    在Docker中,当我们执行 docker pull xxx 的时候 ,它实际上是从 hub.docker.com 这个地址去查找,这就是 Docker 公司为我们提供的公共仓库.在工作中,我们不可能 ...

  4. Docker:私有仓库registry [十一]

    一.运行docker私有仓库 安装registry docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregi ...

  5. docker镜像私有仓库

    两台centos7的机器 192.168.100.151 docker镜像 192.168.100.157 docker私有仓库 步骤一 192.168.100.157主机开启私有仓库功能 docke ...

  6. docker 查询或获取私有仓库(registry)中的镜像

    docker 查询或获取私有仓库(registry)中的镜像,使用 docker search 192.168.1.8:5000 命令经测试不好使. 解决: 1.获取仓库类的镜像: [root@sha ...

  7. 搭建docker镜像仓库(二):使用harbor搭建本地镜像仓库

    目录 一.系统环境 二.前言 三.Harbor 四.使用harbor搭建私有镜像仓库 4.1 环境介绍 4.2 k8smaster节点安装配置harbor 4.2.1 安装harbor离线包 4.2. ...

  8. 转载:教你分分钟搞定Docker私有仓库Registry

    一.什么是Docker私有仓库Registry 官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去.但是,有时候我们的服务器无法 ...

  9. 教你分分钟搞定Docker私有仓库Registry

    一.什么是Docker私有仓库Registry 官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去.但是,有时候我们的服务器无法 ...

  10. 019.nexus搭建docker镜像仓库/maven仓库

    一.安装docker CE 参考docker doc https://docs.docker.com/install/linux/docker-ce/centos/ 二.docker启动nexus3 ...

随机推荐

  1. Golang 常用库之jwt-go

    本文地址 https://www.cnblogs.com/zichliang/p/17303759.html github地址:https://github.com/dgrijalva/jwt-go ...

  2. MySQL匿名空用户名处理

    问题描述:公司漏扫发现数据库内出现空用户名及密码,需要对这些用户进行整改 1.首先出现了疑问,这些空的用户名是怎么出现的,而且不附带密码. 2.可以手动这样创建这样的用户名和密码形式么. 3.如果能这 ...

  3. 如何在2023年学习React

    在2023年学习React并不是一件容易的事情.自2019年React Hooks发布以来,我们已经拥有了很多稳定性,但现在形势正在再次变化.而这次变化可能比使用React Hooks时更加不稳定.在 ...

  4. 【Azure Developer】使用 Microsoft Graph API 获取 AAD User 操作示例

    问题描述 查看官方文档" Get a user " , 产生了一个操作示例的想法,在中国区Azure环境中,演示如何获取AAD User信息. 问题解答 使用Microsoft G ...

  5. MySQL 主从延迟的常见原因及解决方法

    承蒙大家的支持,刚上市的<MySQL实战>已经跃居京东自营数据库图书热卖榜第 1 名,收到的反馈也普遍不错.对该书感兴趣的童鞋可通过右边的链接购买.目前,京东自营有活动,只需 5 折. 主 ...

  6. 借助 APISIX Ingress,实现与注册中心的无缝集成

    作者张晋涛,API7.ai 云原生技术专家,Apache APISIX PMC 成员,Apache APISIX Ingress Controller 项目维护者. 原文链接 云原生场景下是否需要服务 ...

  7. 从热爱到深耕,全国Top10开源软件出品人手把手教你如何做开源

    摘要:DTT直播邀请到管雷鸣与广大开发者分享"如何在开源领域找到适合自己的路". "想象一下,你写的代码被越来越多的人使用,并极大地帮助他们提高了开发效率和稳定性.&qu ...

  8. YOLO2论文中文版

    文章目录 YOLO9000中文版 摘要 1. 引言 2. 更好 3. 更快 4. 更强 5. 结论 参考文献 YOLO9000中文版 摘要 我们引入了一个先进的实时目标检测系统YOLO9000,可以检 ...

  9. 玩一玩 Ubuntu 下的 VSCode 编程

    一:背景 1. 讲故事 今天是五一的最后一天,想着长期都在 Windows 平台上做开发,准备今天换到 Ubuntu 系统上体验下,主要是想学习下 AT&T 风格的汇编,这里 Visual S ...

  10. java中各引用类型的生存时间

    引用类型由上往下一次减弱: 强引用:Object obj=new Object(),无论什么情况下,只要强引用关系还存在,就不会回收被引用的对象. 软引用:像系统中缓存这些,在系统即将报内存溢出异常时 ...