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
仅登录用户可评论,点击 登录