DockerでPythonの開発環境を作成してみる その2
今回は、「DockerでPythonの開発環境を作成してみる その2」となります。前回、DockerfileからDockerイメージを作成してコンテナを起動、そしてPythonのスクリプトファイルを実行するところまで環境を作りました。
今回は、ホストのVSCodeからコンテナ上のPythonでデバッグ実行できるようにする環境を構築していきます。
※前回の「DockerでPythonの開発環境を作成してみる その1」から読みたい方は、こちらからどうぞ。
【目次】
- 1. VSCodeへの拡張機能のインストール
- 2. コンテナを起動する
- 3. VSCodeからコンテナに接続
- 4. VSCodeで新規ファイルを追加してみる
- 5. コンテナ側にVSCodeの拡張機能をインストール
- 6. デバッグ実行してみる
- 7. まとめ
- 参考
1. VSCodeへの拡張機能のインストール
まずは、VSCode側の準備として、拡張機能をインストールします。
インストールするのは「Remote - Containers」です。
VSCodeでDockerコンテナ上で動作している開発環境に接続して、あたかもコンテナ上でVSCodeを使っているようにするようなものです。
(あってるかな?)
では、Remote - Containersをインストールしていきます。
①VSCodeの拡張機能の検索バーに「remote」と入力する
②検索バーの下の検索結果に「Remote - Containers」が出てくるのでそれを選択します。
③「Remote - Containers」のインストール画面が開いたら「install」ボタンを押下して、インストールを実施します。
サイドバーに下図のような「Remote - Containers」アイコンが追加されればインストール成功です。
2. コンテナを起動する
前回作成したPythonの開発環境のコンテナを起動します。
前回コンテナを停止していた場合は、コンテナをstartコマンドで起動します。
PS D:\docker\python3> docker container start pythonwork pythonwork
lsコマンドで稼働しているコンテナを確認します。
PS D:\docker\python3> docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19a1a6291e4d pythondev "/bin/bash" 4 minutes ago Up 8 seconds 8080/tcp pythonwork
3. VSCodeからコンテナに接続
VSCodeのサイドバーの「Remote - Containers」アイコンを選択します。
「Remote - Containers」の画面が開き、リモートコンテナーと書いてある表示領域に先ほど起動したコンテナ「pythonwork」が存在することが確認できます。
接続したいコンテナ名にカーソルを合わせると、コンテナ名の左側に下図のようなアイコンが表示されます。
このアイコンをクリックします。
すると新しいウインドウが開きます。
しばらく待つと新しく開いたVSCodeのウインドウの左下に「Attached Container pythondev(pythonwork)」と表示され、コンテナに接続されたことが確認できました。
次は、マウント先のディレクトリを選択します。
まず、サイドバーの一番上のエクスプローラーアイコンを選択します。
表示されたが画面で「フォルダーを開く」ボタンを押下します。
画面中央にコンテナ側のディレクトリを選択するコンボボックスが表示されます。
コンテナ作成時に作成した「workdir」を選択して「OK 」ボタンを押下します。
マウント側のディレクトリと同じ内容が表示されれば成功です。
4. VSCodeで新規ファイルを追加してみる
VSCode側で新規ファイルを追加してみます。
VSCodeで「新しいファイル」ボタンを押下します。
ファイル名を入力しEnterキーを押下すると、ファイルが作成されてウインドウ右側に作成したファイルが開かれます。
この新規作成したファイル「newTestFile.py」がコンテナ側にも存在することを確認してみます。
下記コマンドでコンテナのbashを起動します。
PS D:\docker\python3> docker container exec -it pythonwork /bin/bash
bashが起動したら、ディレクトリ「workdir」配下のファイルを確認してみます。
root@19a1a6291e4d:/workdir# ls -l total 1 -rwxr-xr-x 1 root root 0 Nov 20 13:39 newTestFile.py -rwxr-xr-x 1 root root 80 Nov 12 13:28 test.py
VSCodeで作成したファイル「newTestFile.py」がコンテナにも存在することが確認できました。
5. コンテナ側にVSCodeの拡張機能をインストール
ローカルでVSCodeにインストールされている拡張機能は、コンテナ側にはインストールされていません。
必要であれば、コンテナ側にも拡張機能をインストールしてください。
コンテナ側に拡張機能をインストールするときは、「install」ボタンが、
「Install in Attached Container コンテナ名(イメージ名)」
に変わります。
6. デバッグ実行してみる
VSCode側からデバッグ実行をしてみます。
先ほど作成した新規Pythonファイルに下記のようなコードを書いて保存します。
def main(): hoge = "hogehoge" print("Hello" + hoge + "World!") if __name__ == "__main__": main()
print文のところにブレイクポイントを追加します。
ウインド上部メニューの「デバッグ」から「デバッグの開始」を選択します。
コマンドパレットが表示されるので「Python File」を選択します。
デバッグ実行が開始され、ブレイクポイントの位置で止まります。
変数の中の値が確認できたり、ステップ実行が可能であることがわかります。
実行し終わると、画面下部のターミナル領域にプログラムの実行結果が表示されました。
7. まとめ
ホストのVSCodeからコンテナ上のPythonでデバッグ実行する環境を作ることができました。また、実際にデバッグ実行をして、ローカルで開発するのと同じ感覚でデバッグができることもわかりました。
これの何がいいかというと、ローカルにPythonをインストールする必要がなくなくなるので、ローカル環境を汚さずに済むということ。
開発環境が不要になったらコンテナを削除すればいいだけなの、とってもお手軽です。
あと、開発環境のコンテナを一つ作って開発メンバに配れば、メンバ全員が全く同じ開発環境で開発可能になります。
長くなりましたが、興味がある方はぜひDockerを使っての開発環境構築お試しあれ。