はじめに
以前の記事で既存のWebアプリをDocker化するアプローチについて紹介しました。
さて、次はPythonを学習することになるのですが、ここで環境をどうするか問題が起きてしまいます。私の環境はMac OSですので、ここからはMacにおけるPythonの環境構築のお話になります。
Pythonをインストールするには次の方法が主に挙げられます。
- Anacondaを使う
- 公式からダウンロード
- Homebrewを使う など
私のローカル環境には すでにAnacondaを使って Python 3.10.9 がインストールされています。
今回、スクールのロードマップにしたがい、Pythonの学習を始めるにあたってPython 3.11にバージョンアップしたいなと思っていました。
しかし、それと同時にインストール済みのPythonのバージョンを上げるのも面倒だなとも思いました。
ということで
せっかく学んだDockerを使って、シンプルな構成でPython 3.11の環境を作ってみよう。
コンセプト
今回のPythonの環境構築では、次の要件を満たすようにしました。
- Pythonのバージョンは 3.11とすること
- Dockerを使うこと
- オフィシャルイメージから軽量なイメージ(alpineを使用したもの)を選択すること
- サードパーティーのライブラリ(Pandasなど)は含まないこと
- エディタはVSCodeを使用し、拡張機能(Dev Containers)を使わないこと
- コンテナ内のPythonを使うが、データはバインドマウント(ファイルはローカルに保存)
VSCodeの拡張機能でDev Containersという便利なものがあるようですが、ここではあえて使用しません。
イチからDockerfileとdocker-compose.ymlを作って環境構築します。
Docker ファイルを作成する
ベースとなるPythonのイメージは、Docker Hubからpythonのオフィシャルイメージを検索します。
3.11のタグが付いた軽量なイメージとしてこちらを選択することにしました。
今回はPythonの基礎学習用のディレクトリとして、「python_basic」という名前のディレクトリをローカルに用意することにします。
私は、デスクトップにこのディレクトリを作成しました。
では、エディタでpython_basicディレクトリを開いて、Dockerfile
を作ります。
FROM python:3.11.9-alpine WORKDIR /python_basic
たったこれだけ?と思うかもしれませんが、これだけです。
docker-compose.ymlの作成
次は、docker-compose.ymlファイルを作成します。
今回のケースでは。ホストマシン(ローカル)のエディタ(VSCode)でファイルを編集して、コンテナで実行する仕組みが必須になります。
このことを踏まえた上で、docker-compose.yml
ファイルを作ります。
# version: 3 # この行は必要に応じてコメントアウトを外す services: app: build: . volumes: - '.:/python_basic' # バインドマウントの設定 tty: true stdin_open: true
これでOKです。
コンテナの起動と動作確認
コンテナの起動
作成したコンテナを起動して、動作を確認します。
run
コマンドを使って、サービスで設定したapp
のコンテナ内でシェルを使いたいのでsh
をつけます。
また、コンテナは自動削除したいので、--rm
オプションも付けます。
では、次のコマンドを使ってコンテナを起動します。
$ docker-compose run --rm app sh
動作確認
では、シェルを使ってコマンドを入力してみます。
$ pwd
作業ディレクトリが表示されますね。
次にエディタで新しいファイルとしてhello.py
を作成します。
ファイルの中身は何でもいいのですが、print文でPythonのバージョンを表示するようにしてみます。
import platform print(f'hello python {platform.python_version()} !!')
次にターミナルからcatコマンドで作成したhello.pyが表示されるか見てみます。
$ cat hello.py
では、いよいよpythonファイルを実行してみます。
$ python hello.py
Pythonがきちんと実行されて、バージョンも3.11.9が入っていることが確認できました。
大成功です!
最後にコンテナを抜けます。
$ exit
いかがだったでしょうか。
これでPythonの基礎学習を始める準備が整いました。
この記事が、環境構築に悩む方の参考になれば幸いです。
では✋