M1 Mac で Python環境 (Docker + VSCode編)
はじめに
以前、JupyterLab App で手軽にPython環境を構築する方法を記事にしました。
今回は、Docker と VSCode を使ったPython環境の構築を試します。
それぞれを用いる動機は次の通りです。
- Docker: Macシステムと独立してPython環境を構築したい。複数の環境を使い分けたい。
- VSCode: 優れたエディタや強力なデバッグ機能を使いたい。
インストール
Docker
- 公式サイトから、Docker Desktop を入手します。M1 Mac の場合は、Mac with Apple chip からダウンロードします。
- Rosetta2 (Intel用コードの変換ツール) をインストールします。[1]
下記コマンドをターミナルで実行すると、SLAに合意するか聞かれるので、A
を入力します。softwareupdate --install-rosetta
Install of Rosetta 2 finished successfully
と表示されれば完了です。
VSCode (Visual Studio Code)
- 公式サイトから、VSCode を入手します。
- VSCode を起動して、以下の拡張機能をインストールします。
- Japanese Language Pack for VS Code
- Visual Studio Code Remote - Containers
VSCodeとDockerコンテナを接続
利用するイメージ
本記事では、Dockerコンテナ内でPythonを動作させ、それをVSCodeから利用します。コンテナの作成には必要なイメージ[2]を準備する必要がありますが、今回は jupyter/scipy-notebook
[3] を利用することにします。
イメージの取得
- ターミナルから次のコマンドを実行します。なお、Docker Desktop が起動していないと実行できないので注意してください。
docker pull jupyter/scipy-notebook
- イメージの取得が完了したら、
docker images
コマンドを実行すると、jupyter/scipy-notebook
が表示されるはずです。なお、Docker Desktop のダッシュボードからも、サイドバーのImages
を選択すると同様の確認が行なえます。
コンテナの起動と接続
- ターミナルから次のコマンド[4]を実行します。
docker run -it --rm --name jupyter jupyter/scipy-notebook
- VSCodeのサイドバーからRemote Explorerを選択すると、起動したコンテナ(
jupyter
)が表示されていることが確認できます。
-
- のコンテナを右クリックして「Attach to Container」を選択すると、コンテナとVSCodeが接続されます。
- のコンテナを右クリックして「Attach to Container」を選択すると、コンテナとVSCodeが接続されます。
コンテナ内でPythonスクリプトを実行
スクリプトの作成
- ExplorerのWorkフォルダ内に、新規ファイル(例:
sample.py
)を作成します。
-
sample.py
に、以下のコードを入力して保存します。import datetime # 現在日時の取得 dt_now = datetime.datetime.now() # 現在日時の表示 print(dt_now)
スクリプトの実行
- 右上の実行ボタンで実行すると、ターミナルに実行結果が表示されます。
- ブレークポイントなどのデバッガ機能を使う場合は、サイドバーからRun and Debugを選択し、さらにRun and Debugボタンを押下します。すると、上部にデバッグ構成を選択するダイアログが表示されるので、Python Fileを選択します。
- 予めブレークポイントを設定した状態でRun and Debugを実行すると、下図のように変数の中身やコールスタックなどを確認することができます。
作業終了時の手順
- VSCodeを終了するか、コンテナに接続されたウインドウを閉じることで、コンテナとの接続は解除されます。
- コンテナの停止はいくつかの方法があります。
- VSCodeのRemote Explorerにおいて、コンテナを右クリックして「Stop Container」を選択する
- コンテナが動作しているターミナルで「CTRL + C」を入力して、
docker run
の実行を停止する。 - Docker Desktop のダッシュボードから、サイドバーの
Containers/App
を選択して実行中のコンテナを停止する。 -
docker ps
コマンドで実行中のコンテナIDを確認し、docker kill
コマンドで停止する。
まとめ
Dockerコンテナを用いてPython実行環境を構築し、VSCodeから利用する方法について記載しました。Dockerの環境管理と、VSCodeのエディタ・デバッグ機能の両方を活用できることが分かりました。
本環境を用いたJupyterLabの利用も簡単に行なえます。環境の活用例についても、今後執筆していきます。
-
公式サイトにはM1 Mac用のインストーラが準備されていますが、執筆時点(2021/10/10)では、内部にIntel用コードで動作する部分が残っているため、Rosetta2が必要とのことです。公式サイトのインストールマニュアルにもRosetta2のインストール手順が記載されています。 ↩︎
-
ざっくり言えば、イメージはコンテナを作成するための設計図です。設計図は自分で作ることもできますが、DockerHub(イメージをクラウド上で共有できるサービス)から取得することで効率的にDocker環境を構築することができます。 ↩︎
-
選択の理由は、JupyterLabに対応したイメージの中で、ダウンロード数や利用実績が多いためです。 ↩︎
-
docker run -it --rm -name {コンテナ名} {イメージ名}
は、Dockerコンテナを起動する基本的なコマンドです。-it
オプションは、コンテナとホストの間でターミナルの入出力をつなげる働きがあります。--rm
オプションは、コンテナ終了時にコンテナを自動的に削除するものです。今回は、DockerコンテナとVSCodeを接続することが目的のため、細かなオプションの設定については割愛します。 ↩︎
Discussion