ラズパイにgolangで書かれているdocker composeをinstallする

多分令和最新版。

linuxでdocker composeを使いたい場合、macOSwindowsDocker for xxx系とは違い、docker composeはバンドルされてないので、自分でインストールする必要があった。

特にラズパイではdocker-compose時代(Pythonスクリプト)の場合はpipでインストールする必要があった。 我々はdockerでローカルのことを考えずに動かしたいのにPython3関係の構築をしないといけないのは面倒....。

現代ではdocker composeはgolangで書き直されており、これを使う場合はpip installが不必要。 さらにARMバイナリ用のdocker composeはGitHub Releaseで配布されているので、落としてくれば使えるという極めて親切な設計になっている。

今回はすでにdockerはインストールされているものとして、docker composeのインストールを見てみる。

インストール方法

基本はcomposeのREADMEに書いてあるとおり。

github.com

自分だけで使う場合は、$HOME/.docker/cli-pluginsに、全ユーザーで使いたい場合は/usr/local/lib/docker/cli-pluginsなどにdocker-composeの名前でバイナリをポン置きすれば使えるようになる。

バイナリはリリースから持ってくれば良い。

github.com

気をつける点として、uname -mすると微妙にarmv7lとcomposeで打たれているアーキテクチャ名(armv7)と異なる。ワンライナーの中でuname -mしていい感じに取得しようとする場合は注意。

$ uname -m
armv7l

自宅のラズパイ4で、全ユーザーにインストールしたい場合は次のような感じでインストールする。

とりあえずrootになり

$ sudo -i 

後は素朴に

# mkdir -p  /usr/local/libexec/docker/cli-plugins
# cd /usr/local/libexec/docker/cli-plugins
# wget https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-linux-armv7 -O docker-compose
# chmod +x docker-compose

こうするとdocker composeが使えるようになる。

$ docker compose

Usage:  docker compose [OPTIONS] COMMAND

Docker Compose

Options:
      --ansi string                Control when to print ANSI control characters ("never"|"always"|"auto") (default "auto")
      --compatibility              Run compose in backward compatibility mode
      --env-file string            Specify an alternate environment file.
  -f, --file stringArray           Compose configuration files
      --profile stringArray        Specify a profile to enable
      --project-directory string   Specify an alternate working directory
                                   (default: the path of the Compose file)
  -p, --project-name string        Project name

Commands:
  build       Build or rebuild services
  convert     Converts the compose file to platform's canonical format
  cp          Copy files/folders between a service container and the local filesystem

バイナリポン置きなのでローカル環境に色々いれなくていいので便利ですね。現場からは以上です。