GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

Veröffentlichen einer ASP.NET 5-App in Docker unter Linux mit Visual Studio

Es ist noch am Anfang, aber dies ist eine schöne Vorschau auf die Möglichkeiten der Zukunft. Ich verwende LEGO-Steine ​​oft als Analogie, wenn ich über Softwaresysteme spreche. Ich mag die Idee der Auswahl, Flexibilität und Plug-Fähigkeit. Die Auswahl Ihrer Sprache, Ihres Betriebssystems, Ihrer Bereitstellungsmethode und Ihres Stils usw. sind alle wichtig.

Es gibt eine Vorschau einer Erweiterung für Visual Studio 2015 (der Veröffentlichungskandidat zum Zeitpunkt des Schreibens dieses Artikels), die Docker-Unterstützung hinzufügt. Wenn Sie VS2015 RC haben, können Sie die Docker-Erweiterung hier herunterladen. Sie können die Dinge sicherlich über die Befehlszeile verwalten, aber ich denke, wenn Sie diesen Beitrag lesen, werden Sie die Bequemlichkeit dieser Erweiterung zu schätzen wissen.

HINWEIS: Es ist auch erwähnenswert, dass es auch eine Windows-Client-Befehlszeile für Docker gibt. Sie können "choco install docker" installieren und hier darüber lesen.

Die kurze Erklärung von Docker

Wenn Sie mit Docker nicht vertraut sind, finden Sie hier die Supergrundlagen.

  • Virtuelle Maschinen:Sie wissen wahrscheinlich, was eine virtuelle Maschine ist. Es ist das ganze Betriebssystem, der ganze Computer, virtualisiert. Wenn Sie eine 10-Megabyte-App haben, die Sie ausführen möchten, müssen Sie sie möglicherweise in eine virtuelle 10-Gigabyte-Maschine stecken und mit sich herumtragen. Das bietet große Sicherheit und Isolation, da Ihre App ganz allein auf ihrer eigenen privaten VM ist, aber es ist ein wenig übertrieben. Jetzt möchten Sie 100 Apps bereitstellen und haben Platz, CPU und andere Dinge, über die Sie nachdenken müssen. Auch VMs starten langsam und müssen aktiv gewartet werden.
  • Docker/Linux-Container (und Windows-Container „Docker für Windows Server“):Docker-Container sind Sandboxes, die auf demselben Betriebssystemkernel ausgeführt werden. Sie sind einfach zu implementieren und starten schnell. Als Nebeneffekt der Ausführung auf demselben Kernel können Sie mit Containern den größten Teil dieser 10 Gigabyte (als Beispiel) an Support-Software zwischen vielen Apps teilen, wodurch Sie weniger Isolation erhalten, aber auch VIEL weniger Ressourcen verbrauchen. Container starten schnell und die zugrunde liegenden gemeinsam genutzten Ressourcen werden gewartet und auf dem neuesten Stand gehalten.

Docker ist auch eine Möglichkeit, eine App zu verpacken und auf zuverlässige und reproduzierbare Weise zu verteilen. Man kann also sagen, Docker ist eine Technologie, aber auch eine Philosophie und ein Prozess.

Docker und Visual Studio

Sobald Sie die Docker für Visual Studio 2015-Erweiterung (Vorschauversion) installiert haben, können Sie fortfahren und eine ASP.NET 5-App erstellen. Klicken Sie mit der rechten Maustaste auf das Projekt und klicken Sie auf „Veröffentlichen“.

Beachten Sie den Abschnitt Docker-Container, der hinzugefügt wurde? Sie haben immer noch PAAS (Platform as a Service) und können auch innerhalb von Azure auf VMs veröffentlichen. Wählen Sie Docker und Sie werden hier sein:

Wir werden eine neue VM erstellen, um unsere Docker-Sachen zu hosten. Diese VM muss der Host für unsere Container sein. Heute wird es eine Ubuntu LTS VM sein. Beachten Sie, dass der Dialog das gesamte Setup für Docker, Ports, Zertifikate usw. enthält. Ich könnte natürlich vorhandene VMs verwenden.

