Macのローカルのpython環境がおかしくなったのでDockerコンテナ上に構築した話
はじめに
最近ブログサボりまくってた.
先日の大学でやったLT大会でブログを書いたりOUTPUTするときはまず未来の自分が読んだ時のためになればよくて誰かに読んでもらえるような記事は二の次という話をしていてとてもタメになったので,踏み切ってこれからは技術的なことも未来の自分が同じことでつまづいた時に読み返すことで解決できればと思い書きます.
本題
研究でスマホアプリで取得したデータをcsvに出力してそのcsvファイルをpythonで解析していたが,ある日突然動かなくなった.(おそらく自分がシェルとか色々いじったせい)
論文執筆時期などで急いでる時にまた動かなくなった時に最初から環境構築をしたりエラー処理するのは辛いのでDockerコンテナでpython環境を立ち上げてそこでpythonを動かすことにした.
やったこと
まずコンテナ動かす用のディレクトリ作る.
その中でDockerfileとdocker-compose.ymlファイルを作成してそれぞれ中身は以下の通りにする.
Dockerfile↓
FROM python:3 USER root RUN apt-get update RUN apt-get -y install locales && \ localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 ENV LANG ja_JP.UTF-8 ENV LANGUAGE ja_JP:ja ENV LC_ALL ja_JP.UTF-8 ENV TZ JST-9 ENV TERM xterm RUN apt-get install -y vim less RUN pip install --upgrade pip RUN pip install --upgrade setuptools
docker-compose.yml↓
version: '3' services: python3: restart: always build: . container_name: 'python3' working_dir: '/root/' tty: true volumes: - ./opt:/root/opt
これで準備完了.下記のコマンドでコンテナを起動する.
$docker-compose up -d --build
起動しているかの確認は下記のコマンド.
$docker-compose ps
起動させたコンテナに入るのは下記のコマンド.
$docker exec -it python3 bash
コンテナに入ったらpythonを動かすために必要なライブラリをインストールする.(例)
$ python -m pip install numpy $ python -m pip install matplotlib $ python -m pip install scipy
インストールしたライブラリの確認
$ python -m pip list
ローカルでVScodeなどを使ってコーディングしてコンテナ上ではpythonの実行だけさせたいので,ローカルにあるpythonファイルや解析したいcsvをコンテナ内のディレクトリと同期させる.
実は,コンテナを立ち上げたときにoptという空のディレクトリが生成されている.
$ ls Dockerfile docker-compose.yml opt
このoptの中に自分が実行したいpythoファイルや解析したいcsvファイルが入っているディレクトリをコピーする.
すると,コンテナ内の~/opt
にコピーしたフォルダが同期されてコンテナ内でもローカルのファイルを実行することができるようになる!(なぜかはわかってない)
これで,ローカルではVScodeや自分の好きなエディタでコーディングしてoptに入れればコンテナ内で実行することができる.コンテナマジ便利.