Docker (プロセスの簡素化とモデルについて)

既にDockerを利用されている方は、簡単にアプリケーションをデプロイできるようになったと体感されているでしょうが、改めてDockerがワークフローやコミュニケーションをどうやって簡素化するのか見ていきましょう。

以前は、アプリケーションを本番環境にデプロイするサイクルは、次のようになることがありました。

1. アプリケーション開発者は、オペレーションエンジニアからリソースを要求します。
2. リソースはプロビジョニングされ、開発者に引き渡されます。
3. 開発者は、その展開をスクリプト化してツール化します。
4. 運用エンジニアと開発者は、デプロイメントを繰り返し調整します。
5. アプリケーションの依存関係は、開発者によって検出されます。
6. オペレーション・エンジニアは、追加の依存パッケージをインストールします。
7. ステップ5と6をN回以上繰り返します。
8. アプリケーションがデプロイされます。

f:id:shinji629:20181115223206p:plain


では、次にDockerを使ったアプリケーションのデプロイのサイクルを見ていきましょう。

1. 開発者はDockerイメージを構築し、それをレジストリに送ります。
2. 運用エンジニアは、コンテナに構成の詳細を提供し、リソースをプロビジョニングします。
3. 開発者はデプロイメントを開始します。

f:id:shinji629:20181115223403p:plain

 

これは、Dockerが開発サイクルとテストサイクル中にすべての依存関係の問題を発見することで可能になります。
アプリケーションの最初の展開準備が整うと、その作業が完了します。
つまり、開発チームと運用チームの間には、多くのやりとりは必要ありません。
より簡単に、また多くの時間を節約します。

 

クライアント/サーバ モデル + レジストリ

Dockerには、一般的なクライアント/サーバとレジストリと呼ばれる3つめのコンポーネントがあります。

f:id:shinji629:20181115223421p:plain

レジストリは、Dockerイメージとそのメタデータを格納します。サーバーはコンテナの構築、実行、および管理の継続的な作業を行い、クライアントはサーバーに何をすべきかを伝えるために使用します。

 

参考文献:

Docker: Up & Running, 2nd Edition, 2018, 352p.