Dockerは、コンテナーを使用してソフトウェア開発に革命をもたらし、今日の主要なコンテナープラットフォームです。
コンテナは、ソフトウェア開発から多くの面倒なプロセスを取り除きます。セキュリティ、速度、効率を向上させるためのベストプラクティスを実装することで、Dockerの可能性を最大限に引き出します。
このチュートリアルでは、Dockerコンテナ管理のベストプラクティスについて説明します。

Dockerとは何ですか?
Dockerは、ソフトウェア開発における反復的なタスクを排除するオープンソースユーティリティです。
これにより、開発者は、プロセスを実行するための制御された環境であるコンテナーを作成できます。
コンテナは、特定の動作環境のレプリカであるイメージを使用します。サーバーの仮想化のように聞こえますが、Dockerコンテナーは、必要なライブラリと依存関係のみをロードすることで、最小限のリソースでコマンドを実行するように合理化されています。
Dockerコンテナを管理するためのベストプラクティス
適切な計画によるDockerコンテナの効率の管理
ソフトウェアプロセスを計画するときは、最小限の作業とリソースでタスクを実行できるように、コンテナシステムを計画するのが最善です。
これらの仮想環境を構築して実行する前に、各プロセスをコンテナーにマップする方法と、これらのコンテナーがどのように相互作用するかを検討してください。
さらに、コンテナが最適なツールであるかどうかを調べる必要があります。 Dockerには多くの利点がありますが、一部のアプリケーションは仮想マシンでより適切に動作します。
コンテナとVMの違いを見て、どちらがニーズに最も適しているかを判断してください。
コンテナの速度を活用する
仮想マシンとは異なり、コンテナを実行するために膨大なリソースのライブラリは必要ありません。コンテナは、ほんの一瞬でメモリのロード、実行、およびアンロードを実行できます。
最高のパフォーマンス結果を得るには、Dockerイメージを小さく保ち、Dockerのビルドを高速化する必要があります。画像サイズを小さくするには、画像ベースを小さくする方法、多段階ビルドを利用する方法、不要なレイヤーを避ける方法など、さまざまな方法があります。
同様に、既存のDockerレイヤーをローカルにキャッシュすると、イメージをより迅速に再構築でき、最終的にはコンテナーの速度を活用できます。
各コンテナで単一のプロセスを実行する
起動および削除できるコンテナの数に制限はありません。それぞれがその環境で複数のプロセスを実行できます。
コンテナが実行する操作が多いほど、コンテナの処理が遅くなることに注意してください。これは、コンテナのCPUとメモリの使用量を制限する場合に特に当てはまります。ロードに必要なリソースの数は、パフォーマンスに大きな影響を与えます。一度に複数のタスクを実行すると、メモリを簡単にオーバーコミットできます。コンテナごとに1つのプロセスを使用すると、これらの共有リソースを制限し、コンテナ全体のフットプリントを削減できます。
各コンテナに単一のプロセスを割り当てることで、クリーンで無駄のない運用環境を維持できます。
SWARMサービスを使用する
複数のホストマシンで複数のコンテナーを管理している場合は、コンテナーオーケストレーションツールであるDockerSwarmサービスの使用を検討してください。 Docker Swarmは、多くのスケジューリングおよびリソース管理タスクを自動化し、急速な成長が懸念される場合に迅速に拡張するのに役立ちます。
Swarmの人気のある代替手段は、アプリケーションのデプロイを自動化するための代替プラットフォームであるKubernetesです。 Docker SwarmとKubernetesのどちらを選択するかは、主に組織のニーズによって異なります。
データの保存にコンテナを使用しないようにする
データストレージは、コンテナの入力/出力(ディスクの読み取り/書き込み)を増やします。
データストレージに適したツールは、共有ソフトウェアリポジトリです。
リモートリポジトリへのアクセスはリクエストに応じてコンテナに付与されるため、コンテナのサイズが縮小されます。また、さまざまなコンテナが冗長データをロードおよび保存するのを防ぐのにも役立ちます。最後に、複数のプロセスがストレージにアクセスする際のボトルネックを防ぐことができます。
機能するDockerイメージを見つけて保持する
イメージには、タスクに必要なすべての構成、依存関係、およびコードが含まれています。
アプリケーションのライフサイクル全体のイメージを作成するのは難しい場合があります。ただし、イメージを作成したら、変更しないでください。依存関係が更新されると、Dockerイメージを更新したくなるかもしれません。ただし、サイクルの途中でイメージを変更すると、開発プロセスに大混乱をもたらす可能性があります。これは、異なるチームが互換性のない依存関係を持つ画像を使用する場合に特に当てはまります。
最初から最後まで単一の画像を使用すると、トラブルシューティングが簡単になります。
すべてのチームが同じ基本環境で作業し、コードのさまざまなセクションをまとめるのに費やす時間を短縮します。また、1つの更新を完了して、複数のコンテナーでテストすることもできます。これにより、個々の更新とコード修正の重複作業が削減されます。また、品質保証チームが問題をより迅速に見つけて修正するのにも役立ちます。
コンテナ内のネットワーキング
Dockerのコンテナーには、相互に通信するためのIPアドレスが割り当てられます。これにより、ネットワーク環境で課題が発生する可能性があります。
過去には、 ––LINK
コマンドは、アドレス指定と通信を管理するために使用されました。この機能はレガシーと見なされ、ブリッジネットワークに置き換えられました。
コンテナ間のユーザー定義のブリッジネットワークにより、ブリッジネットワーク内のすべてのポートにアクセスできます。また、外界へのすべてのポートをブロックします。これにより、コンテナの安全な環境が作成されます。内部トラフィックは中断されずに流れ、外部の影響から保護されます。
ユーザー定義のブリッジ(およびその他のテクノロジー)の詳細については、Dockerのドキュメントを参照してください。
Dockerセキュリティのベストプラクティス
Dockerチームは、多くの最新のインターネットセキュリティプロトコルを改良しました。元のネットワーク開発者は、ネットワークプロトコルにセキュリティを組み込んでいませんでした。
セキュリティの改造は常に困難で費用がかかります。開発中にセキュリティを実装することをお勧めします。
Dockerコンテナのセキュリティを管理するために考慮すべきいくつかのオプションを次に示します。 。
1。ルート権限を持つコンテナの実行は避けてください
ほとんどのLinux管理者は、ユーザーに完全なroot権限を付与することの危険性に精通しています。同様の警告がコンテナにも当てはまります。より良い方法は、必要な権限のみを使用してコンテナーを作成することです。
–u
を使用する (管理者ではなく)ユーザーを指定するタグ。
2。安全な資格情報
クレデンシャルは、使用する場所とは別の場所に保管してください。また、環境変数は、コンテナ内のアクセスを管理するためのより良い方法です。
同じコンテナにクレデンシャルを含めることは、付箋紙にパスワードを保持するようなものです。最悪のシナリオでは、1つのコンテナの違反が、アプリケーション全体にすぐに広がる可能性があります。
3。 –PRIVILEGED
を使用する タグを控えめに
デフォルトでは、コンテナはより安全な非特権モードで実行されます。
コンテナは他のデバイスにアクセスできなくなります。他のデバイスへのアクセスが必要な場合は、 –privileged
を使用してください ケースバイケースでアクセスを許可するタグ。
4。サードパーティのセキュリティアプリケーションを使用する
セキュリティ構成を確認するために、2番目の目を持つことは常に良い考えです。サードパーティのツールは、セキュリティスペシャリストのスキルを活用してソフトウェアを分析します。また、既知の脆弱性についてコードをスキャンするのにも役立ちます。さらに、多くの場合、コンテナのセキュリティを管理するための使いやすいインターフェースが含まれています。
5。プライベートソフトウェアレジストリへの切り替えを検討してください
Docker Hubは、ソフトウェアイメージの無料レジストリを維持します。これは、複雑なプロジェクトに取り組んでいる初心者の開発者や小規模な開発チームにとって非常に役立ちます。
ただし、これらのレジストリを使用する場合は、セキュリティが問題になる可能性があります。ソフトウェアレジストリをホストすることのコストとメリットを評価する価値があります。リソースを分散し、コンテナ間でDockerイメージを共有する実用的な方法が必要な場合は、プライベートDockerレジストリを設定することをお勧めします。