batchのブログ

知見の備忘録

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に入れればコンテナ内で実行することができる.コンテナマジ便利.

参考

qiita.com