pythonのdockerの環境を以下のような部分で、作成しています。
画像のようにdocker-compose build、docker-compose upを
実行すると、chromなどのブラウザからlocalhostと入力して、
アプリが起動します。そこまでdockerに関しては詳しくないのですが、
例えば環境のフォルダの
└── web
├── Dockerfile
├── scheduler
│ ├── 50-default.conf
│ ├── Dockerfile
以上のDockerfileはdocker-compose upなどに、関係しているのですか。
以上のコマンドでは、site_sample_html-appのDockerfileだけが、関係していると思うのですが。
例えば、site_sample_html-appのDockerfileの以下のコマンドです。
CMD ["gunicorn", "init:app", "-c", "conf/gunicorn_config.py", "--reload"]
pythonでgunicornを使うのは一般的なのかとか、"init:app"は何を意味していますか。
例えば、docker-compose.ymlの以下の部分について、docker-compose build、
docker-compose upなどを行うと環境のフォルダに対して何をしているかが、
分かりますか。これらの知識が分かるような本、ネットのサイトなどがあったら、
お聞きしてもよろしいですか。
↓・docker-compose.ymlの以下の部分
scheduler:
build: ./scheduler
networks:
- test_network
environment:
TZ: Asia/Tokyo
tty: true
privileged: true
web:
build: ./web
networks:
- test_network
ports:
- 80:80
volumes:
- type: bind
source: "C:/Users/pcuser/program_code_py/site_sample_html/app/apache_output" #
・環境のフォルダ構成
├site_sample_html
├── app : Python3のイメージを基に作成されたDockerコンテナ用のディレクトリ。
│ ├── Dockerfile : Dockerでの設定
│ ├── requirements.txt : pipインストールされるPythonの外部モジュール
│ └── src
│ ├── init.py : Flaskアプリケーションのルートファイル
│ ├── pycache : Pythonを実行した際に生成されるバイナリファイル(特に考慮する必要はない)
│ │ └── *.pyc
│ ├── api.py : オフラインバッチを実行するREST API用のファイル ※追加説明
│ ├── batch : バッチ処理一つにつき1ファイルのPythonスクリプトが入るディレクトリ ※ 追加説明
│ │ ├── pycache : 説明省略
│ │ │ └── *.pyc
│ │ └── jt012.py
│ ├── conf : gunicornの設定ファイルが配置されるディレクトリ
│ │ ├── pycache : 説明省略
│ │ │ └── gunicorn_config.cpython-39.pyc
│ │ └── gunicorn_config.py
│ ├── download : FTPサーバーや外部から取得され、永続的に保存するファイルを配置するディレクトリ
│ │ ├── *.txt
│ │ ├── *.csv
│ │ ├── *.xlsx
│ │ └── *.pdf
│ ├── json : プログラム内で使用するデータ
│ │ ├── testInformation.json
│ ├── logs : Pythonのloogerを使用したロギングにより出力されるログファイルを配置するディレクトリ
│ ├── jt001.py : ログイン画面処理ファイル
│ ├── static : フロントエンドで共通して使用されるスタイルシート・ライブラリ
│ │ ├── css
│ │ │ └── style.css
│ │ └── js
│ │ ├── main.js
│ ├── templates : ID事の画面処理ファイルに紐づけられたテンプレートHTMLファイル
│ │ ├── layout.html : 画面共通で使用されるテンプレートHTMLファイル
│ │ ├── csv : CSV出力ファイル用テンプレートディレクトリ
│ │ │ └── 24_JT003.html
│ │ ├── jt001 : 画面処理ID「sc001」用のテンプレートディレクトリ
│ │ │ └── login.html
│ ├── upload : バッチ処理で生成されたファイルなど永続的に保存する必要があるファイルを配置するディレクトリ
├── docker-compose.yml
├── scheduler
│ ├── 50-default.conf
│ ├── Dockerfile
│ ├── cron
│ ├── cron.d
│ │ └── crontest
│ └── tmp
│ └── memo.md
└── web
├── Dockerfile
└── httpd
└── custom.conf
・requirements.txt
gunicorn Flask flask-login pytest pandas psycopg2 datetime wkhtmltopdf pdfkit imgkit openpyxl
app-Dockerfile
FROM python:3.9-buster # PDFを作成するライブラリに必要 RUN apt-get update && apt-get install -y wkhtmltopdf && apt-get clean; RUN wget https://moji.or.jp/wp-content/ipafont/IPAexfont/IPAexfont00401.zip \ && unzip IPAexfont00401.zip \ && mv IPAexfont00401 /usr/share/fonts \ && fc-cache -f RUN mkdir /tmp/runtime-USERNAME ENV XDG_RUNTIME_DIR "/tmp/runtime-USERNAME" RUN chmod 700 /tmp/runtime-USERNAME RUN mkdir /app ADD requirements.txt /app WORKDIR /app RUN pip install --upgrade pip RUN pip install -r requirements.txt ADD . /app/ WORKDIR /app/src CMD ["gunicorn", "__init__:app", "-c", "conf/gunicorn_config.py", "--reload"]
・site_sample_html -- docker-compose.yml
version: '1' services: app: build: ./app networks: - test_network volumes: - type: bind source: "C:/Users/pcuser/program_code_py/site_sample_html/app/src" # Flaskディレクトリの設定。開発時にはローカルPC上の test_jinji/app/src/ ディレクトリを指定 target: "/app/src/" - type: bind source: "C:/Users/pcuser/program_code_py/site_sample_html/app/flask_test_jisshi" # ログファイル出力ディレクトリの設定。開発時にはローカルPC上の任意のディレクトリを指定 target: "/app/src/logs" environment: DATABASE_URL: "postgresql://postgres:alkreWERTY35@postgres:5432/jinji_login" # 接続情報を環境変数として渡す depends_on: - postgres postgres: image: postgres:latest networks: - test_network environment: POSTGRES_USER : postgres POSTGRES_PASSWORD: alkreWERTY35 POSTGRES_DB: shisaku_login ports: - "5432:5432" web: build: ./web networks: - test_network ports: - 80:80 volumes: - type: bind source: "C:/Users/pcuser/program_code_py/site_sample_html/app/apache_output" # Apacheログ出力先ディレクトリの設定。開発時にはローカルPC上の任意のディレクトリを指定 target: "/var/log/apache2" environment: TZ: Asia/Tokyo extra_hosts: - "host.docker.internal:host-gateway" scheduler: build: ./scheduler networks: - test_network environment: TZ: Asia/Tokyo tty: true privileged: true # # PostgreSQL接続確認用コンテナ # db: # container_name: sample-db # image: postgres:14 # networks: # - test_network # ports: # - 5432:5432 # volumes: # - db-store:/var/lib/postgresql/data # environment: # - POSTGRES_PASSWORD=passw0rd # # FTPサーバー接続確認用コンテナ # ftpd_server: # image: stilliard/pure-ftpd # container_name: pure-ftpd # networks: # - test_network # ports: # - "21:21" # - "30000-30009:30000-30009" # volumes: # - type: bind # source: "/Users/kaihatu/Develop/tmp/tmpoutput/" # target: "/home/testuser" # environment: # PUBLICHOST: "localhost" # FTP_USER_NAME: testuser # FTP_USER_PASS: test123 # FTP_USER_HOME: /home/testuser # restart: always networks: test_network: # volumes: # db-store: # volume名「db-store」としてデータを永続的に保持することができる。ホストとはマウントしていない。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。