IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> docker私有仓库支持多架构搭建 -> 正文阅读

[系统运维]docker私有仓库支持多架构搭建

一、环境说明

1、服务器两台,均为amd64架构,一台可以联网(192.168.230.101),用来下载软件。一台不能联网(192.168.230.102),用来搭建私有仓库

2、操作系统:centos7.7(7.x应该均可)

3、docker:docker-ce-20.10.12-3(2022.3.8最新版,版本最好保持20,否则manifest配置不一样)

二、安装步骤

docker联网安装(101)

1、101上安装docker

清理存在的 docker 软件

sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

安装docker 依赖

sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

下载 docker 安装所需的 repo 文件

sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

安装 docker

yum install docker-ce docker-ce-cli containerd.io

启动 docker

systemctl start docker

设置 开机自启动

systemctl enable docker

查看 docker 是否启动成功

docker version出现如下界面则表示成功启动


2、在101上执行命令

yum install --downloadonly --downloaddir=/tmp/docker docker-ce

下载docker离线安装包至/tmp/docker目录下

3、执行tar -cvf docker.tar /tmp/docker/得到 docker.tar用于在102上安装docker

4、在101上配置国内镜像源

vim /etc/docker/daemon.json 添加如下内容

{
	registry-mirrors: [http://hub-mirror.c.163.com]
}

保存后执行

systemctl daemon-reload

systemctl restart docker

5、在101上下载registry镜像

docker pull registry

6、在101将registry打包镜像

docker save registry:latest > docker-registry.tar

7、将docker-registry.tardocker.tar发送到102服务器上

docker离线安装及私有仓库创建

离线yum源配置(102配置,如已有其他yum源忽略该步骤)

使用iso镜像作为离线yun源,执行命令

mount /dev/cdrom /mnt/

/etc/yum.repo.d/下的其他repo全部改为备份

创建CentOS-local.repo,添加如下内容

[local]
name=CentOS-$releasever-Base
baseurl=file:///mnt
enabled=1
gpgcheck=0

保存后执行命令 yum makecache

移除当前存在的docker环境

sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

安装docker依赖项

sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

离线安装docker(102)

1、在102解压docker.tar,进入docker目录内执行命令进行安装(确保102没有安装过docker)

rpm -Uvh --force --nodeps \*rpm

2、启动docker及开机自启(102)

systemctl start docker

systemctl enable docker

执行命令 docker version查看是否启动成功

3、102进入 docker-registry.tar所在目录内,执行命令

docker load < docker-registry.tar

私有仓库启动

1、102启动registry容器(即私有仓库)

默认情况下,仓库会被创建在容器的/var/lib/registry目录下(Dockerfile中定义的)。可以通过-v参数来将镜像文件存放在本地的指定路径。

docker run --name registry -d -p 5000:5000 --restart=always -v /opt/data/registry:/var/lib/registry registry

注意/opt/data/registry要创建一下,也可以指定其他位置

启动后通过docker ps -a看到如下内容即可

在这里插入图片描述

通过命令curl 192.168.230.102:5000/v2/_catalog或浏览器直接访问查看私有仓库中的存在的镜像

2、测试私有仓库可用性

任意的docker-cli端(任何需要和私有仓库打交道的服务器都需要配置)修改配置文件 /etc/docker/daemon.json 如果没有则创建,添加如下内容(如果已配置其他内容,不要修改,增加该配置项即可)

{
	 insecure-registries:[192.168.230.102:5000]
}

注:私有仓库未使用https,而docker客户端执行的是https协议,会导致客户端无法与私有仓库通信,因此需要添加以上配置。

然后执行

systemctl daemon-reload
systemctl restart docker

在101测试推送镜像至私有仓库

docker pull alpine 拉取一个远程镜像(此时自动拉取的是amd64架构的)

docker tag alpine 192.168.230.102:5000/alpine-amd64 给镜像打个标签,ip和端口是私有仓库的地址

docker push 192.168.230.102:5000/alpine-amd64 推送到私有仓库

curl 192.168.230.102:5000/v2/_catalog 查看是否推送成功

也可以到registry容器内查看是否有文件 docker exec -it 容器id /bin/sh

为后续测试多cpu架构镜像创建,此时再拉取一个arm64架构的镜像,推送到私有仓库中,具体操作如下

docker pull --platform arm64 alpine # 通过platform参数指定镜像架构平台(低版本docker需要开启实验功能才能使用该命令,具体见参考链接中)

docker tag arm镜像id 192.168.230.102:5000/alpine-arm64

docker push 192.168.230.102:5000/alpine-arm64

多cpu架构镜像创建

一些说明:

docker每一个镜像包含了一个这个文件包含了有关于镜像信息,如层、大小和摘要。

docker manifest命令还向用户提供附加信息,比如构建镜像的操作系统和体系结构。

而manifest list是一个镜像清单列表,用于存放多个不同os/arch的镜像信息。我们主要用到manifest的目的,其实还是多用于存放不容的os/arch信息,也就是方便我们在不同的CPU架构(arm或者x86)或者操作系统中,通过一个镜像名称拉取对应架构或者操作系统的镜像,这个尤其是在K8S中,对于异构CPU的服务器中的镜像显得尤为有效。

需要注意的是,manifest文件仅仅是针对于已经在仓库中的镜像!!! 换句话说,就是这个镜像是刚从仓库中pull下来的!如果这个镜像是自己build的,需要先push到仓库中,否则,这个镜像是没有manifest文件的!!同样的,如果你pull了一个镜像,tag了一下,再去看这个manifest文件,也是没有的,因为tag后的镜像不在镜像仓库中。

1、创建一个自定义命名的镜像名的 Manifest list,然后用该列表关联仓库里面的两个不同架构的镜像(注意这里就是说私有仓库中已有这两个镜像,需要在不同架构平台构建镜像后push到仓库中,前边已经push到仓库中了)

docker manifest create --insecure 192.168.230.102:5000/alpine-v1 192.168.230.102:5000/alpine-arm64 192.168.230.102:5000/alpine-amd64

注意带上--insecure

A:192.168.230.102:5000/alpine-v1 这是manifest list地址,名称自定义,地址要写对

B:192.168.230.102:5000/alpine-arm64已经在仓库中存在的镜像地址

C:192.168.230.102:5000/alpine-amd64已经在仓库中存在的镜像地址

A地址是manifest list地址,也就是最后统一了架构后的镜像地址,该地址在仓库中可有可无;B、C则是已经在仓库中有的镜像地址!!此外,这里面还多了一个 --insecure指令,这个指令主要是用来方式你的远端仓库没有https证书的问题,最好加上,否则可能会报错no such manifest: 192.168.230.102:5000/alpine:arm64-latest

如果A地址已经存在,或者说A=B或者A=C,进一步的,也就是你并不想创建一个新的manifest list镜像地址,而是想用已有的镜像地址,那么可以参考这个命令

docker manifest create --insecure --amend xxx/nginx:nginx-arm64 xxx/nginx:nginx-x86

这个命令通过增加–amend选项,将x86的架构信息增加到了arm64架构中

2、声明不同架构镜像对应的操作系统和cpu架构类型,其中x86_64需要用amd64来指定(可以执行也可忽略)

docker manifest annotate 192.168.230.102:5000/alpine-v1 192.168.230.102:5000/alpine-arm64 --os linux --arch arm64

docker manifest annotate 192.168.230.102:5000/alpine-v1 192.168.230.102:5000/alpine-amd64 --os linux --arch amd64

3、将manifest推送到私用仓库中

docker manifest push --insecure 192.168.230.102:5000/alpine-v1

--purge:末尾添加该参数为推送列表后自动删除本地刚刚创建的列表清单。

在这里插入图片描述

docker manifest inspect 192.168.230.101:5000/alpine-v1

--verbose:末尾添加该参数可以显示更详细的信息包括 CPU 架构等。

完成之后边可以通过docker pull 192.168.230.101:5000/alpine-v1来在不同的架构环境里面拉取正确的镜像了。

通过这几条命令可以看出来多架构镜像只是一个引用,根据客户端的架构来选择其中声明好的镜像。

参考链接

https://blog.csdn.net/sullivan_jia/article/details/117520304 docker manifest 使用实战

https://www.cnblogs.com/rucnevermore/p/12031527.html docker多架构镜像构建

https://www.cnblogs.com/nhdlb/p/15233410.html Docker:使用x86平台Docker 拉取 arm版镜像

https://docs.docker.com/engine/install/centos/

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-11 22:36:33  更:2022-03-11 22:36:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:36:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码