VisualStudioでDockerサポート付きのアプリを作ってCI/CD構築する その1

 VisualStudioでWebアプリを作ると、Dockerサポートを付けるか選べる。サポートをつければ、Dockerイメージがビルドによって作成される。このWebアプリのDockerイメージを使用するCI/CDを構築して、Azureへ自動デプロイまでする手順を確立する。

開発環境→Github→TravisCI→Docker Hub→Azure

 上記を見るといざ本番までいくのに手順が多いと感じるかもしれないが、Githubから先は全自動である。TravisCIで行うテストに通った場合のみ本番が更新される。

 今回はAzureを使うが、もちろん手順は他のサービスにも応用できる。最後に説明するであろう自動デプロイの部分を自分の使いたいサービスに変更すればいいだけだ。ぼくはこれから説明するCI/CDをこのブログに導入している。このブログはHyper.shというシンプルなコンテナホスティングサービスを利用している。

 Githubは使える状態になっているとする。

 まずVisualStudioで.NET CoreのWebアプリを作成し、Dockerサポートを付ける。


これでひとまずアプリの初期化完了ということでコミットしておく。
https://github.com/hMatoba/DockerAppWithCI/tree/8dd0d453a60292d93053616f06ae97114e19b622

 今の状態では、アプリはクライアント(ブラウザ)にASP.NETの宣伝ページを返すものになっている。CI/CD構築をするのが目的なので、このままアプリとして返すページには手を加えず進めていく。作りたいアプリがあるなら、CI/CD構築が終わってから機能を実装していけばいいだろう。

 デフォでついてくるcomposeファイルについて。
 .NET Core 2.0のサポートが入ったタイミングあたりで、composeファイルの構成も変わっている。前はreleaseとかdebugのためにcomposeの上書きファイルが用意されていた。今はデフォルトとなるdocker-compose.ymlに加え、開発環境でデフォルトを上書きして使うdocker-compose.override.yml、あとCIに使うらしきdocker-compose.ci.build.ymlの三つになっている。docker-compose.ci.build.ymlは今回使わないので消しておく。
 docker-compose.ymlは内容としては、DockerのビルドをどのディレクトリでどれをDockerfileとして行うかを宣言しているだけの単純なもの。docker-compose.override.ymlは開発環境で使うものなので、必要な環境定義が追加されている。それだけ。
 とりあえずアプリのポートバインドだけdocker-compose.ymlに追記する。
https://github.com/hMatoba/DockerAppWithCI/commit/72d6260c9240ea06f15e01e46734799e42b45126


 次に開発環境用のリバースプロキシをコンテナで用意する。イマドキWebサイトは全ページHTTPSが望ましくなっている。それをやるとなると開発環境でもHTTPSになっていないと、本番にデプロイしたときに齟齬が出かねない。オレオレ証明書を入れたリバースプロキシに開発環境でのHTTPS接続を任せる形にする。
 docker-compose.override.ymlにオレオレ証明書でリバースプロキシをやってくれるコンテナを追記。ここで使用するリバースプロキシは、443ポートに来たリクエストを、webappというホスト名で解決されるサーバとつなぐようになっている。だからlinksオプションでアプリサーバの名前を設定している。
https://github.com/hMatoba/DockerAppWithCI/commit/138f29df4359640e8180127bfae9bf4daa67b4ef

コンテナのソース


 ちなみに本番環境のHTTPSは、使用するサービスに依存するのでそのとき考える。AzureのWeb App on Linux(Web App for Containers)では、Azureのサブドメイン利用ならアプリコンテナを上げるだけでHTTPSにも対応してくれる。
 このブログはコンテナホスティングサービスのHyper.shというのを使っている。Dockerのコマンドがcomposeまで、ほぼそのまま使えるので、リバースプロキシコンテナを用意してHTTPS接続に対応している。
 
 ここでVisualStudioでデバッグを開始し、状況を確認する。https://localhostにつなげば、オレオレ証明書の警告ののちにASP.NETの宣伝ページ?が出るはずだ。



 次回はデータベースコンテナの用意とその接続、Seleniumコンテナの用意とそれを使ってE2Eテストの用意をする。
comment: 0