以前書いたDockerのマニフェストをARM Macでも動くようにGitHub Copilotを使って修正する
現在YugabyteDBを検証しています。YugabyteDBの動作検証のためにDockerも相変わらず使っています。 検証の初期はIntel CPU版のMacを使っていました。なので特に問題なくLinuxのDockerで動くコードをそのままIntel CPU版のMacでも動かせていました。 つい先日、M4のMac miniが安価で出ていたので購入しまして、若干その修正が必要になりました。 手で修正するのは簡単なのですが基本私は面倒くさがりなので、AIを使って対応してみようと思いました。 macOS版のDocker Desktopについて macOS版のDocker Desktopでは、バージョン4.25以降のバージョンではRosetta 2に対応しており、設定を有効化してコンテナを起動するときにオプションを追加指定することで、ARM Mac上でx86_64向けのコンテナを起動できます。 実際起動するときは、interactiveとかdetachとかポートのpublishオプションなどを追加すると思います。 --platform linux/amd64オプションを付与することにより、ARM Mac上でx86_64向けのコンテナを起動できます。 # Rosetta 2を使って、macOSのDocker Desktopでx86_64のコンテナを起動する docker run –platform linux/amd64 <イメージ名> 背景 念のために言っておくと、YugabyteDB自体のコンテナイメージはx86_64のイメージの他、ARM対応のイメージも提供されています。そのため、特別なことをしないでもARM Mac上でYugabyteDBのコンテナーを動かすことはできます。 https://hub.docker.com/r/yugabytedb/yugabyte/tags ただコンテナーの中でsysbenchを動かす必要があり、かつ対抗がYugabyteDBという分散DBなので、本家のsysbenchではなく、分散DBにも対応するコードが入ったsysbenchをインストールする必要がありました。そのsysbenchのパッケージがx86_64でしか提供されていなかったために、このような対応が必要だったというわけです。 https://docs.yugabyte.com/preview/benchmark/sysbench-ysql/ 本題 変更前のマニフェストは次に公開されているものを使います。 https://github.com/ytooyama/yuga-sysbench-example Dockerfile Dockerfileは二つ用意しており、base用とsysbench用です。 YugabyteDBのオフィシャルイメージは、AlmaLinux 8をコアに利用したイメージになっています。 base用はiproute-tcのRPMパッケージをインストールするだけの内容になっています。これならARM64向けのimageを使っても良いかもしれませんが、コンテナ間でア クセスする必要があるので、sysbenchコンテナはx86_64で、そのほかはaarch64でコンテナで動かす前提にします。 ただ、Dockerfileには特別なタグは設定しません。 # ベースイメージとして指定されたYugabyteDBのイメージを使用 FROM docker.io/yugabytedb/yugabyte:2.25.2.0-b359 # 必要なパッケージをインストール RUN dnf install -y iproute-tc && dnf clean all # デフォルトのコマンドを指定(必要に応じて変更) CMD ["/bin/bash"] 前述のように、Yugabyteのパッチが適用されたsysbenchをインストールするようにDockerfileに記述します。 次のようなDockerfileを作成しました。 # ベースイメージとして指定されたYugabyteDBのイメージを使用 FROM docker.io/yugabytedb/yugabyte:2.25.2.0-b359 # 必要なパッケージをインストール RUN curl -LO https://github.
Read more...