はじめに
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にはビルド時に追加しないとダメみたいですね、、
他にもやり方あるのかは不明です。