今回はコンテナのお話です。今日、多くのスタートアップのお客様が本番環境でコンテナを採用し、ビジネスに活かしております。その一方で、「そろそろコンテナやった方がいいか?」「なんとなく使い始めたけれどこれでいいのか?」「コンテナ自体は分かったけど、サービスでの利用に踏み切れていない」といったご相談も数多く頂いております。上でどうコンテナ化を進めていけばいいのかをお話致します。目次コンテナとはコンテナオーケストレーションコンテナ利用時・検討時によくある誤解コンテナへの移行ステップコンテナとはまずはじめに改めてコンテナ技術についての復習です。アプリケーションコードを実行するには、そのコードだけではなく関連するコンポーネントが揃っている必要があります。etc...設定などが揃っており、適切に設定されている必要があります。「ランタイムとライブラリの整合性が取れていない」といった場面に遭遇することも多いのではないでしょうか。環境のコード化などで管理を助けてくれるツールも多くありますが、これらの整合性を保つためにそれなりの労力を払う必要があります。アプリケーションを構成するコンポーネントこのような依存関係の問題を解決するための手段として「コンテナ」が利用されます。アプリケーションの実行に必要な依存物を全てコンテナの中にパッケージングし、このパッケージをそのままデリバリーすることで、開発環境から本番環境まで同一の環境(コンテナ)でアプリケーションを動作させることが出来るようになります。上の図では設定が含まれていませんが、コンテナワークロードでは環境によって異なる設定(例えばデータベースの接続先など)を外部から環境変数として引き渡すことがベストプラクティスとされます。環境変数から設定可能になっています。イメージを利用できるようになります。いったコマンドでコンテナを実行することが出来ます。コンテナが動かないなどの制約はあります。管理するスコープとしては、単一のホストマシン上でのコンテナの動作になります。それ以外の部分、例えばコンテナのオートスケーリングや複数のホストマシンにまたがるような配置、ローリングアップデートなどは別の仕組みとして実装する必要があります。コンテナオーケストレーションそこで登場するのがオーケストレーションツールになります。いったサービスがこれにあたり、複数のホストマシンにまたがるコンテナの配置やコンテナのアップデート、ロードバランサーへの紐づけなどを管理してくれます。経由で変更後の状態を指示し、オーケストレーションツールはその状態になるように、あるいは維持するように動作します。これを「宣言的デプロイメント」と呼んだりします。利用した宣言的デプロイメントのイメージ図コンテナ技術により解消したい技術課題は企業により様々ですが、何かしらのオーケストレーションツール抜きにコンテナワークロードを考えるのは現実的に難しいでしょう。本番稼働しているサービスを動かしているケースも見られますが、サービスの信頼性を考えると単一のホストマシンのみで動かすことは望ましくなく、複数のホストマシンにまたがる運用をオーケストレーションツール抜きに実装することはなかなか困難を伴います。コンテナ技術そのものとオーケストレーションツールがもたらすメリットや特性をしっかりと認識することがより良いアーキテクチャや運用に繋がります。コンテナ利用時・検討時によくある誤解これからコンテナ化していきたいというお客様から相談をいただく中で、よくある誤解や認識違いがあります。多くは実際にコンテナに触れていく中で解消されるものですが、予め把握していることでスムーズに移行を進められるでしょう。誤解1:コンテナに移行「しなければならない」と漠然と思っているそろそろうちもコンテナを。いう相談は正直多く頂いており、これからはコンテナだと主張するエンジニアが増えているのも事実です。コンテナが解決する技術課題は多くありますが、解決したい課題をあまり明確化せずに漠然とコンテナ化を検討しているお話もよく耳にします。等を使い分けております。社内のエンジニアのスキルとの相性も重要です。私達もご相談を頂いた際に、あえてコンテナ化を勧めないケースが多くあります。コンテナ利用のイメージが沸かないまま漠然と今より良くなると思い、移行の必要性を感じているようであれば、その技術が具体的に何を解決するのかを改めて検討することをオススメします。誤解2:コンテナ化により仮想マシンの管理・運用が不要になるランタイムやパッケージ等をコンテナとして管理することが出来るようになるので、ホストマシン上でそれらの管理をする必要が無くなる、あるいはコンテナとして管理出来るのでより容易になる、ということであれば正しいです。ホストマシンそのものの管理・運用が不要になるかというと、そのようなことはありません。動いている必要があります。等のオーケストレーションツールのデーモンが動いていることもあるでしょう。これらへのパッチ当てやバージョンアップは依然として必要です。コンテナをスケールさせ数を増やす際は、コンテナの実行環境となるホストマシンを増やす必要があります。ことを認識する必要があります。いう機能を提供しております。こちらについては次回以降詳しく解説する予定です。誤解3:まずはじめにオーケストレーションツールを選定しなければならないと思っているお客様コンテナの利用を検討されている場合に、オーケストレーションツールの選定から始められるケースが多々あります。「コンテナへ移行を考えているのですが、今始めるのであれば○○がいいでしょうか?」といった質問を頂くことも多くありますが、移行の初手でこうした選択をする必要性はあまりありません。自社の技術的な課題や優先したい方針によって適したツールは変わります。これは今ツールを決定したとしても、将来的に変わる可能性があることを意味します。コンテナに関する知見が深まる中で選択が変化することもあるでしょう。アプリケーションがコンテナに最適化されていればその移行は比較的容易で不可逆ではありません。アプリケーションがコンテナに最適化されているかどうかの方が重要であると言えます。イメージをレジストリに登録するところまでは、ツールに依らず必要になるので、これらの作業から進めていく方が好ましいでしょう。誤解4:コンテナを使うならマイクロサービス化しなければならない。(あるいは)マイクロサービス化するならコンテナ化しなければならない。特性的に相性がいい点があるのは事実ですが、依存関係はありません。ユースケースのうちの1つです。コンテナを利用せずにマイクロサービス化しているケースもありますし、モノリシックなアプリケーションをコンテナで運用されているケースも多くあります。コンテナへの移行ステップではどの様にコンテナ移行していけばいいのでしょうか。比較的容易な移行パスは既存のアプリケーションをコンテナ化し本番稼働まで持っていくことです。具体的には次の様なステップです。行うことをおすすめします。行うことが出来るようになるからです。コンテナの実行環境やオーケストレーションツールの選定から始められる方がいらっしゃいますが、実際にコンテナ上で動くアプリケーションが手元にあることで、検証をスムーズに行え実挙動を自前のアプリケーションで確認することが出来るのでおすすめです。(もちろん、コンテナに精通されているエンジニアの方はこの限りではありません。)それぞれのステップで注意すべき点について触れていきます。コンテナ化するアプリケーションを選定する特に言語等の制約はありませんが、シンプルでモノリシックなアプリケーションの方が初めてのコンテナという観点では容易かと思います。複数の機能がある場合などは、それぞれ分けて検討を進めるなども有効です。実装された非同期処理を分けて考えるなどです。アプリケーションをどうコンテナで動かすか」にフォーカスし進めたほうが、早く次のステップに進め、結果としてコンテナのへの理解を深めることにも役立つでしょう。コンテナでアプリケーションが動くようにする、適した設計にする重要なことはステートレスにアプリケーションを設計することです。等で保管できるといいでしょう。ログを送ることが可能です。全てを網羅せずともコンテナ上でアプリケーションを動かすことは可能ですが、どの様なアプリケーションが向いているかの理解を深めるためにもひと通り目を通しておいた方がいいでしょう。※昨今の技術進歩によりコンテナでステートフルな要素を扱うことは日々現実味を増してきていますが、入門としては上記の内容を踏まえた上で検討されるのがいいでしょう。イメージをビルドするには、どの様なイメージを作成するかという設計図が必要です。イメージを安定的にビルド出来るようになります。よるコード化は必須と言えるでしょう。イメージを登録します。指定することになります。イメージを任意の環境で動かせるようになります。逆にいうと、クラウドの利用やオーケストレーションツールの選択に依らず必要な作業と言えます。オーケストレーションツール)ここまで来てようやくアプリケーションの実行環境について考えることが出来ます。いったサービスを利用し、サービスの実行環境を整備していくことになります。このタイミングで当初想定されていたオーケストレーションツールから乗り換えられるケースも多くありますし、アプリケーションがコンテナ上で動くようになっているのであればオーケストレーションツールの移行は比較的容易になります。イメージのビルド等の手間は自動化していくことが望ましいでしょう。コンテナの活用により便利になる部分が多くあるとの同時に、やらなければならないことが増えるのも事実です。(継続的インテグレーション/継続的デリバリー)のパイプライン内で自動化しています。これらを自動化し上手く付き合っていくことがコンテナワークロードの成功に大きく影響します。こちらについては別途詳しく解説する予定です。まとめいかがでしょうか。コンテナについてイメージが湧きましたでしょうか。「コンテナを利用したい」とご相談を頂く多くのお客様が、具体的なイメージが無いまま相談に来られます。きっかけは興味関心やトレンドであってもいいかと思いますが、自社のサービスで活用する際には解決できる技術的課題や必要になる作業を具体化していくことが重要になります。コンテナ関連サービスを利用してどうサービスを提供していくかについてご紹介していきます。@mats16kコンテナやビッグデータが得意分野なスタートアップソリューションアーキテクト。