質問するログイン新規登録
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

意見交換

7回答

422閲覧

pythonのdockerの環境について

todasan

総合スコア96

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2025/10/21 08:54

0

0

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」としてデータを永続的に保持することができる。ホストとはマウントしていない。

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答7

#1

maisumakun

総合スコア146842

投稿2025/10/22 08:53

確認の質問ですが、

  • 当該の手順は、どこから引いてきたものですか?
  • この質問の前に行った調査はどのような感じですか?

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#2

todasan

総合スコア96

投稿2025/10/22 09:33

maisumakun さん
当該の手順は、pythonを使用した時に、使った事のある手順です。
全般的にdockerfileとdocker-compose.ymlの関係が分からない
ために聞いてみました。
調査としては、以下などはchatgptで調べたら、buildフォルダのdockerfileを使う事
が書かれていたので、分かりそうではあります。
web:
build: ./web
dockerfileとdocker-compose.ymlの使い方の本についても、chatgptにより
そのような本はありました。他の方もここらへんをどのような本やサイトで、
勉強しているのかは、知りたいです。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#3

maisumakun

総合スコア146842

投稿2025/10/22 12:41

編集2025/10/22 12:42

当該の手順は、pythonを使用した時に、使った事のある手順です。

ファイルの内容はどのような資料を参考にして作成されました?(あるいは何処かから拾ってきたものでしょうか)

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#4

todasan

総合スコア96

投稿2025/10/23 00:26

maisumakun さん
過去に作成していたものから、メモ書きにして、作成しました。
フォルダの構成などは、flaskとpythonで検索すれば、このような構成に
なっています。requirements.txtを実行などは、昔からよく使っていました。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#5

maisumakun

総合スコア146842

投稿2025/10/23 01:22

編集2025/10/23 01:23

あと、気になったこととして

以上のDockerfileはdocker-compose upなどに、関係しているのですか。

pythonでgunicornを使うのは一般的なのかとか、"init:app"は何を意味していますか。

DockerとPython自体の質問が混ざっているように、一気に多数の疑問点をまとめて投げてしまっているので答えづらいものになっている気がします。

密接に関連したものならもちろん一括して進めたほうがいいのですが、そうでない場合は質問する対象を1つに限定して小分けにしたほうが、収拾がつきやすいと考えます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#6

todasan

総合スコア96

投稿2025/10/23 02:23

maisumakun さん
了解しました。聞くときには、一つにまとめます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#7

hqf00342

総合スコア401

投稿2025/10/27 02:33

dockerfileについて

以上のDockerfileはdocker-compose upなどに、関係しているのですか。
以上のコマンドでは、site_sample_html-appのDockerfileだけが、関係していると思うのですが。

./docker-compose.ymlには以下のように書かれてます。

yml

1services: 2 app: 3 build: ./app 4 postgres: 5 image: postgres:latest 6 web: 7 build: ./web 8 scheduler: 9 build: ./scheduler
  • app コンテナは./app/dockerfileをビルドして作成。
  • postgres コンテナは配布されている postgres:latest イメージを利用して作成。
  • web コンテナは ./web/dockerfileをビルドして作成。
  • scheduler コンテナは ./scheduler/dockerfileをビルドして作成。

compose.ymlでこれらをビルドするように記載されているのでdocker compose upをした際に、これらのコンテナが存在していなければ自動的にビルドします。

python gunicorn

CMD ["gunicorn", "init:app", "-c", "conf/gunicorn_config.py", "--reload"]
pythonでgunicornを使うのは一般的なのかとか、"init:app"は何を意味していますか。

init:appの意味はinit.pyファイルに定義されたappオブジェクトです。現代のPythonではWSGIでWebサービスを動かすのは普通と思います。

dockderfileとcompose.ymlの違い

例えば、docker-compose.ymlの以下の部分について、docker-compose build、
docker-compose upなどを行うと環境のフォルダに対して何をしているかが、

docker compose build はcompose.yml内のコンテナ群をビルド、
docker compose up はビルド+起動、
です。

ビルドとはdockerfileからコンテナを作ることです。
このケースではapp, web, scheduler3つのコンテナがビルドされます。
このタイミングでファイルをコンテナの中にコピーしたりしています。
例えばappコンテナの定義 app/dockerfileにはADD . /app/の記述があり、これによってappコンテナの中に、appディレクトリを丸ごとコピーしています。

これらのコンテナを1つずつ手動でビルド、起動し連携させれば動作しますが面倒なので、docker-composeでその手順を自動化します。compose.ymlファイルはそれぞれのコンテナをどうビルドして組み合わせるのか、どう起動するのかを記述してあります。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

この意見交換はまだ受付中です。

会員登録して回答してみよう

アカウントをお持ちの方は

関連した質問