g00ceyの技術ブログ

docker-composeをarm64用にRaspberry pi4でビルド

目次

docker-compose入れることに苦労した日記が書かれております。

結論

一番早道の方法は、一番下に書かれているansibleでインストールするにてさくっとインストールしてしまうほうがよろしいのではないだろうかと思っている次第。

docker-composeをdockerでビルドする

結論から書くと、この方法ではだめだった。

docker/compose: Define and run multi-container applications with Docker

arm64でサーバーを構築しているのだが、docker-composeがバイナリとして用意さていない。
マシンとしては4台あるので各々にpython入れてインストールするのはアホらしいので、一個でビルドして他のマシンに展開しようと思う。

git clone https://github.com/docker/compose.git

その後、Dockerfileを変更すればいいのかなと思った。

diff --git a/Dockerfile b/Dockerfile
index 918c6876..ee6ee76d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -7,9 +7,9 @@ ARG RUNTIME_DEBIAN_VERSION=stretch-20191224-slim

 ARG BUILD_PLATFORM=alpine

-FROM docker:${DOCKER_VERSION} AS docker-cli
+FROM arm64v8/docker:${DOCKER_VERSION} AS docker-cli

-FROM python:${PYTHON_VERSION}-alpine${BUILD_ALPINE_VERSION} AS build-alpine
+FROM arm64v8/python:${PYTHON_VERSION}-alpine${BUILD_ALPINE_VERSION} AS build-alpine
 RUN apk add --no-cache \
     bash \
     build-base \
@@ -29,7 +29,7 @@ RUN apk add --no-cache \
     zlib-dev
 ENV BUILD_BOOTLOADER=1

-FROM python:${PYTHON_VERSION}-${BUILD_DEBIAN_VERSION} AS build-debian
+FROM arm64v8/python:${PYTHON_VERSION}-${BUILD_DEBIAN_VERSION} AS build-debian
 RUN apt-get update && apt-get install --no-install-recommends -y \
     curl \
     gcc \
@@ -65,8 +65,8 @@ ARG GIT_COMMIT=unknown
 ENV DOCKER_COMPOSE_GITSHA=$GIT_COMMIT
 RUN script/build/linux-entrypoint

-FROM alpine:${RUNTIME_ALPINE_VERSION} AS runtime-alpine
-FROM debian:${RUNTIME_DEBIAN_VERSION} AS runtime-debian
+FROM arm64v8/alpine:${RUNTIME_ALPINE_VERSION} AS runtime-alpine
+FROM arm64v8/debian:${RUNTIME_DEBIAN_VERSION} AS runtime-debian
 FROM runtime-${BUILD_PLATFORM} AS runtime
 COPY docker-compose-entrypoint.sh /usr/local/bin/
 ENTRYPOINT ["sh", "/usr/local/bin/docker-compose-entrypoint.sh"]

で、その後、

ubuntu@pi4-1:~/src/git/github/another-author/compose$ docker run --rm  -v /home/ubuntu/src/git/github/another-author/compose/:/script compose cp /usr/local/bin/docker-compose /script/

これで行けると思ったのだけど、

ubuntu@pi4-1:~/src/git/github/another-author/compose$ ./docker-compose
Error loading shared library libz.so.1: No such file or directory (needed by ./docker-compose)
Error relocating ./docker-compose: inflate: symbol not found
Error relocating ./docker-compose: inflateInit_: symbol not found
Error relocating ./docker-compose: inflateEnd: symbol not found
ubuntu@pi4-1:~/src/git/github/another-author/compose$ ldd ./docker-compose
        linux-vdso.so.1 (0x0000ffff852fc000)
        libz.so.1 => /lib/aarch64-linux-gnu/libz.so.1 (0x0000ffff85279000)
        libc.musl-aarch64.so.1 => not found
        libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000ffff85107000)
        /lib/ld-musl-aarch64.so.1 => /lib/ld-linux-aarch64.so.1 (0x0000ffff852cd000)
ubuntu@pi4-1:~/src/git/github/another-author/compose$ sudo ln -s /lib/aarch64-linux-musl/libc.so /lib/libc.musl-aarch64.so.1

ubuntu@pi4-1:~/src/git/tluna/work-blog$ ./docker-compose
bash: ./docker-compose: No such file or directory
ubuntu@pi4-1:~/src/git/tluna/work-blog$ ldd docker-compose
ldd: ./docker-compose: No such file or directory

解消できなかった。 残念無念。

pipでインストールする

debian buster (arm64) に docker install - Qiita
これも、エラーで止まった。。。。

もしかして?と思って確認してみると、python3であれば使えるっぽい。ぽい。

sudo apt intall pytho3-pip
pip3 install docker-compose

ansibleでインストールする

Pi4が4台もありますので、pipでインストールするで作成した。 dockerもdocker-composeも一緒に入るのでよきよき。 t1una/sbc-ansible: ブログで出すときに困ったのでもう公開しちゃう


Share

comments powered by Disqus