🐳

M1 Mac で Python環境 (Docker + VSCode編)

2021/10/17に公開

はじめに

以前、JupyterLab App で手軽にPython環境を構築する方法を記事にしました。
今回は、Docker と VSCode を使ったPython環境の構築を試します。
それぞれを用いる動機は次の通りです。

  • Docker: Macシステムと独立してPython環境を構築したい。複数の環境を使い分けたい。
  • VSCode: 優れたエディタや強力なデバッグ機能を使いたい。

https://zenn.dev/ochamikan/articles/b265f50f77dd8b

インストール

Docker

  1. 公式サイトから、Docker Desktop を入手します。M1 Mac の場合は、Mac with Apple chip からダウンロードします。
  2. Rosetta2 (Intel用コードの変換ツール) をインストールします。[1]
    下記コマンドをターミナルで実行すると、SLAに合意するか聞かれるので、Aを入力します。
    softwareupdate --install-rosetta
    
    Install of Rosetta 2 finished successfullyと表示されれば完了です。

VSCode (Visual Studio Code)

  1. 公式サイトから、VSCode を入手します。
  2. VSCode を起動して、以下の拡張機能をインストールします。
    • Japanese Language Pack for VS Code
    • Visual Studio Code Remote - Containers
      拡張機能

VSCodeとDockerコンテナを接続

利用するイメージ

本記事では、Dockerコンテナ内でPythonを動作させ、それをVSCodeから利用します。コンテナの作成には必要なイメージ[2]を準備する必要がありますが、今回は jupyter/scipy-notebook[3] を利用することにします。

イメージの取得

  1. ターミナルから次のコマンドを実行します。なお、Docker Desktop が起動していないと実行できないので注意してください。
    docker pull jupyter/scipy-notebook
    
  2. イメージの取得が完了したら、docker images コマンドを実行すると、jupyter/scipy-notebook が表示されるはずです。なお、Docker Desktop のダッシュボードからも、サイドバーの Images を選択すると同様の確認が行なえます。

コンテナの起動と接続

  1. ターミナルから次のコマンド[4]を実行します。
    docker run -it --rm --name jupyter jupyter/scipy-notebook
    
  2. VSCodeのサイドバーからRemote Explorerを選択すると、起動したコンテナ(jupyter)が表示されていることが確認できます。
    コンテナ一覧
    1. のコンテナを右クリックして「Attach to Container」を選択すると、コンテナとVSCodeが接続されます。
      コンテナ接続

コンテナ内でPythonスクリプトを実行

スクリプトの作成

  1. ExplorerのWorkフォルダ内に、新規ファイル(例:sample.py)を作成します。
    新規ファイル
  2. sample.pyに、以下のコードを入力して保存します。
    import datetime
    
    # 現在日時の取得
    dt_now = datetime.datetime.now()
    
    # 現在日時の表示
    print(dt_now)
    

スクリプトの実行

  1. 右上の実行ボタンで実行すると、ターミナルに実行結果が表示されます。
    スクリプトの実行
  2. ブレークポイントなどのデバッガ機能を使う場合は、サイドバーからRun and Debugを選択し、さらにRun and Debugボタンを押下します。すると、上部にデバッグ構成を選択するダイアログが表示されるので、Python Fileを選択します。
  3. 予めブレークポイントを設定した状態でRun and Debugを実行すると、下図のように変数の中身やコールスタックなどを確認することができます。
    デバッガ

作業終了時の手順

  1. VSCodeを終了するか、コンテナに接続されたウインドウを閉じることで、コンテナとの接続は解除されます。
  2. コンテナの停止はいくつかの方法があります。
    • VSCodeのRemote Explorerにおいて、コンテナを右クリックして「Stop Container」を選択する
    • コンテナが動作しているターミナルで「CTRL + C」を入力して、docker runの実行を停止する。
    • Docker Desktop のダッシュボードから、サイドバーの Containers/App を選択して実行中のコンテナを停止する。
    • docker ps コマンドで実行中のコンテナIDを確認し、docker kill コマンドで停止する。

まとめ

Dockerコンテナを用いてPython実行環境を構築し、VSCodeから利用する方法について記載しました。Dockerの環境管理と、VSCodeのエディタ・デバッグ機能の両方を活用できることが分かりました。
本環境を用いたJupyterLabの利用も簡単に行なえます。環境の活用例についても、今後執筆していきます。

脚注
  1. 公式サイトにはM1 Mac用のインストーラが準備されていますが、執筆時点(2021/10/10)では、内部にIntel用コードで動作する部分が残っているため、Rosetta2が必要とのことです。公式サイトのインストールマニュアルにもRosetta2のインストール手順が記載されています。 ↩︎

  2. ざっくり言えば、イメージはコンテナを作成するための設計図です。設計図は自分で作ることもできますが、DockerHub(イメージをクラウド上で共有できるサービス)から取得することで効率的にDocker環境を構築することができます。 ↩︎

  3. 選択の理由は、JupyterLabに対応したイメージの中で、ダウンロード数や利用実績が多いためです。 ↩︎

  4. docker run -it --rm -name {コンテナ名} {イメージ名} は、Dockerコンテナを起動する基本的なコマンドです。-itオプションは、コンテナとホストの間でターミナルの入出力をつなげる働きがあります。--rmオプションは、コンテナ終了時にコンテナを自動的に削除するものです。今回は、DockerコンテナとVSCodeを接続することが目的のため、細かなオプションの設定については割愛します。 ↩︎

Discussion