Wenn Sie keine VM haben, dauert die anfängliche Erstellung eine Weile (5-10 Minuten oder länger), also bleiben Sie zurück. Wenn Sie bereits einen haben oder der von Ihnen erstellte fertig ist, dann marschieren Sie weiter.

Beachten Sie besonders die Dockerfile-Option. Normalerweise möchten Sie Ihr eigenes manuell erstelltes Dockerfile auswählen, vorausgesetzt, Sie machen mehr als nur ein Hello World wie ich.

Die ASP.NET-Dockerdatei ist auf GitHub verfügbar:https://github.com/aspnet/aspnet-docker und in der Docker-Registrierung:https://registry.hub.docker.com/u/microsoft/aspnet/

Im Build-Fenster sehen Sie viele Docker-bezogene Ausgaben. Hier ist eine geschnippelte Version für den Geschmack.

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.

Die interessanten Teile sind die Aufrufe von dnx (dem .NET-Ausführungshost), die Warnung, dass ich unter Windows gestartet habe und zu Linux wechsele, sowie die Tatsache, dass wir das Docker-Image „microsoft/aspnet“ verwenden.

In meinem Beispiel hatte ich VS und die Erweiterung meine Zertifikate erstellen lassen. Wenn ich über die Windows Docker-Befehlszeile eine Verbindung zu dieser Instanz herstellen möchte, muss ich entweder diese Zertifikate übergeben oder eine env var festlegen. Hier führe ich „ps“ aus, um die Remote-Docker-Container in dieser Azure-Linux-VM anzuzeigen. Der Docker-Client sucht in %USERPROFILE%\.docker nach Zertifikaten. Sie müssen also nur DOCKER_HOST festlegen oder so übergeben.

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

Es hat super funktioniert. Stellen Sie außerdem sicher, dass Sie den Ordner „PublishProfiles“ durchsuchen, der in Ihrem Visual Studio-Projekt unter „Eigenschaften“ erstellt wird. In diesem Ordner werden ein PowerShell-Skript und ein Shell-Skript erstellt, mit denen Sie Ihre App über die Befehlszeile veröffentlichen können. Zum Beispiel:

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

oder unter 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/

Ich freue mich auf eine plattformübergreifende, werkzeugübergreifende Zukunft voller Auswahlmöglichkeiten. Schließlich gibt es hier eine großartige 7-teilige Videoserie mit dem Titel „Docker für .NET-Entwickler“, die Sie sich auf Channel 9 ansehen sollten.

Sponsor: Ein großes Dankeschön an Atalasoft für das Sponsoring des Blogs und des Feeds in dieser Woche! Wenn Ihr Unternehmen mit Dokumenten arbeitet, sehen Sie sich auf jeden Fall die Entwicklertools von Atalasoft für die Anzeige, Erfassung und Transformation im Web und auf Mobilgeräten an. Sie haben auch kostenlose Testversionen und ein bemerkenswertes Support-Team.


Docker
  1. Erste Schritte mit Visual Studio Code (VSC) unter Linux

  2. So installieren Sie Nextcloud mit Docker auf Ihrem Linux-Server

  3. Optimieren der Größen von ASP.NET Core Docker-Images

  4. Visual Basic .Net unter Linux

  5. Wird Visual Basic von .NET Core unter Linux unterstützt?

ZEIT jetzt Bereitstellungen von Open-Source-ASP.NET-Core-Web-Apps mit Docker

Erkunden von ASP.NET Core mit Docker in Linux- und Windows-Containern

Offizieller Support für das Remotedebuggen einer .NET Core-Linux-App in WSL2 von Visual Studio unter Windows

Verschieben eines ASP.NET Core von Azure App Service unter Windows zu Linux, indem zuerst in WSL und Docker getestet wird

Remotedebuggen einer .NET Core-Linux-App in WSL2 von Visual Studio unter Windows

Veröffentlichen einer ASP.NET Core-Website auf einem günstigen Linux-VM-Host