

使用github action 配合 docker buildx 编译 arm64 docker-compose
source link: https://zhangguanzhang.github.io/2021/03/12/build-arm64-docker-compose-action/
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.

使用github action 配合 docker buildx 编译 arm64 docker-compose
git 上搜索了很多 docker-compose 的 arm64 的编译基本都是使用 qemu-user-static
之类的设置下后编译的,也看到过用特权容器启动 qemu-user-static 或者 binfmt
之类的,但是我自己机器上试了无效,貌似是因为我操作系统是低版本内核的 centos ,github 上搜了下,其他很多人的编译感觉太啰嗦了。就在 action 上整了下,测试是可用的,而且非常简单。
docker-practice/actions-setup-docker@master
将会在在 action 的 runner 里安装 docker,创建 buildx 和 运行 docker run --rm --privileged ghcr.io/dpsigs/tonistiigi-binfmt:latest --install all
。
name: build for docker-compose
on:
push:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
# - name: Check out docker/compose
# uses: actions/checkout@v2
# with:
# repository: docker/compose
# path: compose
- name: install docker
uses: docker-practice/actions-setup-docker@master
# this will run and buildx
# docker run --rm --privileged ghcr.io/dpsigs/tonistiigi-binfmt:latest --install all
- name: build docker-compose
id: build
run: |
ls -l; docker run --rm arm64v8/python:3.7.10-stretch sh -c 'python3 -V; uname -m'
# https://github.com/docker/compose/blob/master/script/build/linux
git clone https://github.com/docker/compose.git
cd compose;
./script/clean;
git checkout 1.28.5
DOCKER_COMPOSE_GITSHA="$(script/build/write-git-sha)";
echo ---- ${DOCKER_COMPOSE_GITSHA}
docker buildx build --platform linux/arm64 . \
--target bin \
--build-arg DISTRO=debian \
--build-arg GIT_COMMIT="${DOCKER_COMPOSE_GITSHA}" \
--output dist/ || : ;
ls -l dist;
docker run --platform linux/arm64 \
--rm -v $PWD/dist:/root/ \
arm64v8/python:3.7.10-stretch /root/docker-compose-linux-arm64 version;
- name: Upload bin directory
uses: actions/upload-artifact@main
if: steps.build.outcome == 'success'
with:
name: docker-compose-linux
path: compose/dist/
编译过程看 compose 仓库的 makefile,是运行的 https://github.com/docker/compose/blob/master/script/build/linux 这个脚本。所以克隆 compose 仓库后进目录里,然后 checkout 指定 tag。官方的编译过程都是在 docker build 产生的容器里去编译的。最后有个 build –output就是直接把文件给整出来。我这里是用的 buildx 去替代 build 编译。理论上也可以编译其他架构的,后面我打算我仓库整个自动化同步官方 tag checkout 去编译。https://github.com/zhangguanzhang/docker-compose-aarch64/actions/runs/646117318 这个下面的 Artifacts
是我目前编译的 1.28.5
的版本。
银河麒麟 v10 系统,架构 arm64
$ arch
aarch64
$ cat /etc/os-release
NAME="Kylin Linux Advanced Server"
VERSION="V10 (Tercel)"
ID="kylin"
VERSION_ID="V10"
PRETTY_NAME="Kylin Linux Advanced Server V10 (Tercel)"
ANSI_COLOR="0;31"
docker 版本信息
$ docker info
Containers: 63
Running: 44
Paused: 0
Stopped: 19
Images: 24
Server Version: 18.09.9
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
runc version: 425e105d5a03fabd737a126ad93d62a9eeede87f
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 4.19.90-17.ky10.aarch64
Operating System: Kylin Linux Advanced Server V10 (Tercel)
OSType: linux
Architecture: aarch64
CPUs: 64
Total Memory: 62.76GiB
Name: reg.wps.lan
ID: RI24:C6CM:WELZ:MQEJ:N5OY:IR74:OQPG:XV72:SFRI:NUSK:DS44:OQNQ
Docker Root Dir: /data/kube/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
reg.wps.lan:5000
treg.yun.wps.cn
127.0.0.0/8
Registry Mirrors:
https://registry.docker-cn.com/
https://docker.mirrors.ustc.edu.cn/
Live Restore Enabled: false
Product License: Community Engine
$ ldd ./docker-compose-linux-arm64
linux-vdso.so.1 (0x0000fffd72210000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000fffd721a0000)
libz.so.1 => /lib64/libz.so.1 (0x0000fffd72160000)
libc.so.6 => /lib64/libc.so.6 (0x0000fffd71fd0000)
/lib/ld-linux-aarch64.so.1 (0x0000fffd72220000)
$ ll
总用量 10504
drwxr-xr-x 2 root root 26 3月 13 11:11 conf.d
-rwxr-xr-x 1 root root 10750256 3月 12 13:15 docker-compose-linux-arm64
-rw-r--r-- 1 root root 389 3月 13 11:11 docker-compose.yml
drwxr-xr-x 2 root root 6 3月 13 11:11 down
$ cat conf.d/default.conf
server {
listen 81;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
autoindex on;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
$ cat docker-compose.yml
version: '3.4'
services:
nginx:
image: nginx:alpine
container_name: install-nginx
hostname: install-nginx
volumes:
- /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro
- ./down:/usr/share/nginx/html
- ./conf.d/:/etc/nginx/conf.d/
network_mode: "host"
logging:
driver: json-file
options:
max-file: '3'
max-size: 100m
$ mkdir conf.d
$ ./docker-compose-linux-arm64 up -d
Pulling nginx (nginx:alpine)...
alpine: Pulling from library/nginx
Digest: sha256:c2ce58e024275728b00a554ac25628af25c54782865b3487b11c21cafb7fabda
Status: Downloaded newer image for nginx:alpine
Creating install-nginx ... done
$./docker-compose-linux-arm64 ps -a
Name Command State Ports
--------------------------------------------------------------
install-nginx /docker-entrypoint.sh ngin ... Up
$ netstat -nlptu | grep -E ':81\s'
tcp 0 0 0.0.0.0:81 0.0.0.0:* LISTEN 4093364/nginx: mast
页面访问了下正常,清理
$ ./docker-compose-linux-arm64 down
Stopping install-nginx ... done
Removing install-nginx ... done
Recommend
-
10
Docker multi-arch with buildx. 7 minute read I use docker a lot, like… all the time, I use it locally and I run it on my servers, I use it for job and even in private. When working, I prefer to “bring my own images” t...
-
10
Preparation toward running Docker on ARM Mac: Building multi-arch images with Docker BuildX Original text by
-
6
使用buildx构建多平台可用Docker镜像 发表于 2020-04-07 | 分类于 技术控 |
-
13
Engineering Update: BuildKit 0.9 and Docker Buildx 0.6 Releases Kevin Alvarez Jul 28 20...
-
8
My Workflow One of the more urgent needs in the community was to automate the building of ARM wheels of PyTorch to utilize PyTorch on Nvidia Devices (e.g. Nvidia Jetson Nano) with CUDA enabled. Nvidia currently offers this bu...
-
7
1、本地安装环境为docker-compose 作为PHP调试环境 2、确保 php74 容器已经安装好了xdebug扩展 3、php.ini 配置文件(PHP7.4映射配置) [XDebug] xdebug.remote_en...
-
15
-
7
写在前边 记录一下前阵子在X86_64平台使用Docker Buildx构建多平台镜像的办法,包含但不限于构建ARM镜像。
-
7
个人比较喜欢影视作品,下载了大量的剧集视频,有些文件的命名不规范,就需要重新命名,之前是用的一款 renamer 客户端软件,用起来不太爽就自己做了个 bs 架构的重命名软件并开源在 github:open-...
-
7
使用Docker buildx 为 .NET 构建多平台镜像 .NET...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK