GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

Visual Studio を使用して Linux 上の Docker に ASP.NET 5 アプリを発行する

まだ始まったばかりですが、これは将来の可能性の良いプレビューです。私は、ソフトウェア システムについて話すとき、例えとしてレゴ ブロックをよく使用します。選択、柔軟性、およびプラグイン機能のアイデアが気に入っています。言語、オペレーティング システム、展開方法、スタイルなどの選択はすべて重要です。

Docker サポートを追加する Visual Studio 2015 (この記事の執筆時点ではリリース候補) の拡張機能のプレビューがあります。 VS2015 RC をお持ちの場合は、ここから Docker 拡張機能を入手できます。確かにコマンド ラインから管理することもできますが、この投稿を読み進めるうちに、この拡張機能の便利さを理解していただけると思います。

<ブロック引用>

注: また、Docker 用の Windows クライアント コマンド ラインもあることに注意してください。 「choco install docker」を実行して、ここでそれについて読むことができます。

Docker とは何かについての簡単な説明

Docker に慣れていない場合は、ここで超基本を説明します。

  • 仮想マシン:仮想マシンとは何かをご存知でしょう。オペレーティング システム全体、コンピュータ全体が仮想化されています。実行したい 10 メガバイトのアプリがある場合、それを 10 ギガバイトの仮想マシンに入れて持ち運ぶことになるかもしれません。これにより、アプリは独自のプライベート VM に単独で存在するため、優れたセキュリティと分離が得られますが、少しやり過ぎです。 100 個のアプリをデプロイする必要があり、スペース、CPU、およびその他の考慮事項があります。 VM も起動が遅く、積極的に維持する必要があります。
  • Docker/Linux コンテナー (および Windows コンテナー「Docker for Windows Server」):Docker コンテナーは、同じ OS カーネルで実行されるサンドボックスです。簡単に導入でき、すぐに開始できます。同じカーネルで実行することの副作用として、コンテナーを使用すると、サポート ソフトウェアの 10 ギガバイト (例としての数) のほとんどを多くのアプリ間で共有できるため、分離が少なくなりますが、使用するリソースも大幅に少なくなります。コンテナーは高速で起動し、基盤となる共有リソースが維持され、最新の状態に保たれます。

Docker は、アプリをパッケージ化し、信頼性と再現性の高い方法でプッシュする方法でもあります。したがって、Docker はテクノロジーであると同時に、哲学でありプロセスでもあると言えます。

Docker と Visual Studio

Docker for Visual Studio 2015 拡張機能 (プレビュー) をインストールしたら、ASP.NET 5 アプリを作成します。プロジェクトを右クリックして [公開] をクリックします。

追加された Docker Containers セクションに注意してください。 PAAS (Platform as a Service) は引き続き利用でき、Azure 内の VM にも発行できます。 Docker を選択すると、ここに表示されます:

Docker をホストする新しい VM を作成します。この VM は、コンテナーのホストになります。今日は、Ubuntu LTS VM になります。ダイアログには、Docker、ポート、証明書などのすべての設定が含まれていることに注意してください。もちろん、既存の VM を使用することもできます。

VM がない場合は、最初の作成に時間がかかる (5 ~ 10 分以上) ため、しばらくお待ちください。すでにお持ちの場合、または作成したものの準備ができている場合は、先に進んでください。

Dockerfile オプションに特に注意してください。私のように Hello World 以外のことをしていると仮定すると、通常は手動で作成した独自の Dockerfile を選択することになります。

ASP.NET Dockerfile は GitHub:https://github.com/aspnet/aspnet-docker および Docker レジストリ:https://registry.hub.docker.com/u/microsoft/aspnet/

ビルド ウィンドウには、docker 関連の出力が多数表示されます。これは、フレーバーの省略バージョンです。

VERBOSE: Replacing tokens in Dockerfile: C:\Users\Scott\AppData\Local\Temp\PublishTemp\approot\src\WebApplication6\Properties\PublishProfiles\Dockerfile
VERBOSE: Package output path: C:\Users\Scott\AppData\Local\Temp\PublishTemp
VERBOSE: DockerHost: tcp://hanseldocker.cloudapp.net:2376
VERBOSE: DockerImageName: webapplication6
VERBOSE: DockerPublishHostPort: 80
VERBOSE: DockerPublishContainerPort: 80
VERBOSE: DockerAuthOptions: --tls
VERBOSE: DockerAppType: Web
VERBOSE: DockerBuildOnly: False
VERBOSE: DockerRemoveConflictingContainers: True
VERBOSE: LaunchSiteAfterPublish: True
VERBOSE: SiteUrlToLaunchAfterPublish:
VERBOSE: Querying for conflicting containers which has the same port mapped to the host...
Executing command [docker --tls -H tcp://hanseldocker.cloudapp.net:2376 ps -a | select-string -pattern ":80->" | foreach { Write-Output $_.ToString().split()[0] }]
VERBOSE: Building Docker image: webapplication6
Executing command [docker --tls -H tcp://hanseldocker.cloudapp.net:2376 build -t webapplication6 -f "C:\Users\Scott\AppData\Local\Temp\PublishTemp\approot\src\WebApplication6\Properties\PublishProfiles\Dockerfile" "C:\Users\Scott\AppData\Local\Temp\PublishTemp"]
VERBOSE: time="2015-05-27T10:59:06-07:00" level=warning msg="SECURITY WARNING: You are building a Docker image from Windows against a Linux Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories."
VERBOSE: Sending build context to Docker daemon 28.01 MB
VERBOSE: Step 0 : FROM microsoft/aspnet:vs-1.0.0-beta4
VERBOSE: vs-1.0.0-beta4: Pulling from microsoft/aspnet
VERBOSE: e5c30fef7918: Pulling fs layer
VERBOSE: e5c30fef7918: Pull complete
VERBOSE: e5c30fef7918: Already exists
VERBOSE: Digest: sha256:27fbe2377b5d4e66c4aaf3c984ef03d22afbfee3d4e78e10ff38cac7ff162d2e
VERBOSE: Status: Downloaded newer image for microsoft/aspnet:vs-1.0.0-beta4
VERBOSE: ---> e5c30fef7918
VERBOSE: Step 1 : ADD . /app
VERBOSE: ---> cf1f788321b3
VERBOSE: Removing intermediate container dd345cdcc5d9
VERBOSE: Step 2 : WORKDIR /app/approot/src/WebApplication6
VERBOSE: ---> Running in f22027140233
VERBOSE: ---> 7eabc0da4645
VERBOSE: Removing intermediate container f22027140233
VERBOSE: Step 3 : ENTRYPOINT dnx . Kestrel --server.urls http://localhost:80
VERBOSE: ---> Running in 4810324d32a5
VERBOSE: ---> e0a7ad38eb34
VERBOSE: Removing intermediate container 4810324d32a5
VERBOSE: Successfully built e0a7ad38eb34
The Docker image "webapplication6" was created successfully.
VERBOSE: Starting Docker container: webapplication6
Executing command [docker --tls -H tcp://hanseldocker.cloudapp.net:2376 run -t -d -p 80:80 webapplication6]
Docker container started with ID: 6d4820044df200e87f08cb5becbec879d1b58fcab73145ca3aa99a424c162054
To see standard output from your application, open a command line window and execute the following command:
docker --tls -H tcp://hanseldocker.cloudapp.net:2376 logs --follow 6d4820044df200e87f08cb5becbec879d1b58fcab73145ca3aa99a424c162054
VERBOSE: received -1-byte response of content type text/html; charset=utf-8
Executing command [Start-Process -FilePath "http://hanseldocker.cloudapp.net/"]
Publish completed successfully.

興味深い部分は、dnx (.NET 実行ホスト) への呼び出し、Windows で開始して Linux に移行するという警告、および "microsoft/aspnet" Docker イメージを使用しているという事実です。

私の例では、VS と拡張機能で証明書を作成しました。 Windows Docker コマンド ラインからこのインスタンスに接続する場合は、これらの証明書を渡すか、env var を設定する必要があります。ここでは、"ps" を実行して、この Azure Linux VM 内のリモート Docker コンテナーを確認しています。 Docker クライアントは %USERPROFILE%\.docker で証明書を検索するため、DOCKER_HOST を設定するか、このように渡すだけで済みます。

C:\>docker --tls -H=tcp://hanseldocker.cloudapp.net:2376 ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6d4820044df2 webapplication6:latest "dnx . Kestrel --ser 58 minutes ago Up 58 minutes 0.0.0.0:80->80/tcp silly_poincare

それはうまくいきました。また、Visual Studio プロジェクトの [プロパティ] の下に作成される PublishProfiles フォルダーも確認してください。 PowerShell スクリプトとシェル スクリプトがそのフォルダーに作成され、コマンド ラインからアプリを発行するために使用できます。例:

.\hanseldocker-Docker-publish.ps1 -packOutput $env:USERPROFILE\AppData\Local\Temp\PublishTemp -pubxmlFile .\hanseldocker-Docker.pubxml

または Linux から:

cd ProjectFolder (like WebApplication/src/WebApplication)
source dnvm.sh
dnu restore --no-cache
mkdir ~/Temp
dnu publish . --out ~/Temp/ --wwwroot-out "wwwroot" --quiet
cd Properties/PublishProfiles
chmod +x ./Docker-publish.sh
./Docker-publish.sh ./Docker.pubxml ~/Temp/

クロスプラットフォーム、クロスツールの選択肢に満ちた未来を楽しみにしています。最後に、「Docker for .NET Developers」という素晴らしい 7 部構成のビデオ シリーズがあり、チャンネル 9 でチェックしてください。

スポンサー: 今週のブログとフィードのスポンサーである Atalasoft に感謝します。あなたの会社がドキュメントを扱っている場合は、Web とモバイルの表示、キャプチャ、および変換のための Atalasoft の開発者ツールをぜひチェックしてください。無料試用版と優れたサポート チームも用意されています。


Docker
  1. ASP.NET Core Docker イメージ サイズの最適化

  2. Linux の Visual Basic .Net

  3. Visual Basic は Linux 上の .NET Core でサポートされていますか?

  1. LinuxでのVisualStudioCode(VSC)の使用を開始する

  2. Dockerチュートリアル–LinuxでのDocker入門

  3. LinuxサーバーにDockerを使用してNextcloudをインストールする方法

  1. LinuxにMicrosoftVisualStudioCodeをインストールする

  2. LinuxでDockerComposeを使い始める

  3. LinuxでDockerを使用してMySQLをセットアップする方法