DUICUO

これら 9 つの異なる Docker アプリケーション シナリオをすべて使用しましたか?

Dockerはオープンソースのコンテナエンジンであり、あらゆるアプリケーション向けに軽量で移植性に優れ、自己完結的なコンテナを簡単に作成できます。開発者やシステム管理者がラップトップでコンパイル・テストしたコンテナは、VM、ベアメタル、OpenStackクラスタ、クラウド、データセンター、その他の基本的なアプリケーションプラットフォームを含む本番環境に一括でデプロイできます。コンテナは完全にサンドボックス化されており、相互にインターフェースを持ちません。この記事では、Dockerを活用して生産性を向上させる9つの方法を紹介します。

1. ローカル依存関係

ローカルシステムでMagentoをすぐに試したい、あるいはプロジェクトでMySQLを使いたい、あるいはオープンソースプロジェクトを試してみたい、そんな時はDockerをご利用ください。時間を大幅に節約できます。Dockerは開発効率を向上させ、開発環境を迅速に構築できます。

開発環境マシンは通常、メモリが限られています。以前は仮想マシンを使用する場合、開発環境マシンにメモリを追加する必要がありました。しかし、Dockerを使用すると、数十のサービスをDocker内で簡単に実行できます。

2. 環境の設定

ソースコードからビルドしたいけれど適切な環境がない場合は、Docker を使うのが有効な選択肢です。従来の方法でソフトウェアを一つずつインストールするのは非常に時間がかかりますが、コンテナ技術なら時間と労力を節約できます。なぜ使わないのでしょうか?

ランタイム環境と設定をコードに記述し、デプロイすることができます。同じDocker設定を異なる環境で使用できるため、ハードウェア要件とアプリケーション環境の結合度が低減されます。例として、Docker Go Builderをご覧ください。

3. マイクロサービス

マイクロサービスを使用していますか?マイクロサービス アーキテクチャとは、モノリシック アプリケーションを疎結合された個々のサービスに分割するものです。

そこでDockerを検討してみましょう。各サービスをDockerイメージにパッケージ化し、Docker Composeを使って本番環境をシミュレートできます(Dockerネットワークを参照)。最初は時間と手間がかかるかもしれませんが、長期的には大きな生産性向上につながります。

4. 自動テスト

次の質問について考えてみましょう: 実行に時間がかからず、ユーザーが簡単に管理できる自動統合テスト ケースをどのように作成するか。

これはDocker内でテストケースを実行することではなく、Dockerイメージと緊密に連携したテストケースを実行することを意味します。Dockerイメージ専用のテストケースを作成することには大きな利点があります。以下は、私のテストワークフローの概要です。2つのDockerイメージ(アプリとデータベース)を実行し、MySQLの起動時にデータを読み込み、アプリ側のDockerイメージでAPIを使用します。簡単な例については、こちらのスクリプトをご覧ください。

5. 展開プロセス

Dockerイメージを使えば、セルフデプロイも可能です。多くの主要ホスティングプロバイダーがマネージドDockerをサポートしており、シェルアクセスが可能な専用ノード/VMがあれば、さらに簡単にデプロイできます。Dockerをセットアップし、必要なポートでイメージを実行するだけです。

6. 継続的デプロイメント

Dockerは継続的インテグレーション/継続的デプロイメントに最適であるとよく言われます。デプロイメントにDockerを使用すると、継続的デプロイメントが非常に簡単になり、新しいイメージを入力すると再起動されます。

現在、このプロセスを自動化するためのソリューションは数多く存在し、中でもKubernetesはよく知られています。Kubernetesはコンテナクラスタ管理システムであり、コンテナクラスタの自動デプロイ、スケーリング、メンテナンスを可能にするオープンソースプラットフォームです。

7. マルチテナント環境

Dockerの興味深いユースケースの一つは、マルチテナントアプリケーションです。この環境では、重要なアプリケーションの書き換えを回避できます。アプリケーションサービスを複数のテナント(テナントとは、組織などのユーザーグループを指します)に公開する場合、シングルテナントアプローチで設計されたアプリケーションでも、サブドメインとDockerを使用することで、マルチテナントサービス機能を迅速に実現できます。

このシナリオの一例として、IoTアプリケーション向けに高速で使いやすいマルチテナント環境を開発することが挙げられます。このようなマルチテナント環境の基盤となるコードは、多くの場合非常に複雑で管理が困難です。そのため、アプリケーションの再設計には時間とコストがかかります。Dockerを使用すれば、テナントごとにアプリケーション層の複数のインスタンスを分離した環境を構築できます。Dockerの高速な起動と効率的な「diff」コマンドのおかげで、これはシンプルであるだけでなく、コストも抑えられます。

8. 1台のマシンから複数のアプリ

これは前述のマイクロサービスと多少関連しますが、マイクロサービスを使用しておらず、単にサービスを提供している場合でも、Dockerは単一のマシン上ですべてのサービスを非常にうまく管理できます。データベース化されたDockerイメージごとにデータを保持するには、フォルダマウントを使用する必要があります。

9. QPSのスケーリング

Dockerは、別のコンテナを作成することで、簡単に水平方向にスケールできます。トラフィックの急増が発生した場合でも、Dockerが問題解決を支援します。マシンを追加し、ロードバランサーの背後で実行されるコンテナの数を増やすだけで済みます。

この記事で紹介されていない Docker アプリケーションシナリオは他にもありますか?ぜひ皆さんと共有してください!

参考: https://medium.com/@012parth/docker-for-10-things-adaca4cca7f8