2019年4月に社内向けセミナーで使用した資料(初心者向け)です。
コンテナ技術が変えるアプリケーション開発2019 Apr
View Slide
2Agenda• はじめに• コンテナ技術(Docker/Kubernetes)の概要• コンテナの利点と開発の流れ• まとめ主にアプリケーション開発の観点から、コンテナ技術について以下を理解する• コンテナ技術の導入によりアプリ開発がどう変わるのか• コンテナの特徴やメリットを活かしたコンテナ・ベースのアプリ開発とはポイント
はじめに
4コンテナ技術についての疑問• Docker/Kubernetesを中心に次世代のインフラ技術として注目されることが多いコンテナ技術• 開発のスピードアップや生産性向上を達成するには、アプリ開発の視点でも理解することが不可欠コンテナの活用方法がわからないなぜ開発スピードが向上するの?開発時の注意点は?ベストプラクティスは?なぜポータビリティが高いの?コンテナでアプリ開発はどう変わる?コンテナイメージは誰がどうやって作成するの?とあるアプリ開発者
コンテナ技術(Docker/Kubernetes)の概要
6インフラ技術としてのコンテナとDocker• コンテナ型仮想化- OS機能はホストを利用しプロセスごとに分離された環境で実行することでリソースを大幅に節約- CPUやメモリなどのリソース、Disk/File SystemやN/Wなどを分離- 仮想環境のイメージサイズが小さく、起動が短時間• Docker- 2013年にDocker社によってリリース、現在コンテナ型仮想化技術のスタンダードに- コンテナ環境を可搬性のあるDockerイメージとして定義- イメージファイルを共有するためのレジストリ(Docker Hub)が提供されているハイパーバイザー型仮想化 コンテナ型仮想化- 仮想化によりアプリからOS以下を抽象化- SW依存関係のパッケージング• 迅速な起動• リソース活用の効率化• 高いポータビリティ
7スケールアウトポリシーベースでの可用性負荷分散 ローリングアップデートネットワーク管理永続ストレージ管理CPU/Memory リソース管理Kubernetesによるコンテナ・オーケストレーション• Kubernetes(k8s)- Googleで自社のため開発されたコンテナ管理ソフト BorgをベースにOSS化- コンテナ管理の標準になりつつあるオープンソースのコンテナ管理ツール実際のシステム運用において必要な管理機能を提供宣言されたポリシーに基づく自動運用を実現
8DockerとKubernetesによるコンテナ作成・実行• Dockerはコンテナの実行環境およびコンテナイメージを開発、共有する仕組みを提供• Kubernetesはあるべき姿を宣言したマニフェストをベースとしたコンテナ管理を実現DockerレジストリMasterxxdocker builddocker pushdocker pullkubectl createkubectl applydocker runDockerホストKubernetesクラスターDockerfileDockerイメージマニフェストdocker commit
コンテナの利点と開発の流れ
10コンテナ技術とポータビリティ• アプリと実行環境(依存S/W)をコンテナとして一つにパッケージング• 複数環境に対して同じようにデプロイ・稼働する(=ポータビリティ)- 異なる環境へのデプロイ時においてミドルウェア設定の差異等による障害の発生が抑えられるM/WアプリM/Wアプリステージングコンテナ検証コンテナ<コンテナによる実行環境構築>コンテナをデプロイM/Wアプリ本番コンテナ• ビルド済コンテナを各環境にデプロイするだけ• 実行環境(M/W)がパッケージされているので同じように動作する検証サーバーアプリをデプロイ<従来の実行環境構築>M/W(dev)アプリOS(dev)ステージングサーバーM/W(test)アプリOS(test)本番サーバーM/W(prod)アプリOS(prod)• 環境ごとに個別に導入・設定された実行環境(M/W)上にアプリのパッケージをデプロイする• M/W設定の差異等がアプリの動作に影響する可能性あり
11実行環境をオンデマンドに構築する• コンテナのポータビリティを活かしてアプリの実行環境を迅速に構築することが可能にアプリ開発者インフラ担当者インフラ担当者デプロイ依頼検証サーバーステージングサーバーサーバー構築M/W導入アプリデプロイ• サーバーごとの構築作業を行う(アプリ側と事前の日程調整や依頼が必要)• 構築・デプロイがインフラ担当者の作業の場合、完了までアプリ開発者は待ち時間になる<従来の実行環境構築>M/WアプリOSM/WアプリOSコンテナ環境構築・運用M/WアプリM/Wアプリアプリ開発者ステージングコンテナ検証コンテナ• コンテナ環境をインフラ担当者が構築してしまえばあとはコンテナをデプロイするだけ• デプロイ手順はCLIやツールで統一されているのでアプリ開発者でも実施可能<コンテナによる実行環境構築>アプリ(コンテナ)デプロイ
12実行環境をオンデマンドに構築する• コンテナ基盤を活用すれば、用途に応じた柔軟な実行環境の運用が可能となるM/W標準<ローカル環境へ標準イメージ配布>• 標準化された開発者の実行環境を迅速に構築• 開発者の負荷軽減<アドホックな実行環境>1.0Fix 1.1β検証緊急障害対応β版確認 ステージング• 異なるバージョンの実行環境を迅速に構築、並行稼働も容易• 廃棄・ロールバックも容易開発ツール環境アプリ スタブ DB自動テスト実行デプロイ自動テスト環境<開発ツール/自動テスト環境>• 構成管理やCI/CDツール等の開発ツール環境もコンテナで構築可能• テスト実行のためのテストランナー、スタブやテスト用DBの自動テスト環境もオンデマンドに用意して利用Push
13Dockerfileとコンテナイメージの生成• Dockerのコンテナイメージは通常Dockerfileをビルドして生成する- 他の作成済イメージをベースイメージとして差分を記述することにより新規イメージの作成が可能- 利用可能なベースイメージがあれば開発者が一からコンテナイメージを作成する必要はないパブリックレジストリDocker Hubxx# ベースイメージを指定FROM websphere-liberty:19.0.0.3-kernel# ビルド済アプリをコンテナ内にコピーCOPY --chown=1001:0 Sample1.war /config/dropins/# アプリ個別の設定をコピーCOPY --chown=1001:0 server.xml /config/# フィーチャー追加RUN installUtility install --acceptLicense defaultServer・・・・例)WAS Libertyで稼働するアプリのためのコンテナイメージ用DockerfileアプリDockerfileベースイメージ新規イメージ(w/アプリ)アプリソースWAS LibertyWAS Libertyxxアプリベースイメージと同じDockerfileによる差分ベースイメージ+Dockerfileの内容から新規イメージを生成FROMに指定したベースイメージをレジストリからビルド時に取得するdocker build• Dockerfileによりイメージの内容がコードとして記述されている• 構成管理の仕組みによりバージョン管理も可能• アプリPKGは従来通りに作成してコンテナ内に搭載
14Dockerfileとコンテナイメージの生成• コンテナイメージについての作業の切り分け(既存の体制で対応するとしたら)M/WアプリOrchestrationOSアプリ開発者インフラ担当者??M/Wの設定もすべてアプリ開発者がやるの?アプリ開発者に任せられる?<ベンダー提供の公式イメージを使う> <インフラ担当者が独自の標準イメージを作成>M/WアプリM/WDocker Hub• 負担も少なく、最も手っ取り早い• ベンダー提供のイメージがないケースもある• 安全なイメージを利用するM/WアプリM/W• 標準化やセキュリティに厳しいケースに対応• アプリ・インフラの分担を実現できる• 標準イメージの作成WLは必要公式 標準
15コンテナベースの開発の流れ• アプリそのものは同じだが、実行環境と共にパッケージされたコンテナがデプロイ単位• ビルド済のコンテナイメージを複数の実行環境に統一された方法でデプロイするSource Build Test Deploy• ベースイメージの取得• アプリの設計・実装• Dockerfileの作成• manifestの作成• リポジトリへの登録• 本番環境へのデプロイ• アプリのコンパイル• 単体テスト• アプリのパッケージング• コンテナイメージのビルド• イメージのレジストリ登録• 検証/ステージング環境へのデプロイ• 統合/受入テストの実施構成管理リポジトリアプリソースDockerfileイメージレジストリ検証環境/ステージング環境 本番環境1.01.0 1.0
16コンテナベース開発におけるCI/CDパイプライン• コンテナベースの開発ではGit・Jenkins・Mavenなどのオープン・テクノロジーを使って、継続的なビルド・デプロイの自動化を開発時点で初期構成しておくのが望ましい• アプリ開発者がインフラ担当者に依存していた環境構築やデプロイ作業を含めて自動化することにより、継続的なサービスの改善や障害対応のスピードを加速させることができるCI/CDパイプラインアプリビルド コンテナビルド 統合テスト デプロイリポジトリ レジストリ本番環境ステージング環境検証環境x.x x.xJenkinsCircleCITravisCIGitlabGitHubNexusHarborMavenGradle JMeterDockerSeleniumkubectlHelmSpinnaker• 各ツールの選択や連携がポイント予めツールセットを揃えたソリューションを活用することも可能
まとめ
18まとめ• コンテナ技術についてアプリ開発の観点から特徴や利点を理解することが重要• コンテナ技術の活用で開発者が開発作業に集中できる開発・実行環境を実現• コンテナ技術による開発スピードアップでデジタル・トランスフォーメーションに取り組む土台作りをCNCFのCloud Native Trail Maphttps://github.com/cncf/trailmap
End of File