GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Publication d'une application ASP.NET 5 sur Docker sous Linux avec Visual Studio

C'est le début, mais c'est un bel aperçu des possibilités des choses à venir. J'utilise souvent des briques LEGO à titre d'analogie lorsque je parle de systèmes logiciels. J'aime l'idée de choix, de flexibilité et de capacité de connexion. Le choix de votre langue, de votre système d'exploitation, de la méthode et du style de déploiement, etc. est important.

Il existe un aperçu d'une extension pour Visual Studio 2015 (la version candidate au moment de la rédaction de cet article) qui ajoute la prise en charge de Docker. Si vous avez VS2015 RC, vous pouvez obtenir l'extension Docker ici. Vous pouvez certainement gérer les choses à partir de la ligne de commande, mais je pense qu'en parcourant cet article, vous apprécierez la commodité de cette extension.

REMARQUE : Il convient également de souligner qu'il existe également une ligne de commande client Windows pour Docker. Vous pouvez "choco installer docker" et en savoir plus ici.

La brève explication de Qu'est-ce que Docker

Si vous n'êtes pas familier avec Docker, voici les super bases.

  • Machines virtuelles :vous savez probablement ce qu'est une machine virtuelle. C'est tout le système d'exploitation, tout l'ordinateur, virtualisé. Si vous souhaitez exécuter une application de 10 mégaoctets, vous risquez de la placer dans une machine virtuelle de 10 gigaoctets et de la transporter. Cela donne une grande sécurité et isolation car votre application est toute seule sur sa propre machine virtuelle privée, mais c'est un peu exagéré. Maintenant, vous voulez déployer 100 applications, et vous avez de l'espace, du processeur et d'autres choses auxquelles penser. Les machines virtuelles démarrent également lentement et doivent être activement entretenues.
  • Conteneurs Docker/Linux (et conteneurs Windows "Docker pour Windows Server") :les conteneurs Docker sont des bacs à sable s'exécutant sur le même noyau de système d'exploitation. Ils sont faciles à déployer et démarrent rapidement. En tant qu'effet secondaire de l'exécution sur le même noyau, les conteneurs vous permettent de partager la plupart de ces 10 gigaoctets (à titre d'exemple) de logiciels de support entre de nombreuses applications, ce qui vous donne moins d'isolement mais utilise également BEAUCOUP moins de ressources. Les conteneurs démarrent rapidement et les ressources partagées sous-jacentes sont celles qui sont maintenues et mises à jour.

Docker est également un moyen de regrouper une application et de la diffuser de manière fiable et reproductible. On peut donc dire que Docker est une technologie, mais aussi une philosophie et un processus.

Docker et Visual Studio

Une fois que vous avez installé l'extension Docker pour Visual Studio 2015 (préversion), continuez et créez une application ASP.NET 5. Faites un clic droit sur le projet et cliquez sur Publier.

Notez la section Docker Containers qui a été ajoutée ? Vous avez toujours PAAS (Platform as a Service) et pouvez également publier sur des machines virtuelles dans Azure. Sélectionnez Docker et vous serez ici :

Nous allons créer une nouvelle machine virtuelle pour héberger nos éléments Docker. Cette VM devra être l'hôte de nos conteneurs. Aujourd'hui, ce sera une machine virtuelle Ubuntu LTS. Notez que la boîte de dialogue inclut toute la configuration de Docker, des ports, des certificats, etc. Je pourrais bien sûr utiliser des machines virtuelles existantes.

Si vous n'avez pas de machine virtuelle, la création initiale prend un certain temps (5 à 10 minutes ou plus), alors attendez. Si vous en avez déjà un, ou si celui que vous avez créé est prêt, alors continuez.

Faites particulièrement attention à l'option Dockerfile. Vous voudrez généralement sélectionner votre propre Dockerfile créé manuellement, en supposant que vous faites plus qu'un simple Hello World comme moi.

Le Dockerfile ASP.NET est disponible sur GitHub :https://github.com/aspnet/aspnet-docker et dans le registre Docker :https://registry.hub.docker.com/u/microsoft/aspnet/

Dans la fenêtre de construction, vous verrez de nombreuses sorties liées à Docker. Voici une version coupée pour la saveur.

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.

Les parties intéressantes sont les appels à dnx (l'hôte d'exécution .NET), l'avertissement que j'ai lancé sous Windows et que je vais sous Linux, ainsi que le fait que nous utilisons l'image docker "microsoft/aspnet".

Dans mon exemple, j'ai eu VS et l'extension font mes certificats. Si je veux me connecter à cette instance à partir de la ligne de commande Windows Docker, je dois soit transmettre ces certificats, soit définir un env var. Ici, j'exécute "ps" pour voir les conteneurs Docker distants dans cette machine virtuelle Azure Linux. Le client Docker recherche les certificats dans %USERPROFILE%\.docker. Il vous suffit donc de définir DOCKER_HOST ou de le transmettre comme ceci.

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

Cela a très bien fonctionné. Assurez-vous également d'explorer le dossier PublishProfiles qui est créé dans votre projet Visual Studio sous "Propriétés". Un script PowerShell et un script Shell sont créés dans ce dossier que vous pouvez utiliser pour publier votre application à partir de la ligne de commande. Par exemple :

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

ou depuis 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/

J'attends avec impatience un avenir rempli de choix multi-plateformes et multi-outils. Enfin, il existe une excellente série de vidéos en 7 parties intitulée "Docker pour les développeurs .NET" que vous devriez consulter sur Channel 9.

Parrain : Un grand merci à Atalasoft pour le parrainage du blog et du flux cette semaine ! Si votre entreprise travaille avec des documents, consultez les outils de développement d'Atalasoft pour la visualisation, la capture et la transformation Web et mobile. Ils proposent également des essais gratuits et une équipe d'assistance remarquable.


Docker
  1. Premiers pas avec Visual Studio Code (VSC) sous Linux

  2. Comment installer Nextcloud avec Docker sur votre serveur Linux

  3. Optimisation des tailles d'image Docker ASP.NET Core

  4. Visual Basic .Net sous Linux

  5. Visual Basic est-il pris en charge par .NET Core sous Linux ?

ZEIT déploie désormais des applications Web open source ASP.NET Core avec Docker

Explorer ASP.NET Core avec Docker dans les conteneurs Linux et Windows

Prise en charge officielle du débogage à distance d'une application .NET Core Linux dans WSL2 à partir de Visual Studio sous Windows

Déplacement d'un ASP.NET Core d'Azure App Service sur Windows vers Linux en testant d'abord dans WSL et Docker

Débogage à distance d'une application .NET Core Linux dans WSL2 à partir de Visual Studio sous Windows

Publication d'un site Web ASP.NET Core sur un hôte de machine virtuelle Linux bon marché