CPU指令集介绍及不同的指令集的使用场景:

1、当前CPU的两大架构是CISC(复杂指令集)和RISC(精简指令集),x86是CISC的代表架构,占领了95%以上的桌面计算机和服务器市场。
2、Arm和MIPS都是RISC即精简指令集,尤其Arm在智能手机、可穿戴设备(智能手表、手环、智能眼睛)等移动处理器市场占领主要地位。
3、RISC-V和MIPS两大精简指令集架构将会得到广泛使用。

发展历史:

X86架构:

1968年Intel成立,1978年发明x86架构,并且在后来授权给AMD使用。
1969年AMD成立,2003年AMD推出64位处理器,并授权给Intel使用。
X86主要用于企业服务器及个人办公PC市场。

ARM架构:

成立于1990年,全世界超过95%的智能手机和平板电脑都采用ARM架构。
手机:华为小米三星苹果
iPad:华为小米三星苹果
机顶盒:各电视机顶盒
华为泰山服务器-鲲鹏系列ARM系列CPU、阿里倚天710(arm64v9)

RISC-V:

1980年加州大学伯克利分校开始研发RISC课题,2010年开发出RISC-V并开源。

MIPS:

MIPS是一种RISC处理器,它最早是在80年代初期由斯坦福(Stanford)大学JohnL.Hennessy(约翰·亨利斯)教授领导的研究小组研制出来的,MIPS是出现最早的商业RISC架构芯片之一MIPS计算机系统公司创建于1984年,最初的目的是将斯坦福大学MIPSCPU小组的研究成功商业化,商用MIPS CPU增强了内存管理硬件,并于1985年末作为R2000面世,其后又相继推出了R3000、R4000、R10000等多款处理器。

POWER架构:

由IBM设计,POWER系列微处理器在不少IBM服务器、超级计算机、小型计算机及工作站中使用。
ppc64#IBMPowerPC和PowerArchitecture处理器应用程序的标识符
ppc64le:#由OpenPower基金会推出的技术,用于将x86的Linux软件的移植到ppc64平台

s390x架构:

s390x#IBMSystemz系列大型机,银行或者大型企业或者科研单位用

CentOS

系统环境:

CentOS Linux release 7.9.2009 (Core)
docker Version: 23.0.2

部署环境:

如果之前安装过docker,需要删掉旧包:

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

安装依赖:

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

下载 repo 文件,并把软件仓库地址替换为镜像站:

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

sed -i 's+https://download.docker.com+http://mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

最后安装:

yum makecache fast
yum install docker-ce

初始化buildx:

[root@localhost ~]# docker buildx create --name mybuilder
mybuilder
[root@localhost ~]# docker buildx inspect --bootstrap
Name:          builder
Driver:        docker-container
Last Activity: 2023-05-29 07:44:01 +0000 UTC

Nodes:
Name:      builder0
Endpoint:  unix:///var/run/docker.sock
Status:    running
Buildkit:  v0.11.6
Platforms: linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386
结尾的Platform一项代表现支持的平台架构,跨平台构建的底层是用 QEMU 实现的

Buildkit是由Docker公司开发的下一代dockerbuild工具,2018年7月正式内置于Docker-ce18.06.0
验证构建环境:

[root@localhost ~]# docker buildx inspect
Name:          builder
Driver:        docker-container
Last Activity: 2023-05-29 07:44:01 +0000 UTC

Nodes:
Name:      builder0
Endpoint:  unix:///var/run/docker.sock
Status:    running
Buildkit:  v0.11.6
Platforms: linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386

构建多平台架构镜像并上传到镜像仓库;

#containerd构建指令:
nerdctl build --platform=arm64-t 镜像仓库地址:tag .#单独构建arm64架构镜像
注意:containerd构建跨平台image时一次性只能构建一种架构,如果想构建多种需要执行多遍指令
#docker构建指令;docker可以一次性构建多个平台架构的image
docker buildx build -t 镜像仓库地址 --platform linux/amd64,linux/arm64 . --push

--platform后面必须跟上方查到支持的架构类型,以上方为例仅支持linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386

Dockerfile:

FROM centos:7.9.2009
MAINTAINER "OpenAI ChatGPT"

RUN yum -y update && \
yum -y install epel-release && \
yum -y install nginx && \
yum clean all

EXPOSE 80/tcp

CMD ["nginx", "-g", "daemon off;"]

构建arm64镜像并保存到本地,导入到本地只能构建单独一个平台的镜像,比如单独的arm64或单独的x86_64,不能同时指定

[root@localhost ~]docker buildx build -t 本地镜像仓库地址 --platform linux/arm64 . --load

执行构建:

[root@localhost ~]docker buildx build -t 镜像仓库地址 --platform linux/amd64,linux/arm64 . --push
......
[linux/amd64 2/2]
......
[linux/arm64 2/2]

构建的过程中出现的关键词应和--platform指定的平台架构一致

验证构建上传是否成功:

[root@localhost ~]docker buildx imagetools inspect 镜像地址|grep Platform
Platform:    linux/arm64
Platform:   linux/amd64

Ubuntu

系统环境:

Ubuntu 22.04 LTS
docker Version: 24.0.2

部署环境

安装docker:

sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu jammy stable" >> /etc/apt/sources.list.d/docker.list
sudo apt-get update
apt-cache madison docker-ce docker-ce-cli
apt install docker-ce=5:24.0.2-1~ubuntu.22.04~jammy docker-ce-cli=5:24.0.2-1~ubuntu.22.04~jammy

安装CPU指令集模拟平台:

qemu-user-static:是一个可以在当前操作系统来运行其它架构的一个仿真器,可以通过x86的机器编译出其它不同架构的docker image
binfmt-support:解析不同系统的二进制文件给内核执行,再将执行结果返回给用户空间的进程。

apt install -y qemu-user-static binfmt-support

配置多平台CPU指令集模拟器:

#查看QEMU的静态二进制文件是否存在。
ls /usr/bin/qemu-aarch64-static
#测试能否成功run起不同于宿主机平台架构的容器
docker run --rm -it arm64v8/ubuntu:20.04 uname -a
docker run --rm -it riscv64/ubuntu:22.04 uname -a

初始化buildx:

docker buildx create --name mybuilder
docker buildx use mybuilder
docker buildx inspect --bootstrap

验证构建环境:

docker buildx inspect

Dockerfile:

FROM ubuntu:22.04
MAINTAINER "*****"
#ADD sources.list /etc/apt/sources.list
RUN apt update && apt  install -y iproute2  ntpdate  tcpdump telnet traceroute nfs-kernel-server nfs-common  lrzsz tree  openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev ntpdate tcpdump telnet traceroute  gcc openssh-server lrzsz tree  openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev ntpdate tcpdump telnet traceroute iotop unzip zip make

ADD nginx-1.22.0.tar.gz /usr/local/src/
RUN cd /usr/local/src/nginx-1.22.0 && ./configure --prefix=/apps/nginx && make && make install  && ln -sv /apps/nginx/sbin/nginx /usr/bin
RUN groupadd  -g 2088 nginx && useradd  -g nginx -s /usr/sbin/nologin -u 2088 nginx && chown -R nginx.nginx /apps/nginx
ADD nginx.conf /apps/nginx/conf/
ADD frontend.tar.gz /apps/nginx/html/

EXPOSE 80 443
#ENTRYPOINT ["nginx"]
CMD ["nginx","-g","daemon off;"]

构建镜像并上传到镜像仓库:

#单独构建arm64架构镜像
nerdctl build --platform=arm64 -t 镜像仓库地址:tag .

#一次构建出多平台架构image
docker buildx build -t 镜像仓库地址:tag --platform linux/amd64,linux/arm64 . --push

#构建arm64镜像并保存到本地,导入到本地只能构建单独一个平台的镜像,比如单独的arm64或单独的x86_64,不能同时指定
docker buildx build -t 镜像仓库地址:tag --platform linux/arm64 . --load

验证构建结果:

[root@localhost ~]docker buildx imagetools inspect 镜像地址|grep Platform
Platform:    linux/arm64
Platform:   linux/amd64
最后修改:2024 年 05 月 18 日
如果觉得我的文章对你有用,请随意赞赏