Python

【Python×VScode×Docker】環境構築の方法

PythonのプログラムをDockerとVScodeを使って開発したい人への手順書。
この記事の一番下で元のファイルを配布しているので、ダウンロード&解凍すればそのままコンテナの立ち上げに使用できます。

1.必要なソフト&VScode拡張機能をインストール

必要なソフト&インストール先

インストールするVScodeの拡張機能

  • Better Comments
    (Docker内でも同じ拡張機能を使用したい場合のみインストール)
  • Docker
  • Japanese Language Pack for Visual Studio Code
  • Remote – Containers

2.コンテナの作成

①今回作成する環境

  • VScode内でのDockerのPythonプログラムの開発環境
  • タイムゾーンは日本時間
  • 「requirements.txt」でモジュールインストール可能
  • 「.env」ファイルの読み込みも可能

②ディレクトリの用意

Pythonプログラムを格納するディレクトリを作成する。
名前は何でも良い。
今回は「SamplePython」にした。

SamplePythonのディレクトリ内に
「.devcontainer」という名前のディレクトリを作成する。
※ディレクトリ名の変更不可

フォルダ構成
SamplePython
└─.devcontainer

③VScode上で作成したディレクトリを開く

画像の通りの順番で画面をクリック操作していき、
②で作成した「SamplePython」を開く。

もし下記のような警告文が出た場合ははいをクリックする。

④必要なファイルを作成する

今回作成するファイルは以下の4つ

  • devcontainer.json
  • docker-compose.yml
  • Dockerfile
  • requirements.txt

すべて「.devcontainer」内に作成する。

新しいファイルの作り方は下記画像の通り。

フォルダ構成
SamplePython
└─.devcontainer
   |─devcontainer.json
   |─docker-compose.yml
   |─Dockerfile
    └─requirements.txt

新しいファイルを「.devcontainer」ディレクトリ内に作成する手順は下記画像の通り。

devcontainer.json

devcontainer.jsonには下記の内容を入力

コメントアウトの文字が多いのは過去にVScodeで自動作成されたdevcontainer.jsonのファイルの内容をそのまま使用しているから。

コメントアウトされている内容を理解しつつ設定を追加していってOK。

// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.234.0/containers/docker-existing-docker-compose
// If you want to run as a non-root user in the container, see .devcontainer/docker-compose.yml.
{
	//"name": "SamplePython",//コンテナ表示名(今回はcomposeファイル内で指定しているため不要)

	// Update the 'dockerComposeFile' list if you have more compose files or use different names.
	// The .devcontainer/docker-compose.yml file contains any overrides you need/want to make.
	"dockerComposeFile": [
		"docker-compose.yml"
	],

	// The 'service' property is the name of the service for the container that VS Code should
	// use. Update this value and .devcontainer/docker-compose.yml to the real service name.
	"service": "app", //docker-composeから呼び出すサービス名

	// The optional 'workspaceFolder' property is the path VS Code should open by default when
	// connected. This is typically a file mount in .devcontainer/docker-compose.yml
	"workspaceFolder": "/app", //DockerfileのWORKDIRと同じ

	// Set *default* container specific settings.json values on container create.
	"settings": {},

	// Add the IDs of extensions you want installed when the container is created.
	"extensions": [
		"ms-python.python", //Pythonセット
		"aaron-bond.better-comments", //コメントに色をつけられる
		"kevinrose.vsc-python-indent", //Pythonの改行を自動で最適な場所へ
		"ms-ceintl.vscode-language-pack-ja", //日本語化
		"coenraads.bracket-pair-colorizer-2", //かっこ同士の色分け
		"oderwat.indent-rainbow" //段落の色分け
	]

	// Use 'forwardPorts' to make a list of ports inside the container available locally.
	// "forwardPorts": [],

	// Uncomment the next line if you want start specific services in your Docker Compose config.
	// "runServices": [],

	// Uncomment the next line if you want to keep your containers running after VS Code shuts down.
	// "shutdownAction": "none",

	// Uncomment the next line to run commands after the container is created - for example installing curl.
	// "postCreateCommand": "apt-get update && apt-get install -y curl",

	// Uncomment to connect as a non-root user if you've added one. See https://aka.ms/vscode-remote/containers/non-root.
	// "remoteUser": "vscode"
}

「extensions」の部分はVScodeの拡張機能のインストールをしている。
「ms-python.python」はPython使用するのであれば必須。
他は任意で設定する。

	"extensions": [
		"ms-python.python", //Pythonセット
		"aaron-bond.better-comments", //コメントに色をつけられる
		"kevinrose.vsc-python-indent", //Pythonの改行を自動で最適な場所へ
		"ms-ceintl.vscode-language-pack-ja", //日本語化
		"coenraads.bracket-pair-colorizer-2", //かっこ同士の色分け
		"oderwat.indent-rainbow" //段落の色分け
	]

docker-compose.yml

docker-compose.ymlに下記の内容を入力

version: '3.8'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    image: sample:sample # イメージ名&タグ名
    container_name: SamplePython # コンテナ名
    stdin_open: true
    tty: true
    privileged: true
    environment:
      TZ: Asia/Tokyo
    volumes:
      - ../:/app:cached
    # Overrides default command so things don't shut down after the process ends.
    command: /bin/sh -c "while sleep 1000; do :; done"

イメージ名、タグ名、コンテナ名は好きに変更してOK
イメージ名とタグ名は小文字しか使えないので注意!

version: ‘3.8’
記載の部分について。
3.8は2022年7月時点での最新のバージョンです。

最新のバージョンはここから確認してください。

Dockerfile

FROM python:3.9

RUN pip install --upgrade pip

WORKDIR /app

# 必要なライブラリのインストール
COPY . /app
RUN pip install --no-cache-dir -r requirements.txt

requirements.txt

requests
pandas
matplotlib

ここにはインストールしたいモジュールを書けば良い。
今回はてきとうに書いているため自分の作成したプログラムに合ったものを入れてください。
コンテナ起動した後で普通にターミナルで「pip install」でインストールしてもOK。

下記のように「==バージョン」と
バージョンを指定してインストールすることもできる。

requests==2.22.0

⑤コンテナを作成する

下記画像の通りに操作してコンテナを作成する。

今回は最初に「SamplePython」をVScode上で開いていたが、
もし何もディレクトリを開いていない状態でコンテナを作成する際は、
「Open Folder in Container…」を選択し、
「.devcontainer」が入っているディレクトリを選択して開く。

⑥Pythonプログラムを作成する

コンテナの立ち上げができた後はPythonプログラムを作成していくだけです。

3.コンテナの終了、削除

①VScodeを一旦閉じたいとき

ファイル ⇒ リモート接続を閉じる

②コンテナもイメージも削除したいとき

リモート接続を閉じた後
削除したいコンテナ選択 ⇒ Remove… ⇒ Remove
削除したいイメージ選択 ⇒ Remove… ⇒ Remove

イメージを削除したいしたいとき、削除したいイメージを元にビルドしているコンテナがある場合はコンテナを先に削除する。

リモート接続を閉じた後にもう一度コンテナを起動したい場合は
コンテナを選択して「Start」をクリックすればOK

【今回使用したファイルの配布】

今回使用したファイルをzipで配布します。
ダウンロード、解凍してVScodeで開けば直ぐにコンテナを作成できます。

【手順】2.コンテナの作成の⑤コンテナを作成する から始めてください。