仕事で名古屋に行ってきたんですが、なぞにおいしい焼肉と出会って隣のサラリーマンと完敗してきた龍ちゃんです。
今回は、Python環境をDevContainerで作っていなくて苦い思いをしたのでPython用のDevContainer環境を作成していきます。
DevContainer構築 with Python
今回作成した環境では、以下の事項を対応してあります。サクッと5分で作る方法に関しては、「DevContainerでサクッと使える実行環境を用意しよう:Pythonを例に紹介」に上がっています。今回構築する環境は、ベースイメージとしてDocker Hubに上がっているPython Offcial Imageを使用しています。
- 非rootユーザー
- Pythonコンテナバージョンを指定
- 環境変数で情報を管理
ディレクトリ構成
今回の構築を目指す環境は、以下のような構成になっています。将来的に拡張することも考慮してDockerfile
は.devcontainer
内にまとめています。
./
|-- .devcontainer
| |-- Dockerfile
| `-- devcontainer.json
|-- README.md
|-- compose.yml
`-- .env
ファイルの内容について、解説していきます。
Dockerfile
Dockerfile単体でも動くように、変数は初期値を入れています。新規ユーザーと作業ディレクトリを作成しています。
ARG PYTHON_VER=3.13
FROM python:${PYTHON_VER}
# パッケージ更新
RUN apt update
# 環境変数(UID, GIDについてはidコマンドでdockerの実行ユーザーと合わせた方がよい)
ARG USERNAME="vscode"
ARG GROUPNAME="vscode"
ARG UID=1000
ARG GID=1000
ENV WORKDIR=/home/vscode/python
# タイムゾーン設定
ENV TZ=Asia/Tokyo
# import時に指定ディレクトリからにするためラク
ENV PYTHONPATH=$WORKDIR
# ユーザー追加
RUN groupadd -g ${GID} ${GROUPNAME} && \
useradd -m -s /bin/bash -u ${UID} -g ${GID} ${USERNAME}
# フォルダ作成&権限者設定
RUN mkdir -p $WORKDIR
RUN chown -R $UID:$GID $WORKDIR
# ユーザーのbinaryディレクトリをパスに追加
ENV PATH=/home/$USERNAME/.local/bin:$PATH
# ユーザー切り替え
USER $USERNAME
# 作業ディレクトリ設定
WORKDIR $WORKDIR
# Python作業用:パッケージ更新
RUN python -m pip install --upgrade --user pip
RUN python -m pip install --upgrade --user setuptools
# パッケージインストール
COPY ./ $WORKDIR/
# 初回以降であればここから作業開始できる
# RUN python -m pip install --user -r requirements.txt
devcontainer.json
{
"name": "project-python",
"dockerComposeFile": [
"../compose.yml"
],
"workspaceFolder": "/home/vscode/python",
"service": "python",
"features": {
"ghcr.io/christophermacgown/devcontainer-features/direnv:1": {},
"ghcr.io/devcontainers/features/git": {}
},
"customizations": {
"vscode": {
"extensions": [
"ms-azuretools.vscode-docker",
"yzhang.markdown-all-in-one",
"ms-python.python",
"ms-python.black-formatter",
"foxundermoon.shell-format",
"IronGeek.vscode-env"
]
}
},
"remoteUser": "vscode"
}
.env
環境変数の運用は、.gitignore
での管理がベストです。Pythonのバージョンは環境変数で管理しなくてもよいかと思います。作業者間でPythonバージョンレベルの違いが起きると、トラブルの元です。今回は、環境変数で変更できるようにしましたがリポジトリ単位で判断が必要です。
# Docker用環境変数
UID=1000
GID=1000
PYTHON_VER=3.10
# Python用の環境変数
sample.env
でベースの環境変数を用意することで環境の立ち上げが素早くなります。
cp sample.env .env
compose.yml
ここでは、環境変数とDockerfileの積み込みとファイルのマウントを行っています。初期値を与えておくことで.env
ファイルがなくても動作するようにしておきます。リポジトリの運用方針によりますね。
services:
python:
build:
context: .
dockerfile: ./.devcontainer/Dockerfile
args:
PYTHON_VER: ${PYTHON_VER:-latest}
UID: ${UID:-1000}
GID: ${GID:-1000}
tty: true
volumes:
- type: bind
source: .
target: /home/vscode/python
restart: always
おわり
今回は、Python用のDevContainer環境の構築方法について解説しました。非rootユーザーでの実行、環境変数の適切な管理、そして柔軟なディレクトリ構成により、安全で効率的な開発環境を実現できます。この環境を基盤として、快適なPython開発を始めましょう。