PythonでDevcontainerを使用してコンテナ内で開発する環境を構築してみます。
事前準備
Devcontainerを使用するには、以下のソフトウェアがインストールされている必要があります。
フォルダの構成
開発プロジェクトフォルダに.devcontainerフォルダを作成し、その中に以下のファイルを配置します。
project-folder/
├── .devcontainer/
│ ├── Dockerfile
│ ├── compose.yml
│ └── devcontainer.json
├── src/
│ └── main.py
└── requirements.txt
Dockerfileの作成
.devcontainer/Dockerfileに以下の内容を記述します。
# ベースイメージの指定
FROM python:3.13-slim
WORKDIR /workspace
# 必要なシステムパッケージのインストール
# イメージサイズを小さくするため、パッケージインストール後にキャッシュを削除
RUN apt-get update && \
apt-get install -y --no-install-recommends \
git \
curl \
wget \
ca-certificates \
build-essential && \
rm -rf /var/lib/apt/lists/*
# requirements.txtに必要なパッケージを記載する
# インストールするバージョンを固定したい場合はrequirements.txtにバージョンも記載する
COPY requirements.txt /workspace/
RUN pip install --upgrade pip && \
pip install --no-cache-dir -r /workspace/requirements.txt
COPY . /workspace/
compose.ymlの作成
.devcontainer/compose.ymlに以下の内容を記述します。
services:
app:
build:
context: .. # compose.ymlが存在する.devcontainerの一つ上の階層を指定
dockerfile: .devcontainer/Dockerfile # contextがdevcontainerの一つ上のプロジェクトフォルダなので、Dockerfileのパスは.devcontainer/Dockerfileとなる
volumes:
- ../:/workspace # プロジェクトフォルダをコンテナの/workspaceにマウント
tty: true
devcontainer.jsonの作成
.devcontainer/devcontainer.jsonに以下の内容を記述します。
extensionsに記載する拡張機能名の取得はこちらを参照してください。
{
// 設定を一意に識別する名称としてプロジェクトフォルダ名を使用
"name": "${localWorkspaceFolderBasename}",
// コンテナを作成するためのcompose.ymlのファイル名を指定
"dockerComposeFile": ["compose.yml"],
// compose.ymlで定義したサービス名を指定
"service": "app",
// 現在ローカルで開いているワークスペースをコンテナ内のどのフォルダーにマウントするか指定
"workspaceFolder": "/workspace",
// フォルダーのマウント方法を指定
"mounts": ["source=${localWorkspaceFolder},target=/workspace,type=bind,consistency=cached"],
// コンテナ内にインストールするVsCodeの拡張機能
// すべてのコンテナで共通で使用したい拡張機能はsettings.jsonの"dev.containers.defaultExtensions"に記載する
"extensions": [
"ms-python.python", // Python拡張機能
"ms-python.vscode-pylance", // Pylance
"njpwerner.autodocstring", // Autodocstring
"charliermarsh.ruff" // Ruff
]
}
Devcontainerの起動
VsCode左下の緑色のリモートアイコンをクリックし、‘Reopen in Container’(コンテナーで再度開く)を選択すると
Devcontainerが起動します。
Devcontainer起動後、コンテナ内で開発を行うことができます。