雷って幻想的だよね?

宗教:C#、ラノベ好きの戯言です。※Google Analytics 埋め込みを利用しています。

asp.net core + docker-compose でポートを固定する

dotnet new webaipでプロジェクトを作成し、docker-composeでコンテナ実行を出来るようにすると、ポートがランダムになるの困りますよね?
もちろん、開発の時と、公開の時のdocker-composeは分ける前提です。

Visual Studioは大変便利で、docker-composeも良く分からない「docker-compose.dcproj」で管理をしてくれます。
はい、面倒ですね?
でも、起動が速いので、仕方が無いのかもしれません。

しかし、APIの口が変わってしまうと、開発が非常にやりづらい。
なのでポートを固定したいけれどうまく行かない人と、未来の自分へこの記事を残します。

VisualStudioでdocker-composeを作成すると、プロジェクトの一つとして「docker-compose」が作成されます。
中身に「docker-compose.yml」があるので、中を見ると、port設定がありません。

ここで私は詰まりました。
どう設定をしても、ポートがランダムになります。

対策は
左に▷がありこれをクリックすると・・・「docker-compose.override.yml」と言うのが出てきます。
VisualStudioは(ある意味)大変賢いので、このファイルで設定を上書きます。
ここに、portsさんがおられます。

不思議なことに"80"とか書かれています。ここを一般的な書き方

  • 9080:80

など、文字列では無い状態で記述すると、問題なくポートが固定化されます。


以上です。
同じ悩みに苦しんだ方がおられましたら、助けになると幸いです。

IntelliJでdocker-composeでのデバッグ実行

※まだ途中です

Node.jsとDocker-ヘルプ| IntelliJ IDEA


ここで、ちょっと詰まったのでメモ
選択肢にリモートが出てこない。
そう、出てこなかったんです。

その場合、プラグインを入れれば問題ありません。
過去の自分が入れている物と思っていました・・・orz

場所は以下です
ファイル
→設定
プラグイン
マーケットプレイスでdockerで検索

Node.js Remote Interpreter
をInstall

DockerFileとdocker-compose.ymlのファイルを準備

DockerFile_debug

FROM node:8.16.0-alpine
WORKDIR /usr/src/app

docker-compose.yml

version: '3'

services:
node:
build:
context: .
dockerfile: DockerFile_debug
volumes:
- ./:/usr/src/app
command: sh -c "yarn start"
ports:
- "3000:3000"
networks:
default:
external:
name: shared

IntelliJの設定
実行/デバッグ構成
→上記、URLに従ってNode.jsを作成
→作成したNode.jsのNodeインタープリターの「...」をクリック
→「+」
→リモート追加
チェックボックスで「Docker Compose」を選ぶ
→OK(docker-compose.ymlの名前を変えていたらそのファイルを選択すること)
で、何も考えずに実行すると、動く。

因みに、asp.net core と通信を行う場合は、URL設定のところで以下みたいにすると開発が楽になる感じ。
const UrlMain = process.env.NODE_ENV === 'development' ? "開発のURL" : "リリースのURL";

VisualStudioでdocker-composeもDockerもお手軽に設定できた

確認バージョン:Visual Studio Community 2019 v16.4.3
確認したプロジェクト:asp dotnetCore 3.0

手順:(いらない可能性が高いけど…

プロジェクトの作成
コンソール:

dotnet new webapi

【Dockerファイル】
プロジェクトを右クリック
→追加
→Dockerサポート

【docker-compose】
プロジェクトを右クリック
→追加
→コンテナーオーケストラのサポート

以上。
とても簡単にお気軽にできたのでびっくりした。
docker-composeがないと、コンテナ間アクセスが面倒なので、すごく便利になった!

…フロントエンドもコンテナにしてしまえば、、、もしかして?

reactのデザイン思想が、すごく良かったので、VisualStudioで試してみた。

新規作成のテンプレートでまともなのが生成されてないので、無いのだと思っていたら、、、
友人より、あるよ?って指摘を受けて・・・調べてみたら、、、

dotnet new reactredux -o myapp

※myappは作成したい、ソリューション名

を実行すると、react + typescriptでasp.net coreのプロジェクトが生成される・・・!!

普通に、デバッグも出来る・・・!!!

素晴らしい!
なぜ、新規作成されるのはSSRなんだろう・・・orz

このコマンドで利用できるのは他にもあるので以下のサイトをご確認下さい。
Angularとかもあった。
dotnet new コマンド - .NET Core CLI | Microsoft Docs

dotnet Core Preview が8になったようです。

core/3.0.0-preview8.md at master · dotnet/core · GitHub

dotnet Core Preview 8 の利用は、 Visual Studio 2019 16.3 Preview 2
だそうです。

VisualStudioInstallerのアップデートが入ってますね。

ASP.NET のbugs
Issues · aspnet/AspNetCore · GitHub

ASP.NETのfeatures
Issues · aspnet/AspNetCore · GitHub


気になるのは・・・
プロジェクトテンプレートの名称が変更になりました
Rename Blazor project templates · Issue #10348 · aspnet/AspNetCore · GitHub

WebAssemblyが今までは「Blazor(ASP.NET Core hosted)」だったのが、「Blazor WebAssembly App」になったとのこと。

@bind関連の強化
Enhancements to @bind - globalization and conversions · Issue #9386 · aspnet/AspNetCore · GitHub

あまりいじれていないのでピンと来る物が少ないなぁ・・・

Blazor Preview7 で MySQLを利用した認証

Blazor Preview7 で MySQLを利用した認証を実施したときのメモ

※注意
コードの内容をすべて把握しているわけでは無いので、利用が推奨されていない、記述が存在していますので、実運用時はご注意ください。

※以下を行うとき、パッケージマネージャコンソールを利用しますが必ず、リビルドを行い、古い不要な物を削除した状態で試してください。

想定環境:
dotnet Core 3.0 Preview 7
Visual Studio Community 2019 Preview(16.3.0 Preview 1.0)
Blazor Preview7 ClientSide & Server Side(新規作成: Blazor(ASP.NET Core hosted))
MySQL:8.0.14(docker-composeで実行している物を利用)

ダウンロード
Download .NET Core 3.0 (Linux, macOS, and Windows)


必要なNuget(バージョン注意)

サーバーサイド
Microsoft.AspNetCore.Identity.EntityFrameworkCore(Version="2.2.0")
Microsoft.EntityFrameworkCore(Version="2.2.6")
Microsoft.EntityFrameworkCore.Design(Version="2.2.6")
Microsoft.EntityFrameworkCore.Tools(Version="2.2.6">)
MySql.Data(Version="8.0.17")
MySql.Data.EntityFrameworkCore(Version="8.0.17")
MySql.Data.EntityFrameworkCore.Design(Version="8.0.17")
・Pomelo.EntityFrameworkCore.MySql(Version="2.2.1-preview1-final")

Shared
・System.ComponentModel.Annotations(Version="v4.6.0-preview7.19362.9")

マイグレーションの作成コマンド(パッケージマネージャーで実行)
・Add-Migration InitialCreate

実際のコード一式となります。
GitHub - raikou/BlazorPreview7_withMySQL8: BlazorのPreview7でMySQLを利用し、ログイン認証(identity)を実行するサンプル

できるだけ、ログで比較できるようにしていく予定です。(元コードに更新があった場合)

私のように困っている方の参考になれば幸いです。

MySQL8のDocker確認

MySQL8とPHPをとりあえず動かしたのでメモ。

5.7で試してたけど…
※パスワード認証は胃z年お方式に設定しなおしています。

docker-composeの中身これを動かせばlocalhost:8080で確認できます。

version: '3.3'
services:
# MySQL
db:
image: mysql:8.0.14
container_name: db_host
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD_SETTING}
MYSQL_DATABASE: ${MYSQL_DATABASE_SETTING}
MYSQL_USER: ${MYSQL_USER_SETTING}
MYSQL_PASSWORD: ${MYSQL_PASSWORD_SETTING}
TZ: 'Asia/Tokyo'
command: --default-authentication-plugin=mysql_native_password
volumes:
- ./docker/db/data:/var/lib/mysql
ports:
- 3306:3306

#PHP
phpmyadmin:
container_name: php
image: phpmyadmin/phpmyadmin
environment:
- PMA_ARBITRARY=1
- PMA_HOSTS=db_host
- PMA_USER=root
- PMA_PASSWORD=${MYSQL_ROOT_PASSWORD_SETTING}
ports:
- 8080:80

ちなみに、マイグレーションをする際は
DockerでMySQL8.0の環境構築 & 認証方式変更 - わくわくBank
ここのやり方でやって、最後の問題の個所は力業で、

CREATE TABLE `__EFMigrationsHistory` ( `MigrationId` nvarchar(150) NOT NULL, `ProductVersion` nvarchar(32) NOT NULL, PRIMARY KEY (`MigrationId`) );

を実行することで問題なく利用できるようになりました。

以上。