

使用DockerHub自动构建arm架构Image
source link: https://www.saltyfish.win/posts/docker-hub-arm64-automated-build/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

使用DockerHub自动构建arm架构Image
2020-07-09
经常有把自己的程序打包到ARM平台上去长期运行的需求,Docker Hub是最方便的选项。一个小trick可以让Docker Hub自动构建非amd64架构的Image。
现在对Docker Image来说,Docker Hub是最简单的CI构建平台了,只需要登陆上去给Github一个授权,CI就设置完成了。CI用的虚拟机限制是一次Build双核两小时(对大的Image是不太够的,还是Github Action比较靠谱,比如Build OpenWrt),对于自己的小项目是足够了。但是由于是用的虚拟机,运行在amd64下,默认只能生成自己架构的Image。我们需要自动的构建用于我们需要的架构的Image。
经过一番搜索发现这个需求有很久了,ARM架构下的直接构建现在也已经被写入了Docker的RoadMap。现在大家用的解决方案是用multiarch/qeum-static在user namespace下跑其他架构的VM。这个方案不仅能让你构建其他架构的Image,还能让你直接运行其他架构的Image(就是有些性能损失,这个没办法)。已经很好了。由于项目Readme里没有说明怎么在Dockerfile里直接用,这里备注一下。而且现在Dockerfile支持多阶段构建,可以把安装依赖、编译等部分扔到其他阶段中,使得最终生成的Image不包含这些中间过程的数据,让Image更加迷你。
设置build hook
需要在编译前运行multiarch/qemu-user-static:register
来准备环境。由于Docker Hub使用虚拟机,并且支持hook脚本,所以可以做到。
创建hooks/pre_build
,内容如下
#!/bin/sh
docker run --rm --privileged multiarch/qemu-user-static:register --reset
设置Dockerfile
这里直接给出最终Dockerfile例子,注释配有简单说明。每次FROM其他架构的Image都要把模拟器COPY过来COPY --from=qemu /usr/bin/qemu-aarch64-static /usr/bin
# Import armv8 parser runtime
FROM multiarch/qemu-user-static:x86_64-aarch64 as qemu
# Compile Stage
FROM arm64v8/python:3-slim AS compile-image
# Copy qemu
COPY --from=qemu /usr/bin/qemu-aarch64-static /usr/bin
RUN apt-get update
RUN apt-get install -y build-essential gcc libffi6 libffi-dev libssl-dev procps
# Install requirements
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt
# Running Stage
FROM arm64v8/python:3-slim AS runtime-image
# Copy qemu
COPY --from=qemu /usr/bin/qemu-aarch64-static /usr/bin
# Copy requirements
COPY --from=compile-image /root/.local /root/.local
# Make sure scripts in .local are usable:
ENV PATH=/root/.local/bin:$PATH
# Copy application sources
WORKDIR /app
COPY . .
# Run the application, using /bin/sh -c for forward env variable
CMD [ "/bin/sh", "-c", "python ./main.py --token=${BOT_TOKEN} --chat_id=${BOT_CHAT_ID} --from_id=${BOT_FROM_ID}" ]
Recommend
-
47
Docker disclosed one of their Hub databases was hacked and a subset of non-financial data, including usernames, hashed passwords, and GitHu...
-
20
前两篇文章介绍了将docker镜像打包,镜像发布,那么今天为大家介绍完一个闭环操作,如何从dockerhua拉取镜像,运行镜像,下面将演示从ubuntu和centos系统上拉取和运行镜像操作:操作流程:(1)拉取镜像(2)运行镜像(3)应用访问ubuntu系统拉取镜像演示:(1)拉...
-
20
突破 DockerHub 限制,全镜像加速服务网易有道 资深运维开发“ 最近 DockerHub 修改了定价,对于免费帐号会限制 200 pulls/6小时,对于匿名帐号则限制 100 pulls/6小时...
-
13
o∗≧▽≦∗≧▽≦ツ:docker容器内的所有文件和配置环境可以打包成一个镜像,并上传到dockerhub,供其他电脑直接下载使用 1. 注册dockerhub账号官网:https://hub.docker.com/...
-
7
👨🏻🎓博主介绍:大家好!我是李大白,一名运维容器运维工程师,热爱分享知识🌟 🌈擅长领域:云原生、数据库、自动化运维🙏🏻如果本文章对小伙伴们有帮助的话,🍭关注+👍🏻点赞+🗣评论+📦收藏!🤝如果在文章描述时如有错,恳请各位大佬指正,在...
-
8
使用hub-tool管理你的dockerhub 2022-06-30 docker
-
6
RSS 在DockerHub发布Dubbo Admin镜像本文将介绍如何在Dockerhub上发布Dubbo Admin镜像。Monday, April 23, 2018Dubbo Admin是Dubbo的...
-
5
-
4
搭建dockerhub镜像加速仓库 2022-10-12 17:27:00 linux
-
6
利用DockerHub在Centos7.7环境下部署Nginx反向代理Gunicorn+Flask独立架构首页 - Python/2020-07-17
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK