简介

本文主要讲述在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/test 和daocloud.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. day29:计算机网络概念

    目录 1.网络开发的两大架构 2.网络概念 3.OSI七层模型 4.ARP协议 5.TCP三次握手和四次挥手 1.网络开发的两大架构 1.没有网络的时候,文件是如何传输的? 早期没有网络 a.py - ...

  2. tar:Error is not recoverable:exiting now

    问题描述:文件包在不同网络跟介质之间传输,导致文件破损,如何使用md5的方式去对比文件的完整性 tar:Child returned status 1 tar:Error is not recover ...

  3. Linx 阶段一

    Linux Linux常用命令 具体演示 1). ls 2). pwd 3). touch 4). mkdir 5). rm 使用技巧 1. 连按 Tab健自动补齐文件名 2. ll 查看当前目录文件 ...

  4. NPM 实用命令与快捷方式

    在 JavaScript 中,无论是新手还是专家都可能在命令行中使用过 NPM.在本篇文章中,我将会整理超实用的 NPM 命令.快捷方式及技巧,帮助 JavaScript 开发人员提高生产力和效率. ...

  5. Typecho<=1.2.0 存储型XSS 复现

    Typecho<=1.2.0 存储型XSS 影响版本 漏洞影响版本:Typecho <= 1.2.0 漏洞复现 cookie.js // 定义一个全局变量 website,值为一个具体的网 ...

  6. java调用https接口导入证书认证

    1.获取证书 浏览器访问需要调用的接口路径 如图导出证书. 2.进入java目录 jre/lib/security 导入证书 keytool -import -alias name -keystore ...

  7. 一文理解TS泛型

    当我们在编写 TypeScript 代码时,经常会遇到需要通用(Generic)的情况,这时候,泛型就是我们的好帮手了.在本篇文章中,我们将深入介绍 TypeScript 泛型的概念以及如何使用. 什 ...

  8. Centos7.x 安装配置jdk与jmeter

    一.准备 1.jmeter(下载地址:https://jmeter.apache.org/download_jmeter.cgi) 2.jdk(下载地址:https://www.oracle.com/ ...

  9. Extjs4 Tree Grid 综合示例(展开、编辑列、获取数据)

    用json数据模拟后端传回来的结果,Extjs tree支持两种类型的结构,一种是带children属性的嵌套式的数据,一种是扁平的,每条记录带pid的数据,带pid的添加配置项可以自动解析成树形结构 ...

  10. 2021-01-03:java中,描述一下什么情况下,对象会从年轻代进入老年代?

    福哥答案2021-01-03: 1.对象的年龄超过一定阀值,-XX:MaxTenuringThreshold 可以指定该阀值.2.动态对象年龄判定,有的垃圾回收算法,比如 G1,并不要求 age 必须 ...