最近使っているPython環境用Dockerfileのベースめも

# ベースのDockerfile
sshやgit関係の処理も実際は入れているが、今回は省略。

``` Dockerfile
FROM debian:bookworm-slim
LABEL maintainer="tzn <hoge@example.com>"


RUN apt-get update && \
        apt-get install -y --no-install-recommends \
        git \
        sudo \
        libatomic1 \
        build-essential \
        curl \
        ca-certificates \
        file \
        locales \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /home/

RUN locale-gen ja-JP.UTF-8
RUN localedef -f UTF-8 -i ja_JP ja_JP


# Install required and some extra tools
RUN apt-get update &&\
    apt-get upgrade -y &&\
    apt-get install -y --no-install-recommends python3 python3-pip python3-dev python3-setuptools python3-venv procps build-essential g++ libxml2-dev nginx &&\
    apt-get install -y --no-install-recommends wget bash curl git ca-certificates gnupg make sudo vim aptitude zip openssh-client default-jre less &&\
    apt-get install -y --no-install-recommends nodejs npm &&\
    apt-get install -y --no-install-recommends libpango1.0-0 fonts-ipafont fonts-noto-cjk



#pythonライブラリー  set -x 実行したコマンドそのものを標準エラー出力にだす
# pythonライブラリは起動後に初期処理で別でインストールする事にしました。

# Default exposed port if none is specified
EXPOSE 9090

CMD  ["/start.sh"]

# docker-composeでビルドする仕様です。
```

# 文章作成機能を強化したDockerfile
文章書くことが増えているので、文章作成機能強化版のDockerfile。
けっこう無駄なライブラリが多いですが、、、、流用なので。。。。

```Dockerfile
FROM debian:bookworm-slim
LABEL maintainer="tzn <hoge@example.com>"


RUN apt update && \
        apt install -y --no-install-recommends \
        git \
        sudo \
        libatomic1 \
        build-essential \
        curl \
        ca-certificates \
        file \
        locales \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /home/

ADD  init_python.sh  /home/
RUN locale-gen ja-JP.UTF-8
RUN localedef -f UTF-8 -i ja_JP ja_JP


# Install required and some extra tools
RUN apt update &&\
    apt upgrade -y &&\
    apt install -y --no-install-recommends python3 python3-pip python3-dev python3-setuptools python3-venv procps build-essential g++ libxml2-dev nginx &&\
    apt install -y --no-install-recommends wget bash curl git ca-certificates gnupg make sudo vim aptitude zip openssh-client default-jre less &&\
    apt install -y --no-install-recommends nodejs npm &&\
    apt install -y --no-install-recommends libpango1.0-0 fonts-ipafont fonts-noto-cjk


 
# npmのインストール関係 カレントディレクトリインストール
RUN \
    cd /root/ &&\
    npm install --save-dev textlint &&\
    npm install --save-dev textlint-rule-preset-ja-technical-writing &&\
    npm install --save-dev textlint-rule-preset-jtf-style &&\
    npm install --save-dev textlint-rule-no-doubled-joshi &&\
    npm install --save-dev textlint-rule-aws-service-name &&\
    npm install --save-dev textlint-rule-ja-unnatural-alphabet &&\
    npm install --save-dev textlint-rule-ja-no-redundant-expression &&\
    npm install --save-dev textlint-rule-spellcheck-tech-word &&\
    npx textlint --init

# textlint-rule-preset-ja-technical-writing 技術文書を書くためのルールのプリセット（「1文の長さは100文字以下とする」や「ら抜き言葉」など）
# textlint-rule-preset-jtf-style JTF日本語標準スタイルガイド（翻訳用）に準拠しているプリセット
# textlint-rule-no-doubled-joshi 1つの文中に同じ助詞が連続して出てくるかの確認してくれるルール
# textlint-rule-aws-service-name AWSのサービス名を確認してくれるルール
# textlint-rule-ja-unnatural-alphabet 不自然なアルファベットを検知してくれるルール
# textlint-rule-ja-no-redundant-expression 冗長な表現を禁止するルール
# textlint-rule-spellcheck-tech-word 技術用語がまとまった用語集を元に表記揺れを指摘してくれます。
# textlint-rule-spacing 半角文字と全角文字の間にスペースを入ているかチェック　#これは使ってない




# drawioのインストール
ENV DRAWIO_VERSION 14.6.13

RUN apt-get install -y wget libgtk-3-0 libnotify4 libnss3 libxss1 libxtst6 xdg-utils libatspi2.0-0 libappindicator3-1 libsecret-1-0 libgbm-dev libasound2 xvfb
RUN wget https://github.com/jgraph/drawio-desktop/releases/download/v${DRAWIO_VERSION}/drawio-amd64-${DRAWIO_VERSION}.deb
RUN dpkg --install drawio-amd64-${DRAWIO_VERSION}.deb
RUN rm drawio-amd64-${DRAWIO_VERSION}.deb

# https://github.com/jgraph/drawio-desktop/issues/127 これでいけた
RUN apt-get install -y xvfb
RUN echo "#!/bin/sh\nxvfb-run /usr/bin/drawio \"\${@}\"" > /usr/local/bin/drawio && \
    chmod +x /usr/local/bin/drawio

# pythonライブラリは起動後に初期処理で別でインストールする事にしました。

# Default exposed port if none is specified
EXPOSE 9090


# 基本はdocker-composeでビルドします。

# そのままbuildする場合は以下
# docker build ./ -t doc_test
# docker run --name hoge_doc -p 20100:20100 -itd doc_test


```

