質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

docker-compose

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

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Docker

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

Q&A

解決済

2回答

542閲覧

DockerFileにはパッケージインストールからWebサーバー起動まで全てを書くべきなのでしょうか

tanana_m

総合スコア28

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

docker-compose

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

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Docker

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

0グッド

0クリップ

投稿2020/06/09 12:33

編集2020/06/10 04:52

知りたいこと

DockerFile記述内容のベストプラクティスについて質問です。

CentOSベースのコンテナで自作Webアプリを動かしたいと思っています。
言語はPythonでフレームワークはDjangoを使用しており、ソースはGitHub上にあります。

DockerHub上のCentOSイメージでアプリ実行するまでには以下の手順を踏む必要があります。

  1. 開発ツールをyumコマンドを使用してインストール("Development Tools", git, httpd, mysql …)
  2. GitHubのリポジトリよりソースを取得
  3. wsgi用設定ファイルを /etc/httpd/conf.d/ 配下に作成
  4. Python仮想環境を作成・有効化(python3 -m venv コマンドで作成)
  5. 必要なモジュールをpipを使用してインストール(Django, mod-wsgi…)
  6. Apacheを起動(systemctl start httpd.service)

上記の手順について全てをDockerFileに記述すべきなのでしょうか。
それともGitHubのリポジトリに初期セットアップスクリプトのようなものを用意し、
pipのパッケージインストールあたりからはコンテナを実行した後、docker execコマンドを利用して実行すべきなのでしょうか。

参考にしている書籍(現場で使えるDjangoの教科書)では上記手順で言うところのpipあたりからは初期セットアップスクリプトで行っていたのですが、
何故それをDockerFileに書かかずあえて別にスクリプトを用意しているのかがわかりません。

どこまでの内容をDokerFileに書くべきか教えていただきたいです。
宜しくお願い致します。

補足情報(FW/ツールのバージョンなど)

CentOS 8
Python 3.6
Django 2.2
Apache
WSGI
RDS(MySQL 8)

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

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

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

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

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

gentaro

2020/06/09 13:29

その書籍読んでないので回答はできませんが、普通は一度ビルドしたら、その後docker runしてすぐに使えるのがコンテナのメリットです。
guest

回答2

0

ベストアンサー

どこまでをDockerイメージとして(Dockerfileといて)実装するか,
どこからをDockerコンテナとして(初期セットアップスクリプトとして)実装するか,
という設計指針に関する質問であると理解しました.

Dockerアプリを実装する上では上記の使い分けは主に以下に影響します.

  • Dockerイメージサイズ (Dockerfileで実装するほど重いDockerイメージになる)
  • 起動時間 (セットアップスクリプトで実装するほどコンテナ起動に時間が掛かる)
  • 再利用性 (Dockerfileで実装するほど利用用途が限られたDockerイメージになる)
  • 安定性 (セットアップスクリプトで実装するほど実行時のエラーが起こりやすい)
  • Dockerイメージビルドの手間 (Dockerfileで実装すると変更の度にDockerイメージビルドが必要)

たとえば1.の開発ツールは常に同じものを利用したいのでDockerfileで実装する,
一方で5.pipモジュールは頻繁にアップデートするしモジュールサイズが大きいので起動時に取得する,
といった判断があったのかもしれません.

同じアプリの5.pipモジュールのインストールであっても
本番アプリであれば起動時間を短縮したい・安定性を重視したいといった目的からDockerfileで実装する,といった方針もありますし,
開発用途であればより頻繁にpipモジュールを更新するため毎回Dockerイメージをビルドしたくないので
起動スクリプトで実装する,といった方針もあります.

これ以外にも6.apacheの起動のように,そもそもDockerではsystemdが動作していないので
apacheの起動はDockerコンテナ起動時のスクリプトで対応する必要がある
といった制約もあります.

Dockerアプリの特徴や用途に応じて上記のような影響を考慮して
どこで実装するか検討するとよいと思います.

投稿2020/06/15 19:06

thaim

総合スコア175

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

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

tanana_m

2020/06/19 04:15

とてもよくわかりました。状況に応じて上手く対応していきます。 ありがとうございます。
guest

0

すべてDockerで実施する必要はないと考えています。

OSの設定やコンテナ化していないミドルウェアのインストール、設定及び起動は構成管理ツールが担うなど、システムのデプロイとコンテナのデプロイを分けて考えるべきだと思います。

構成管理ツールであるAnsibleは、コンテナのデプロイもできるので、「全て」はAnsibleの役割ではないかと思います。

投稿2020/06/10 04:39

hasami

総合スコア1277

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問