5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

root権限を使わないpythonのdocker環境を作る

Last updated at Posted at 2022-09-18

はじめに

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 + KO でワークフォルダに移動する
  • エクステンションはホスト側とは別管理なので、追加でインストールしたり、設定したりする(コンテナを再作成するたびに必要なので、ここは少し面倒)
  • 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を使って開発環境と本番環境を統一することをお勧めします。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?