GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

Dockerでデータベースを実行する必要がありますか?

サーバーワークロードのコンテナ化はますます一般的になり、ウェブサーバーの導入がコンテナで実行されるのを見ることがますます一般的になっています。同じメリットをデータベースに適用できますか?

Dockerはステートフルワークロードを処理できます

別の質問をすることから始めるのが最善です: C Dockerでデータベースを実行することもできますか?一般に、Dockerはステートフルサービス用に設計されていません。コンテナの主なセールスポイントの1つは、コンテナを自由に停止および開始できることです。通常、データベースなどの信頼できるデータソースに接続して、状態を保存します。コンテナ内のすべてのデータは一時的なものであり、コンテナが削除されると破棄されます。

これにより、ステートフルワークロードの実行が特に困難になりますが、幸いなことに、Dockerにはステートを処理するためのツールがいくつかあります。ボリュームとバインドマウントです。これらを使用すると、ホストマシン上の場所をコンテナ内の場所にマウントできます。これにより、コンテナがシャットダウンした場合でもデータが保存されます。このようにして、データが失われることを心配することなく、コンテナを長期間実行できます。

ボリュームマウントは、ほとんどのシナリオを処理するための推奨される方法です。 Dockerによって管理されるボリュームを作成できます:

docker volume create my-volume

次に、そのボリュームをコンテナ内のターゲットの場所にマウントします。

docker run --mount source=my-volume,target=/app

バインドマウントはより簡単です。これらは内部でボリュームが使用するものですが、Dockerを介して管理するのではなく、ホストディスク上の場所を手動で設定できます。

docker run ~/nginxlogs:/var/log/nginx

実際には、これらのマウントの使用は少し複雑になる可能性があります。 AWSのECSやマネージドKubernetesなどの多くのマネージドDockerサービスでは、基盤となるサーバーに直接アクセスできないため、バインドマウント接続を直接確立することはできません。通常、これはECSコンテナへのマウントを可能にするEFSのようなサービス、またはデータベースなどの外部データストアで解決されます。

関連: LinuxにDockerとDockerComposeをインストールする方法

データベースにDockerを選択する必要がありますか?

Dockerは通常、状態の​​処理には適していません。 Dockerベースのワークロードは通常、この問題をデータベースにアウトソーシングします。データベースが問題の解決策であるため、データベースをDockerに配置するのは実用的ですか?

概して、答えは「通常ではない」です。 Dockerは創業以来長い道のりを歩んできました。データベースをコンテナ化することは、ひどい、または「間違った」アイデアではなくなりました。それは確かに行うことができ、それにいくつかの利点があります。ただし、ほとんどの一般的なワークロードでは、メリットが複雑さを上回っていません。

その理由を理解するために、Dockerがテーブルにもたらすメリットを見てみましょう。

  • 簡単なスケーリング:サーバーは、需要を満たすためにすばやく作成および破棄できます
  • より簡単なCI/CDツール:自動ビルドは簡単です
  • インフラストラクチャの体系化:基盤となるすべてのライブラリとセットアップはDockerfileで処理されます

これらのほとんどは、データベースのワークロードに正確に移行しません。データベースのワークロードは、何よりもデータの整合性を優先する長期的な取り組みであることがよくあります。通常、ほとんどのデータベースを自動スケーリングする必要はありません。通常、コードの更新を定期的に受け取ることはないため、コンテナで実行してもそれほどメリットはありません。そして、とにかくローカルストレージドライブをマウントするだけの場合は、Dockerの外部で実行してみませんか?

データベース管理の複雑さから解放されたいのであれば、Dockerはその仕事のツールではありません。標準のVPSで簡単に実行できるワークロードでは、単純に不要な複雑さです。 AWSのRDSのように、フルマネージドのサービスとしてのデータベースを使用する方がはるかに良いでしょう。これにより、Dockerが適している多くの自動化がもたらされ、自分で行うという頭痛の種はありません。

Dockerがデータベースのワークロードに役立つ主な場所は、開発環境です。 Dockerを使用すると、さまざまな構成で新しいデータベースを簡単に起動できるため、迅速なテストが可能になります。ただし、本番環境では、ルールは一般的に厳しくなります。


Docker
  1. Dockerコンテナ内でプログラムを実行する方法は?

  2. Dockerでデータベースを実行する必要がありますか?

  3. 実行中のDockerコンテナでコマンドを実行する方法

  1. DockerコンテナでNginxを実行する方法:ステップバイステップガイド

  2. DockerコンテナでMySQLを実行する方法

  3. Dockerコンテナの概要

  1. Elasticsearch分散NoSQLデータベース–それは何であり、それを使用する必要がありますか?

  2. Linux で絶対に実行してはならない 10 の致命的なコマンド

  3. root 以外のユーザーとして Docker を実行する