Dockerの概要

ウェブサイトを構築していて、複数のサービスフレームワークが必要になったとき、Googleの検索結果にDockerが表示されました。 では、 Dockerとは一体何でしょうか?コンテナを満載した船を描いたアイコンが、それを鮮やかに物語っています。
bg2018020901.png

工場が船を1隻建造できるなら、無数の船を建造できるはずだ。――誰かがそう言った。

これは、プロジェクトで使用される複数のサービスを統合するツールです。 同時に、これはアプリケーション構造の設計図のようなものでもあります。アプリケーション構造がどれほど複雑であっても、単一のコマンドで自動的にインストールして正常に起動できます。 プロジェクトで利用するサービスの種類が増えるにつれて、 Dockerは不可欠な存在となる。 アプリケーションの種類やハードウェア・ソフトウェア構成の多様性に関わらず、サーバーにDockerを正しくインストールする方法さえ分かれば、あとはすべて簡単です。

基本的な用語

画像

Imageとは、アプリケーション内のサービスの一つを設計した図のことです。複数のイメージを組み合わせることで、完全な設計図が作成されます。 プロジェクトの比較的独立した部分をサービスとして定義し、 Dockerfileを使用してサービスのImageを構成します。

Dockerfile

これはDockerイメージを構築するためのスクリプトです。スクリプト内のコマンドは、サービス依存ライブラリのインストールなど、イメージ構築プロセス中に実行されます。 または、弊社のコードファイルをミラーサイトにコピーしてください。

容器

イメージの作成が完了したら、サービスを開始できます。 この段階では、単一のコマンドでイメージをインスタンス化することができ、これによりcontainerが作成され、サービスはこのコンテナ内で実行されます。 コンテナ内でシェルコマンドを直接実行するには、 docker exec <容器名>コマンドを使用できます。

Docker Compose

しかし、私たちのアプリケーションは複数のサービスを利用しており、それらすべてを起動するには多くのコマンドを実行する必要があります。 起動コマンドに、データvolume追加やポートのportsなど、複雑なパラメータを追加する必要がある場合があります。 あるいは、コンテナが正しく機能するためには、環境変数environmentを追加する必要があるかもしれません。 この時点で、 docker-composeツールを使用して、設定済みのすべてのイメージを結合できます。 起動時に実行する必要のあるすべてのコードは.yml設定ファイルに記述されており、その後、単一のコマンドでアプリケーション全体を直接デプロイできます。

経験

Dockerの使用方法に関するすべての手順は公式ドキュメントに記載されており、基本的なヒントやコツはさまざまなフォーラムや検索エンジンでも見つけることができます。 ここでは、開発と運用において私がまとめた実践的な方法をいくつか参考として紹介します。

Dockerfile書き込みに関して言えば、各RUNコマンドは新しいイメージレイヤーを作成し、イメージレイヤーが増えるほど使用するディスク容量も増えます。 したがって、できるだけ少ないコマンドを使用するという原則に従い、複数のRUNコマンドを&&使用して 1 つにまとめるべきです。 しかし、後でアプリケーションをアップデートしたり、新機能を追加したり、バグを修正したりする際には、イメージを再構築する必要があります。 これらのRUNコマンドは繰り返し実行されるため、帯域幅だけでなく時間も無駄になります。 さらに、画像のレイヤーの一つが変更されると、後続の画像のキャッシュが無効になり、再構築が必要になります。

本番環境で新機能を頻繁に更新する場合、 より洗練されたアプローチは、ミラー層の数を過度に減らすことを追求するのではなく、変化する可能性が最も低い層に焦点を当てることである。 さらに、低レベルの依存パッケージのインストールなど、最も時間のかかるコマンドは最初に配置すべきです。 次に、コードファイルのコピーなど、最も頻繁に変更され、ネットワークリソースを必要としないものを最後に配置します。 こうすることで、時間のかかる部分は必要な場合にのみ再実行され、オンラインで結果を見たい人は、コーヒーを淹れるふりをする必要がなくなる。

最後に、一つアドバイスをしたいと思います。

自分が何をしているのか理解していない限り、ベースイメージとしてAlpine Linuxを使用しないでください。短期的にはサイズが小さい方が魅力的に感じるかもしれませんが、デバッグは悪夢のようなものになるでしょう。