ASP.NET と Docker そしてクラウドの関係

ASP.NET と Docker そしてクラウドの関係

73c174b34dafaea64f2824eb008a6559?s=128

Tatsuro Shibamura

June 17, 2017
Tweet

Transcript

  1. ASP.NET と Docker そしてクラウドの関係 @shibayan

  2. はじめに • @shibayan • http://blog.shibayan.jp/ • Microsoft MVP for ASP.NET/IIS

  3. ASP.NET について • 二つの ASP.NET が並行して存在中 • ASP.NET (Web Forms

    / MVC / Web API) • ASP.NET Core (MVC)
  4. Docker で実行したい • ASP.NET の場合 • Windows Server Core ベースのイメージを利用

    • mono-xsp なイメージを利用(無保証) • ASP.NET Core の場合 • Nano Server ベースのイメージを利用 • Debian ベースのイメージを利用
  5. メリット・デメリット • 既存の ASP.NET アプリケーションの Dockernize が出来る • Docker のメリットを

    Windows ベースでも • IIS や必要なパッケージを含んだイメージをそのまま展開 • 実行環境を非常に選ぶのがデメリット • Windows Containers の環境が必要
  6. ASP.NET の場合

  7. ASP.NET Core の場合

  8. イメージタグの選び方 • ASP.NET の場合 • .NET Framework と Server Core

    バージョンの組み合わせ • 例: 4.7-windowsservercore-10.0.14393.1358 • ASP.NET Core の場合 • Nano Server か Debian のどちらかを選ぶ • .NET Core のバージョンを選ぶ • 例: 1.1.2-jessie / 1.0.5-nanoserver
  9. 実行環境について

  10. Docker が動けば問題なし • パブリッククラウドには大体サービスが存在している • Azure / AWS/ GCP は問題なし

    • オンプレの場合は Swarm / Kubernetes など • ローカル環境では Docker for Windows / Mac など • Windows 10 の場合は Hyper-V Containers が
  11. パブリッククラウドで動かす • Azure の場合 • App Service on Linux /

    Azure Container Service を使う • AWS の場合 • Elastic Beanstalk / EC2 Container Service を使う • GCP の場合 • App Engine Flexible Environment / Container Engine を使う 全て Linux ベースの環境
  12. Windows は難易度が高い • Windows に対応したサービスが提供されていない • Azure は Kubernetes の

    Windows サポートがプレビュー
  13. Server Core の罠 • Windows コンテナーの要件 • Windows Server コンテナーは、ビルド番号が異なると起動をブロッ

    クされます (例: 10.0.14300.1030 (Technical Preview 5) と 10.0.14393 (Windows Server 2016 RTM))。 ビルド番号が一致し、リビジョン番 号が異なる場合は、起動をブロックされません (例: 10.0.14393 (Windows Server 2016 RTM) と 10.0.14393.206 (Windows Server 2016 GA))。 ただし、技術的にはブロックされませんが、これは状況 によっては正しく機能しない可能性がある構成であるため、運用環境 ではサポートできません。
  14. まだまだ発展途上の Windows • サービスが提供されていない Windows のコンテナ • Azure が真っ先にサービスを提供するべき •

    バージョン管理が難しいイメージ • サイズが大きすぎる Server Core イメージ • ダウンロードサイズ 6GB / 展開後で 11GB • ちなみに Nano Server は 380MB / 1GB ぐらい
  15. OS の選択について

  16. Windows と Linux の選択 • ASP.NET の場合 • 実質的には Windows

    の一択しかない • Mono XSP を使った運用は難しい • ASP.NET Core の場合 • 現実的には Linux の方が運用が楽 • 開発は Windows で、実行は Linux という方法もアリ
  17. 将来的には Alpine Linux も • .NET Core での Alpine Linux

    サポートが予定 • ポーティング中 : https://github.com/dotnet/coreclr/issues/917 • イメージサイズの削減が見込める • ビルド、デプロイの速度向上
  18. 実際に行っている例 • 開発環境 : Windows 10 + Visual Studio 2017

    • CI/CD : GitHub + CircleCI • 実行環境 : AWS Elastic Beanstalk (Docker)
  19. Visual Studio のサポート

  20. VS2017 で Docker に全力 • Visual Studio は Windows /

    Linux の Docker に対応 • ASP.NET プロジェクトに追加 • Server Core を使う Dockerfile が追加 • ASP.NET Core プロジェクトに追加 • Debian ベースのイメージを使う Dockerfile が追加
  21. 余談 : Visual Studio からデプロイ • Azure の場合 • Azure

    SDK をインストールすると App Service にデプロイ可能 • AWS の場合 • AWS Toolkit for Visual Studio をインストールする • Elastic Beanstalk の Windows Server にデプロイ(Not Docker) • GCP の場合 • Cloud Tools for Visual Studio をインストールする • App Engine Flexible Environment にデプロイ(Docker)