Docker noob here ...
コマンドラインでVisual Studio 2017によって生成されたAsp.Net COREアプリのDockerイメージを適切に実行するにはどうすればよいですか?
docker run -it -d -p 80:32769 myappimage
正しく動作していないようです(画像は実行されますが、アプリを参照できません)
注:デフォルトのテンプレートを使用してStudio内にサンプルのASP.Net Core Webアプリを作成し、Dockerサポートを追加しました([Dockerサポートを追加]チェックボックスをクリックして)。これを行うと、Studioはdockerfileといくつかのdocker-composeファイルを追加します。
Visual Studioがイメージを「実行」すると(F5キーを押す)-アプリケーションを(「 http:// localhost:32789 または類似のホストポート経由で)正常に参照できます。コンテナー内のアプリはポート上にあります80)。しかし、コマンドラインで自分で実行するコマンドを理解できません。
Studioがプロジェクトに追加する標準のDockerfileは...
FROM Microsoft/aspnetcore:1.1
ARG source
WORKDIR /app
EXPOSE 80
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "WebApplication2.dll"]
はい、可能です。 Release構成でソリューションを再構築し、docker-compose
でF5
プロジェクトを実行して、イメージが確実に更新され、アプリは正常に動作しています。次に、docker images
コンソールコマンド を実行します。次のようなものが表示されます。
REPOSITORY TAG IMAGE ID CREATED SIZE
Your.App latest 673b79a6bb3d About a minute ago 294 MB
必要なのは、そのイメージから新しいコンテナーを実行し、その公開されたポートをlocalhostポートにマップすることだけです。デフォルトでは、公開されるポートは80
です(Dockerfile
を参照)。例えば:
docker run -d -p 1234:80 --name some_name Your.App:latest
その後、http://127.0.0.1:1234/
でアプリにアクセスできるようになります。
説明:
Debug構成が設定されている場合、empty機能しないイメージはVisual Studioによって作成されます。空のコンテナをファイルシステムに手動でマッピングして、デバッグ、「編集および続行」機能などを可能にします。これがdev
画像がVisual Studioなしでは役に立たない理由です。 Release構成でイメージをビルドして使用可能にします。
完全な公開プロセスについては、ドキュメントで説明されています。 Visual Studio Tools for Docker
Dockerイメージの公開
アプリケーションの開発とデバッグのサイクルが完了すると、Visual Studio Tools for Dockerを使用して、アプリケーションの本番イメージを作成できます。デバッグドロップダウンをReleaseに変更して、アプリケーションをビルドします。ツールは
:latest
タグ付きのイメージを生成し、プライベートレジストリまたはDocker Hubにプッシュできます。
ここで何か混乱しています。 Visual Studio 2017でF5を使用してプロジェクトを実行する場合、ランダムに構成されたポートでIISExpressを使用してプロジェクトを実行します。
DockerにIISExpressがない場合、アプリはKestrelによってのみホストされます(Kestrelは常にIIS/IISExpressの背後でも使用されますが、リバースプロキシとして機能します)。
Kestrelのデフォルトポートは5000ですが、設定することもできます。リスニングIP /ポートを構成する必要があるメソッドの詳細については、私の投稿 こちら を参照してください。