はじめに
rootを使わないようにしたpythonのdocker環境の作成方法。
それ以外にも、何かとwarningが頻発するため、出ないようになっている(ハズ)。
Dev Container の開発方法も簡潔に追記しています。
修正履歴
2025/05/21 新しいバージョンのdockerやpythonでの記述
2025/06/02 VsCode + Dev Container の注意書きを追記&微調整
環境
- windows11 pro
- wsl2(22.04.3 LTS (Jammy Jellyfish))
- Dockerのバージョン
- Docker version 27.5.1, build 9f9e405
- docker-compose version v2.32.4
※Docker Desktop ではありません
フォルダ構成
[projectfolder]
├─ compose.yml
├─ Dockerfile
└─ requirements.txt
各ファイル
Dockerfile
# pythonは 3.13 最新
FROM python:3.13
# パッケージ更新(必要があれば他パッケージ等をインストール)
RUN apt-get update
# 設定情報(UID,GIDについてはidコマンドでdockerの実行ユーザーと合わせた方がよい)
ARG USERNAME=pyuser
ARG GROUPNAME=pyuser
ARG UID=1000
ARG GID=1000
ARG WORKDIR=/app
# 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
# パッケージ更新
RUN python -m pip install --upgrade --user pip
RUN python -m pip install --upgrade --user setuptools
# パッケージインストール
COPY requirements.txt $WORKDIR
RUN python -m pip install --user -r requirements.txt
# パッケージインストール(単一でやりたい場合は)
# RUN python -m pip install --user numpy
# RUN python -m pip install --user requests
compose.yml
services:
app:
build:
context: .
volumes:
- ./:/usr/src/app
restart: always
environment:
- TZ=Asia/Tokyo
tty: true
調整ポイント
- /usr/src/app はよきところに(ymlとDockerfileは合わせた方がよい)
- UID,GID はホストにあわせて(wslのUbuntuにおデフォルト一般ユーザーは1000のはず)
- vimとかそういうaptのインストール設定はお好みで
-
.env
使ってcompose.yml
からパラメータで渡した方が管理はしやすいはず-
.env
に定義したものは、${PARAM_NAME}
でcompose側に指定できる
-
起動
docker compose up -d
VSCode + Dev Container での開発方法
-
Dev Containers
のエクステンションをインストール -
Ctrl + Shift + P
を押して、Dev Containers: Attach to Running Container...
を選ぶ- 起動しているコンテナ名を選ぶ
- コンテナにはいったら、まず
Ctrl + K
→O
でワークフォルダに移動する - エクステンションはホスト側とは別管理なので、追加でインストールしたり、設定したりする(コンテナを再作成するたびに必要なので、ここは少し面倒)
- import で pylance の警告が出ているときは
-
Ctrl + Shift + P
を押して、Python: Select Interpreter
を選ぶ - Dockerfileで記述している
FROM
で指定しているpythonを選ぶ
-
※Ctrl + Shift + P
で機能を選ぶときは補助で候補の文字を入力したほうが良い
※Macは Ctrl + Shift + P
ではなく Cmd + Shift + P
実行ユーザー(UID&GID)
UIDとUIDはcomposeを実行する前にidコマンドで確認(デフォルトのルートレスユーザーは1000が多いはず)
$ id
uid=1000(naozo) gid=1000(naozo) ...,999(docker)
# この場合は 1000:1000 にする
DockerのPythonイメージは、コンテナ内に一般ユーザーを作成してプログラムを実行するのが無難です。特にホストPCのユーザーと権限を合わせておくと、ファイルの扱いで問題が起きにくくなります。
最後に
Pythonは、OS環境の違いで動作が不安定になることがありますので、Dockerを使って開発環境と本番環境を統一することをお勧めします。