总结一下在amd64架构上打包arm镜像并测试运行的步骤

65 阅读2分钟

经过国庆期间的努力,到昨天为止已经可以很顺利的做出arm64镜像并在本地测试运行, 并且部署到真正arm64机器上也没有什么问题。 这个事情可以说完成大半了, 在此记录一下大概过程(可能会有遗漏)

# 安装qemu相关
sudo apt-get update && \
sudo apt-get install -y --no-install-recommends \
  qemu-user-static binfmt-support qemu-system-arm qemu-kvm \
  libvirt-daemon-system libvirt-clients bridge-utils virt-manager \
  gcc-aarch64-linux-gnu


# 这一步是干啥的? 反正执行了
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes


# 下面这些是为了安装buildx, 可以说docker被屏增加了很多麻烦

sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release


sudo curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg \
  | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

  echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io \
                    docker-buildx-plugin docker-compose-plugin

docker --version          # 27.x
docker buildx version     # v0.12.x

# 产生一个buildkit容器,用这个容器中的某个功能来做镜像
docker buildx create --name wsl-arm64 --driver docker-container --use
docker buildx inspect --bootstrap   # 看到 STATUS = running 即 OK

# 这里事实上还有个步骤,就是修改buildkit里的 /etc/buildkit/buildkitd.toml, 增加镜像地址,这样好多东西会下载的很快,不然会花很多的时间在下载上,非常影响构建速度

# 这个是真正做镜像的过程,注意事先准备好相关的docker file 
docker buildx build --platform linux/arm64 -t rsyslogkafka --load .


# 运行的过程,加上 --platform参数就好
docker run -itd --name rsyslogkafka2 --platform linux/arm64 -p 514:514/udp --add-host=host.docker.internal:host-gateway rsyslogkafka:arm64

docker run -d --platform linux/arm64 --name kafka -p 9092:9092 --add-host=host.docker.internal:host-gateway kafka-ubuntu20:arm64

docker run -itd --platform linux/arm64 --name openresty --add-host=host.docker.internal:host-gateway  -v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro openresty:arm64