コンテナ技術概要
コンテナを知る3つのステップ
3rd STEPコンテナはどのように使われるのか?
アプリケーション開発現場でのコンテナのうまい使いかた
モダンなアプリケーションの開発現場ではコンテナをうまく使っています。
アプリケーション開発者の問題
- 開発・テスト環境を持つ際の問題
- 仮想マシン(VM)を使うが、開発機のスペックなどの都合で複数VMを持てない。
- VMを並列して起動できず、テストのたびに停止・起動を行うため時間がかかる。
- そもそも複数のVMの用意に時間と労力を要する。
- 複数人で開発する際の問題
- 環境の違いに起因する結合テストや統合テストでの失敗がありえる。
- 標準化した環境を配布しようとしても、VMでは環境の変更管理が難しい。
コンテナを使うことによる解決
- 複数の環境を持つことが容易
- コンテナはVMよりも少ないリソースで複数の環境を並列稼働できる。
- 軽量で高速起動できるため、時間的効率が上がる。
- 環境の用意はコンテナレジストリからPullするだけでよい。
- 全ての開発者が同じ環境を使用
- 不変性を持つコンテナイメージがベースになるため、人によって環境が違うことは起きない。
- イメージはコンテナレジストリ側で自動的に変更管理される。
アプリケーション本番稼働でのコンテナのうまい使いかた
コンテナは様々なサービスの本番環境でも使われています。
アプリケーション本番稼働の問題
- 環境への依存
- 微妙な環境の違いによって、開発環境とステージング・本番環境で挙動が違うなどの問題が起こりえる。
- システム基盤への依存
- 別の基盤(例えばオンプレミスからクラウド)へのアプリケーション移行が難しい。
コンテナを使うことによる解決
- 環境やシステム基盤への依存を極小化
- コンテナは基盤への依存性が低いため、環境ごとに挙動が違うことを防ぐことができる。
- 基盤ごとの違いはコンテナ自体とは別で吸収できるため、アプリケーションの移行が比較的容易である。
コンテナ化されていないアプリケーション
コンテナ化されたアプリケーション
開発〜デリバリーまでのコンテナのうまい使いかた
コンテナを使うとアプリケーションの開発からデリバリーまでの作業を一気通貫で走らせることが容易になります。
継続的インテグレーションと継続的デリバリー(CI/CD)
- アプリケーションのビルドからコンテナのビルド、デプロイまでを自動的に行うようにする。
- 途中で行うコードの解析やテストなども自動化する。
- CI/CD用のソフトウェアを利用して、 “パイプライン“ を構成する。
- 人の作業を「アプリケーションのソースコードの投入」と「デプロイの承認」など最小限にして極力自動化することで、アプリケーションデリバリーまでの作業品質を均一化する。
実稼働するシステムでコンテナをうまく使うには
コンテナオーケストレータはコンテナの管理・運用を自動化し、ランタイムだけでは足りないシステムの可用性や運用性を提供します。
コンテナの管理・運用を自動化
コンテナオーケストレータ = Kubernetes を使う
コンテナランタイムのみ
【人が行う作業】
- 属人的な障害復旧オペレーション
- 手動によるのコンテナ変更作業
- アプリケーションごとの設定管理
- 定期的な監視作業
コンテナオーケストレータを使用
【人が行う作業】
- ビジネス変化に応じた適切なリソース調整
Red Hat OpenShift
Red Hat OpenShiftはKubernetesを包含し、さらにビジネス価値に直結する機能を補完します。
Kubernetesでできること
- コンテナアプリケーションのデプロイやスケーリングに伴う操作を自動化し、運用負担を軽減する。
Kubernetesだけではできないことを補完するOpenShift
- アプリケーション開発と運用管理を効率化する機能を提供する。
- コンテナの
自動ビルド - ミドルウェアの
管理 - クラスタの
ロギングや監視 - ホストの管理
(+Security) - クラスタ
アップグレード
- アクセス負荷分散
- コンテナの死活監視
- リソースの制御
まとめ
- 1st STEP
- コンテナが使われるのはなぜなのか?
- 2nd STEP
- コンテナを使うためには何が必要なのか?
- 3rd STEP
- コンテナはどのように使われるのか?
- コンテナはインフラ側よりもアプリケーション側により大きなビジネスメリットを提供する。
- コンテナは仮想マシンと同じように見えるが、様々な異なる特徴がある。
- コンテナの特徴をうまく使うことで、アプリケーションの開発や運用を効率化できる。
- 実稼働するシステムでは可用性や運用性が必要となるため、コンテナオーケストレータを使うことが求められる。