前言

这两天火爆的甲骨文 ARM 实例经过折腾基本把环境配置完毕,但是最后发现 docker compose 原生无法支持 ARM ,查了一圈资料发现都是需要自编译,而且相关文献都是国外针对树莓派的一些案例.最后还是在国外知名的linuxserver.io上找到了方法.整理下水一片中文教程.

本文为 Stille 原创文章.经实践,测试,整理发布.如需转载请联系作者获得授权,并注明转载地址.

原理

目前的 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 等相关解决方案

本站提供免费和付费的技术支持.你可以通过留言,邮件,TG群的方式来技术交流和免费咨询.同时也可以付费支持的方式获得相关的技术支持,项目部署配置等服务.具体相关详情请点击查看 技术支持页面

如果喜欢我的文章,觉得对你有帮助,请随意赞赏!