前言
这两天火爆的甲骨文 ARM 实例经过折腾基本把环境配置完毕,但是最后发现 docker compose 原生无法支持 ARM ,查了一圈资料发现都是需要自编译,而且相关文献都是国外针对树莓派的一些案例.最后还是在国外知名的linuxserver.io
上找到了方法.整理下水一片中文教程.
compose 官方已经发布 ARM 版本,不需要自行编译了.
官方多平台安装命令
curl -L https://github.com/docker/compose/releases/download/v2.5.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
国内环境镜像
curl -L https://ghproxy.com/https://github.com/docker/compose/releases/download/v2.5.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
原理
目前的 ARM 版本方案的 docker compose 并不是编译获得执行文件,而是使用官方的仓库进行 docker 容器化编译成镜像,然后在需要docker-compose up -d
等操作的目录中来启动容器代为编排启动.由于编译教程都很古老,博主尝试了几次都失败,但是linuxserver.io
已经提供了编译好的镜像可以直接使用.
教程
本文教程基于 Oracle Linux 系统
镜像使用
使用非常简单,在需要docker-compose up -d
命令的目录中执行以下命令即可:
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$PWD:$PWD" \
-w="$PWD" \
linuxserver/docker-compose \
up
其中最后一行的up
是命令,根据需求自行修改,例如up -d
,down
,restart
等.本容器命令也自带--rm
参数,执行完毕自动删除compose 容器
,并不会给系统带了无用的多余容器.
推荐脚本模拟镜像使用
官方推荐
用更加方便的方式,通过脚本文件修改为/usr/local/bin/docker-compose
,就可以像X86
架构一样,直接执行docker-compose up -d
等操作了.不过原理上还是使用上述的容器来执行.这样使用起来更加方便和熟悉.执行以下两行命令即可:
sudo curl -L --fail https://raw.githubusercontent.com/linuxserver/docker-docker-compose/master/run.sh -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Tips
博主平时使用docker-compose
会传递一些宿主机的系统环境变量,例如$HOSTNAME
到容器中,在常规X86
的系统下 docker-compose 本身是在宿主机运行,所以没什么问题.而现在ARM
的使用方式是需要利用容器来帮忙运行docker-compose
,所需的环境变量自然是变成了这个中间帮忙的容器的变量.目前只能通过修改/usr/local/bin/docker-compose
脚本来实现.
例如,将/usr/local/bin/docker-compose
最后一行的exec docker run --rm .....
命令中追加为exec docker run --rm --hostname=$HOSTNAME .....
,这样就可以将宿主机的主机名带入至docker-compose 容器
,在带入进需要启动的容器中.
结语
后续更多关于甲骨文的一些使用心得会持续更新,欢迎收藏本站或订阅RSS
源.
甲骨文云 Oracle Cloud 免费 ARM 实例关于引导卷扩容 yum docker 等相关解决方案
2 条评论
[...]ARM 架构 Linux 使用 docker compose 教程[...]
我也是用的Oracle AArch64的VPS,该系统版本没有官方的docker-compose可用,我自己用源码编译出来的最新版本,表示很好用