LoginSignup
4
3

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-09-18

はじめに

rootを使わないようにしたpythonのdocker環境の作成方法。
それ以外にも、何かとwarningが頻発するため、出ないようになっている(ハズ)。

環境

  • windows10 pro
  • wsl2(20.04.5 LTS (Focal Fossa))
  • Dockerのバージョン
    • Docker version 20.10.18, build b40c2f6
    • docker-compose version 1.29.2, build 5becea4c
      ※Docker Desktop ではありません

フォルダ構成

[projectfolder]
 ├─ docker-compose.yml
 ├─ Dockerfile
 └─ requirements.txt

各ファイル

Dockerfile
FROM python:3.10.7

# パッケージ更新
RUN apt-get update

# 設定情報(UID,GIDについてはidコマンドでdockerの実行ユーザーと合わせた方がよい)
ARG USERNAME=pyuser
ARG GROUPNAME=pyuser
ARG UID=1000
ARG GID=1000
ARG WORKDIR=/usr/src/app

# タイムゾーン設定
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

# パッケージ更新
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
docker-compose.yml
version: '3'
services:
  app:
    build:
      context: .
    volumes:
        - ./:/usr/src/app
    restart: always
    tty: true

調整ポイント

  • /usr/src/app はよきところに(ymlとDockerfileは合わせた方がよい)
  • UID,GID はホストにあわせて(Ubuntuのwslはデフォルト一般ユーザーは1000のはず)
  • vimとかそういうaptのインストール設定はお好みで
  • .env使ってcomposeからパラメータで渡した方が管理はしやすいはず

起動

docker-compose up -d --build

最後に

デフォルトでユーザーがないimageにはビルド時に追加しないとダメみたいですね、、
他にもやり方あるのかは不明です。

4
3
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
4
3