M1 MacのDockerでx86_64イメージを使う *

M1 Macにしてみたものの、意外にもPythonで動かないライブラリがあってDockerを使うことになった。Dockerはx86_64のイメージを手軽に動かせるので便利。DockerでなくHomebrewを工夫することでもできるけど、Dockerに閉じ込めればクリーンに使えて便利。

そこで、以下のようなDockerfileを作って使う。

FROM --platform=linux/x86-64 ubuntu

RUN set -x && \
  apt update && \
  apt install -y tzdata && \
  apt install -y language-pack-ja-base language-pack-ja locales && \
  locale-gen ja_JP.UTF-8 && \
  apt install -y wget curl git vim && \
  apt install -y python3 python3-pip && \
  apt install -y build-essential libssl-dev libffi-dev python3-dev && \
  apt install -y libsndfile1-dev 

ENV LC_ALL ja_JP.UTF-8
ENV LANG ja_JP.UTF-8

RUN set -x && \
  pip3 install \
  Flask==2.0.2 \
  SoundFile==0.10.3.post1 \
  google-cloud-core==2.1.0 \
  google-cloud-speech==2.10.0 \
  pyinstaller==4.5.1 \
  azure-cognitiveservices-speech==1.18.0 \
  grpcio-tools==1.26.0

このDockerfileをビルドするには、以下のようなコマンドを実行する。

#!/bin/bash
docker build -t hoge/x86_64_my_python:latest .

起動するには以下のようにする。

#!/bin/bash
LOCAL_PORT=8888
DOCKER_PORT=8888
SCR_DIR=$(cd $(dirname $0); pwd)
BASE_DIR=`echo $SCR_DIR | xargs dirname`

docker run \
  --name hoge-server \
  --rm \
  -v $BASE_DIR/app_dir:/root/app_dir \
  -p $LOCAL_PORT:$DOCKER_PORT \
  -it hoge/x86_64_my_python:latest \
  /root/app_dir/server.py $DOCKER_PORT

末尾の一行を「/bin/bash」に変えれば、シェルを起動できる。
上記を、docker-compose.ymlで管理するのも便利。

参考 *