mako0104
@mako0104

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Dockerで開発環境を構築する際のOSの注意点について

解決したいこと

Dockerの開発環境のOSを本番環境のOSに合わせるにはどうすればよいか?(必要があるか?)
(本番環境のOSはCentOs7)

背景

Dockerで新規開発システムの環境構築をしています。
要件として、
本番環境のOSと同一にしたい。コンテナ内(PHP、Mysql、Nginx)のOSも。
と言われています。

@robozushi10さんの回答を見て追記↓↓
ただし、確定要件ではなく、本番環境のOSと一致せず、コンテナ内のOSもそれぞれ違っていても問題ない合理的説明ができれば、合わせなくても問題無し、というっこともあり得る
追記ここまで

自分で調べた感じでは、以下のようなDockerの理解状況です。

  1. Linuxは互換性がある(パッケージ管理のコマンドが違うくらい・・・?)
  2. コンテナ内のOSはホストOSのカーネルを使用している
  3. ホストOSはDocker for Macでインストールされる仮想マシンの中のLinux

そこで疑問が出てきました。

疑問点

  1. 本番環境がCentOs7なので、それを合わせるには、ホストOSを変更しないといけない?
  2. CentOs7のコンテナ内にMySQLなどをインストールしても、コンテナのOSが利用するカーネルはホストOSを利用しているから意味ない?
  3. VirtualBoxとかのほうが良い?
  4. そもそもOSを同一にする必要はある?

まだ理解が甘いところも多々あるかと思いますが、最後の疑問点について
ご回答またはご指摘いただけると幸いです。
よろしくお願いいたします。

0

3Answer

本番環境がCentOs7なので、それを合わせるには、ホストOSを変更しないといけない?

要件として、ホストのOSと一致させるように言われているようですので、従うのが無難かと思います

CentOs7のコンテナ内にMySQLなどをインストールしても、コンテナのOSが利用するカーネルはホストOSを利用しているから意味ない?

ホストとコンテナでカーネルバージョンが大きく違わなければ、ABI に差が生じ無いので、ホスト側のOSに一致させなくても良いかと思います。

VirtualBoxとかのほうが良い?

小さなアプリですと、virtualbox は過剰かと思います。
用途次第かと。。

そもそもOSを同一にする必要はある?

要件として「同一にする」ことが条件であれば、同一にすべきかと思います。
一方、強制されなければ、コンテナのOSは自由かと思います。

私も認識誤りがあるかも知れないので、識者の回答を待ちたいところです。

1Like

ご質問への回答が漏れていました

1個のコンテナに、PHP、Mysql、Nginx を詰め込むのは docker の思想に反しますね。
また、docker の良さを搾取してしまっています。

1個の OS に PHP、Mysql、Nginx を詰め込むのでしたら、 virtualbox + vagrant での運用が良いかと思います。

docker で運用する場合は、例えば、PHP は debian9、MySQL は alpine、Nginx は debian10 といった具合に、サービスごとに OS が異なることがほとんどです。

1Like

Comments

  1. なお、下記の書籍で、「"敢えて" 1つのコンテナに多数のサービスを詰め込んで、virtualbox のようにする」例が載っています。何と、コンテナ内で GUI デスクトップ まで構築しています。

    https://book.impress.co.jp/books/1118101052
  2. @mako0104

    Questioner

    ありがとうございます!!

    > docker で運用する場合は、例えば、PHP は debian9、MySQL は alpine、Nginx は debian10 といった具合に、サービスごとに OS が異なることがほとんどです。

    そうなんですね!

    条件として、記載が抜けていましたが、

    ・本番環境はXserver(レンタル)
    ・OSはCentOS7
    ・Dockerはインストール不可

    のため、PHPのソースをアップロードする形になると想定しています。

    Dockerでの運用ではなく、開発時だけDockerを使う感じになります。

    その場合、コンテナの構成としては
    PHP: CentOS7
    MySQL: alpine
    Nginx: debian10
    という感じで作っておいても特に問題は生じないのでしょうか?

開発環境は下記で動くと思います。
PHP: CentOS7
MySQL: alpine
Nginx: debian10

懸念しているのは、本番環境で動くかどうかです。

上記のようにコンテナOSが異なると、各サービス(PHP、MySQL、Nginx)の設定ファイルの配置が、本番環境と違ってくる確率が高いです。ディストリビューションによって、少しずつファイル構成が異なることが多いです。

その影響で、「開発環境で動いたのに、本番だと動かない」となり、余計なデバッグが発生する恐れがあります

記載されたように、本番環境が(dockerを使用しない)CentOS 7 でしたら、開発環境の docker も、1つの CentOS イメージにPHP、MySQL、Nginx をインストールされると良いかと思います

作成方法としては、CentOS 7 の docker イメージを利用して、Dockerfile に PHP、MySQL、Nginx のインストール処理を書いて、dockerイメージビルドをすると、完成するはずです。(適宜、永続ボリュームは設定してくださいませ)

0Like

Comments

  1. なお、「素早く開発環境を作りたい」という要望がないのであれば、実績をお持ちの virtualbox の方が、本番環境に近くて良い気もします

    docker は簡単に構築できる、という内容を目にしますが、慣れるまでは、それなりに学習コストを要しますので。

Your answer might help someone💌