アプリを開発・運用するDockerコンテナを作っていきます。
私はVS CodeのDev-Containerを利用していますが、ただのDocker環境でも問題ないと思います。
devcontainer環境は次の記事を参考にしてください
逆に、Docker環境じゃない場合は、複数のサービスを立ち上げて、維持する必要があるので面倒だと思います。Dockerを入れてください。
また、開発をしながら修正・更新していくので、Dockerfileやdocker-compose.ymlは記事の更新に合わせて見直してください。
ディレクトリ構成
環境構築時のディレクトリ構成は次のとおりです。
novel_management_service
├── .devcontainer
│ ├── Dockerfile
│ ├── devcontainer.json
│ ├── docker-compose.yml
│ └── requirements.txt
...
.devcontainer
以下のファイルを作成して、コンテナをビルドしてください
Dockerfile
ベースはnvcr.io/nvidia/pytorch:22.04-py3にしました。これは競馬の予測をしたときと同じです。
pytorchを使って機械学習で分析をするかどうかは、まだ確定ではありませんが、できるようにしておきます。
また、FlaskのENVを設定しておきます
FROM nvcr.io/nvidia/pytorch:22.04-py3
ARG USERNAME=vscode
ARG USER_UID=1000
ARG USER_GID=$USER_UID
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm
RUN apt-get update \
&& groupadd --gid $USER_GID $USERNAME \
&& useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME \
&& apt-get install -y sudo \
&& echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
&& chmod 0440 /etc/sudoers.d/$USERNAME \
&& apt-get -y install locales \
&& localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
RUN apt-get -y install git
RUN pip install --upgrade pip
RUN pip install --upgrade setuptools
COPY ./requirements.txt .
RUN pip install -r requirements.txt
ENV FLASK_APP=flask_app.py
ENV FLASK_ENV=develop
ENV FLASK_DEBUG=1
devcontainer.json
名前とサービス名を設定してください。私は、面倒なので同じものを設定しています。拡張機能好きなものを入れてください。
{
"name": "novel_management_service",
"service": "novel_management_service",
"dockerComposeFile": "docker-compose.yml",
"remoteUser": "vscode",
"workspaceFolder": "/work",
"customizations": {
"vscode": {
"extensions": [
"ms-python.python",
"ms-toolsai.jupyter"
]
}
}
}
docker-compose.yml
サービス名を先ほど設定したものと同一にしてください。
とりあえず、Seleniumを使うのでサービスにchome(seleniarm/standalone-chromium)を追加しておきます。
services:
novel_management_service:
container_name: 'novel_management_service-container'
hostname: 'novel_management_service-container'
build: .
restart: always
working_dir: '/work'
tty: true
volumes:
- type: bind
source: ..
target: /work
ports:
- 8888:8888
chrome:
image: seleniarm/standalone-chromium
shm_size: 2gb
ports:
- "4444:4444"
- "7900:7900"
requirements.txt
ここには、pythonで使う追加モジュールを書いておきます。また、プログラムを書きながら、必要に応じて追記していきます。
requests
numpy
pandas
matplotlib
bs4
scikit-learn
optuna
lightgbm
tqdm
timeout-decorator
requests-html
seaborn
pyarrow
selenium
schedule
flask
flask-sqlalchemy
Seleniumの確認
3つのファイルを作成したら、dev-containerで開いてください。
selenium-hubが起動できていることを
http://{ip address}:4444/ui/
等から確認してください。リモート環境の場合はリモートのip addressを、ローカル環境ならlocalhostで入れます。
これで環境構築はOKです。