## 参考にさせていただいたサイト
https://qiita.com/takasp/items/22f7f72b691fda30aea2

https://fereria.github.io/reincarnation_tech_bk/en/10_Programming/99_Documentation/05_mkdocs_drawio/

## MKDocsを使いますので詳細はこちら

https://qiita.com/zen7sky/items/e0cc522d753b0d61ab11


# pythonライブラリのインストール回り
最近パッケージ増やすことが増えたので、コンテナ作成処理とは別にしました。
```init_python.sh
#!/bin/bash

cd ~/workspace/ #基本はここがワークスペースのはず

python3 -m venv --system-site-packages --clear --prompt 'py-venv' --upgrade-deps $(pwd)/.venv
source .venv/bin/activate


pip3 install --upgrade pip
pip3 install ruamel.yaml
pip3 install beautifulsoup4
pip3 install boto3
pip3 install bottle
pip3 install uWSGI
pip3 install qrcode
pip3 install pillow
pip3 install janome
pip3 install requests
pip3 install PyMySQL
pip3 install Pillow
pip3 install pyheif
pip3 install yt-dlp
pip3 install ffmpeg-python
pip3 install ffmpeg-normalize
pip3 install pillow-avif-plugin
pip3 install piexif
pip3 install isort
# pip3 install flake8 # VSCode側の拡張を使うようにしました。Black Formatter
# pip3 install mypy # VSCode側の拡張を使うようにしました。Pylance
# pip3 install black # VSCode側の拡張を使うようにしました。Black Formatter
pip3 install waitress
pip3 install scrapy
pip3 install wikiextractor
pip3 install mecab-python3
pip3 install mkdocs  # Markdownの変換ライブラリ
pip3 install mkdocs-material
pip3 install mkdocs-git-revision-date-plugin # MDKDocsでファイル更新日を表示
pip3 install mkdocs-live-edit-plugin # ライブ更新プラグイン　少し書き換えないとDockerでは使えない
pip3 install weasyprint #macdocsをPDFにするのに必要、別でsudo apt-get insatll pangoも必要
pip3 install mkdocs-with-pdf #macdocsをPDFにする本体
pip3 install mkdocs-drawio-exporter # drawioを直接表示 別途drawio本体のインストールも必要

pip install aiohttp # HTTPサーバ
pip install hupper # ホットリロード機能
pip install questionary # CLIの対話型入力

USERNAME=$(whoami)
echo "USERNAME=$(whoami)" >> /home/${USERNAME}/.bashrc
echo 'export PYTHONPATH=/home/$USERNAME/workspace/Python:$PYTHONPATH' >> /home/${USERNAME}/.bashrc

source ~/.bashrc #即時反映


# pip freeze # インストール確認

```

# docker-compose.yml周り
```docker-compose.yml
version: '3.5'

services:
  webapp:
    tty: true #tty,stdin_open双方trueで管理ツールからのアタッチができる
    stdin_open: true
    command: /bin/bash #DockerfileのCMDを無効化、マウント処理とかCMDでしてたら動かなくなる。
    build:
      context: ~/bulidfile #Dockerファイルの保存場所
      dockerfile: Dockerfile
    restart: "no"
    environment:
       - TZ=Asia/Tokyo
       - LANG=ja_JP.UTF-8
       - LC_ALL=ja_JP.UTF-8
    ports:
      - '9020:22' #ポートしては適当、左がホスト、右がDocker内
    volumes:
      - '/share/hoge:/hoge' #マウントは適当、左がホスト、右がDocker内

# docker-compose -p hoge_project up
```