arm64 平台下编译 docker-compose

arm64 平台下编译 docker-compose

由于官方仅提供有 x86_64 架构的 docker-compose 二进制包文件,无法在 aarch64 下运行。不得已只能自己编译相关文件。

如果不想自己编译可以使用 linuxserver/docker-docker-compose 提供的二进制文件,不过看了下只有新版本才有 arm 架构的包,如果需要老版本还是只能自己编译。

编译环境

  • Python: 3.8.6

  • Python 环境管理:pyenv

  • Docker-ce: 20.10.7

  • 操作系统:

    /etc/os-release
    1
    2
    3
    4
    5
    6
    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"
  • Linux 内核:

    uname -a
    1
    Linux ip-173-7-8-94.hstntx.spcsdns.net 4.19.90-17.ky10.aarch64 #1 SMP Sun Jun 28 14:27:40 CST 2020 aarch64 aarch64 aarch64 GNU/Linux

克隆代码

  1. 克隆官方源码到本地

    shell
    1
    2
    git clone https://github.com/docker/compose.git
    cd compose/
  2. 签出想要编译的分支

    shell
    1
    git checkout 1.25.4

编译镜像

  1. 替换 DockerfilealpineDebian 为国内源,并添加豆瓣的 PyPI 镜像。

    shell
    1
    2
    3
    sed -i -e '/FROM build-${BUILD_PLATFORM} AS build/aRUN mkdir ${HOME}/.pip && /bin/echo -e "[global]\\nindex-url = https://pypi.doubanio.com/simple/\\ntrusted-host = pypi.doubanio.com\\ntimeout = 120" > ${HOME}/.pip/pip.conf' \
    -e '/RUN apk add --no-cache/iRUN sed -i "s@http://dl-cdn.alpinelinux.org/@https://repo.huaweicloud.com/@g" /etc/apk/repositories' \
    -e '/RUN apt-get update/iRUN sed -i "s@http://deb.debian.org@http://repo.huaweicloud.com@g" /etc/apt/sources.list \\\n && sed -i "s@http://security.debian.org@http://repo.huaweicloud.com@g" /etc/apt/sources.list' Dockerfile
  2. 编译 dockercompose 镜像

    shell
    1
    docker build -t dockercompose:1.25.4 --build-arg BUILD_PLATFORM=debian .
  3. 等待编译完成后,可查看到如下镜像

    shell
    1
    2
    3
    # docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    dockercompose 1.25.4 2ab0e4f925d0 46 seconds ago 122MB

使用 compose

以镜像的方式使用

  1. 获取 compose 运行脚本

    shell
    1
    curl -L --fail https://github.com/docker/compose/releases/download/1.25.4/run.sh -o /usr/local/bin/docker-compose
  2. 赋予该脚本可执行权限

    shell
    1
    chmod +x /usr/local/bin/docker-compose
  3. 替换脚本中使用镜像为我们自己编译的镜像文件

    shell
    1
    sed -i 's/docker\/compose:$VERSION"/dockercompose:$VERSION"/g' /usr/local/bin/docker-compose
  4. 测试 docker-compose

    shell
    1
    2
    3
    4
    5
    # docker-compose version
    docker-compose version 1.25.4, build unknown
    docker-py version: 4.1.0
    CPython version: 3.7.5
    OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019

以二进制文件方式使用

  1. 直接从已编译好的 compose 镜像中导出二进制文件即可

    shell
    1
    docker run --rm dockercompose:1.25.4 cat /usr/local/bin/docker-compose > docker-compose
  2. 赋予文件可执行权限

    shell
    1
    chmod +x docker-compose
  3. 测试 docker-compose

    shell
    1
    2
    3
    4
    5
    # ./docker-compose version
    docker-compose version 1.25.4, build unknown
    docker-py version: 4.1.0
    CPython version: 3.7.5
    OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019

参考文章:

评论

:D 一言句子获取中...

加载中,最新评论有1分钟缓存...