[和訳] ウェビナー要約: WindowsでのDockerプラットフォーム 〜 初級講座から.NETアプリをモダナイズするまで #docker
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本稿は WEBINAR RECAP: THE DOCKER PLATFORM ON WINDOWS -- FROM 101 TO MODERNIZING .NET APPS (2018/4/4) の和訳です。
我々の Dockerライブウェビナー はいつも大変人気があります。先月、基礎的知識であるDockerプラットフォーム(Docker Enterprise Edition (Docker EE)とDocker Desktop)の使い方から、既存の.NETアプリをモダナイズしてクラウドに移行する方法までを網羅する、DockerとWindowsコンテナに関するセッションを開催しました。
録画は今すぐご覧いただけます。60分間の動画の中で、Docker for WindowsでWindowsアプリケーションを作成してコンテナ内で実行するデモを多数ご覧いただけます:
すべてのデモのサンプルコード、DockerfilesとDocker Composeファイルは このGitHub にあります。
デモが多かったため、質疑応答の時間が足りなくなってしまったので、ここで皆様からのご質問にお答え致します:
Q. コンテナ内のsqlデータベースを設計するベストプラクティスまたはチュートリアルはありますか?データの永続性、データベース参照などはどうですか?SSDTをコンテナで使うにはどうしたらいいですか?
コンテナ内で実行しているSQL Serverは、リモートにあるSQL Serverとほぼ同じようなものです。SSDT、Visual Studio、VS Code、または任意のSQLクライアントで接続できます。GitHubに SQL ServerのすばらしいDockerチュートリアルがあります。コンテナを使った構築とデプロイの手順を説明するとともに、ストレージソリューションを扱うDocker Platformリファレンスアーキテクチャがあります。
Q. Docker PowerShellのコマンドレットはWindowsで利用できますか?
DockerプラットフォームはバックグラウンドのWindowsサービスとして運用し、コンテナを管理するためのREST APIを公開しています。DockerコマンドラインはAPIに接続し、マイクロソフト社は同じAPIを共有するDocker PowerShellモジュールを提供しています。私達はDockerコマンドラインを使用することをお勧めしています。なぜならDockerコマンドラインは、常にDockerサーバーと同じバージョンに更新していますが、PowerShellモジュールはしばらく更新されないためです。
Q. ユニットテスト(MSTest)をWindowsコンテナで実行するデモはできますか?
Dockerを使った.NETアプリのモダナイゼーションに関するビデオシリーズでご覧いただけます。このシリーズでは、Docker EE for .NETアプリでCI/CDを実演し、コンテナ内でエンド・トゥ・エンドのテストを実行しています。この例では、NUnitを使用していますが、原則的にはMSTestでも同じです。また、SpecFlowとSeleniumを使用して、複数のコンテナを横断して柔軟にアプリケーション全体をテストしています。
Q. WindowsコンテナをLinux上で実行てきますか?
できません。Windowsコンテナは、ホストOSのカーネルを使用しているため、Windowsコンテナを実行するにはWindows Server 2016(またはWindows 10)で実行する必要があります。Hyper-Vコンテナ機能を使用すれば、LinuxコンテナをWindows上で実行できます。
Q. Windows 10およびWindows 2016に対応するDockerの特定のバージョンがありますか? Docker for Windows for Windows 10とかDocker EE for Windows 2016のような?
その通りです。Docker for WindowsはWindows 10で使用しているデスクトップ版で、開発者向けの追加機能があります。Windows Server 2016では、マイクロソフト社とDocker社がコンテナをサポートしている Docker EEを実行することができます(Windows ServerライセンスにはDocker EE Basicのライセンスを組み込んでいます)。
Q. 私は.NET Core Web APIと複数のCMS APIを使用しています。このような.NETフレームワークと.NET Coreが混在するコンテナを作成するにはどうすればよいでしょうか?
1つのコンテナ内で複数のアプリケーションを実行することはできます。しかしお勧めしません。アプリケーションの各バーツ(API、CMS、Web UIなど)ごとに別々のDockerイメージを作成し、別々のコンテナで実行するべきです。なぜなら、各パーツを個別にアップグレード、スケーリング、デプロイすることが可能になるからです。マイクロソフト社のWindows Server Coreベースイメージは完全な.NET Frameworkを含んでおり、Nano Serverで構築した.NET Coreイメージもあります。
Q. すべてのサードパーティインストーラをDockerコンテナで実行しばければいけませんか?
インストーラによりますので、必ずしもそうではありません。Windows UIに依存しない限り、Dockerfile内で任意のコマンドを実行できます。全自動で実行できるMSI(例:ウインドウがポップアップしない)であれば、通常のmsiexecコマンドを使用してDockerfileで正常に実行できます。
Q. コンテナレジストリの更新に依存する、コンテナ化した実行ファイルを処理する方法はありますか?
簡単にできます。すべてのコンテナにはWindowsレジストリの個別のコピーが存在します。Dockerfileでのデプロイ時やコンテナの実行時にレジストリを変更する必要がある場合は、そのコンテナのレジストリのみを更新し、他のコンテナに干渉することはありません。
Q. コンテナはフレームバッファとハードウェア(GPU)に直接アクセスできますか?(Windowsの場合)
現時点ではできません。ホストハードウェアへのアクセスは、WindowsコンテナがLinuxコンテナと完全に同等ではない領域の1つです。しかし、マイクロソフト社はWindows Serverのコンテナ機能に大きく投資しています。2017年秋のリリース1709では大きな改善があり、Windows Server 2019のリリースはさらに多くの機能が期待できます。
Windows上のDocker をもっと学びたい方は: