GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Publikování aplikace ASP.NET 5 na Docker na Linuxu pomocí sady Visual Studio

Je to brzy, ale toto je pěkný náhled na možnosti věcí budoucích. LEGO kostky často používám jako analogii, když mluvím o softwarových systémech. Líbí se mi myšlenka výběru, flexibility a možnosti připojení. Důležitá je volba jazyka, operačního systému, způsobu nasazení a stylu atd.

K dispozici je náhled rozšíření pro Visual Studio 2015 (kandidát na vydání v době psaní tohoto článku), které přidává podporu Docker. Pokud máte VS2015 RC, můžete získat rozšíření Docker zde. Určitě můžete spravovat věci z příkazového řádku, ale myslím, že až budete procházet tímto příspěvkem, oceníte pohodlí tohoto rozšíření.

POZNÁMKA: Za zmínku také stojí, že pro Docker existuje také příkazový řádek klienta Windows. Můžete "choco install docker" a přečíst si o tom zde.

Stručné vysvětlení Dockeru

Pokud neznáte Docker, zde jsou super základy.

  • Virtuální stroje:Pravděpodobně víte, co je virtuální stroj. Je to celý operační systém, celý počítač, virtualizovaný. Pokud máte 10megabajtovou aplikaci, kterou chcete spustit, možná ji nakonec vložíte do 10gigabajtového virtuálního stroje a budete ji nosit. To poskytuje skvělé zabezpečení a izolaci, protože vaše aplikace je sama na svém soukromém virtuálním počítači, ale je to trochu přehnané. Nyní chcete nasadit 100 aplikací a máte prostor, procesor a další věci, na které musíte myslet. Virtuální počítače také začínají pomalu a musí být aktivně udržovány.
  • Kontejnery Docker/Linux (a kontejnery Windows "Docker for Windows Server"):Kontejnery Docker jsou karantény běžící na stejném jádře operačního systému. Snadno se nasazují a rychle startují. Vedlejším efektem běhu na stejném jádře vám kontejnery umožňují sdílet většinu z těchto 10 gigabajtů (jako příklad číslo) podpůrného softwaru mezi mnoha aplikacemi, čímž získáte menší izolaci, ale také mnohem méně zdrojů. Kontejnery startují rychle a základní sdílené zdroje jsou to, co je udržováno a aktualizováno.

Docker je také způsob, jak zabalit aplikaci a vytlačit ji spolehlivým a reprodukovatelným způsobem. Dá se tedy říci, že Docker je technologie, ale také filozofie a proces.

Docker a Visual Studio

Jakmile budete mít nainstalované rozšíření Docker for Visual Studio 2015 (preview), pokračujte a vytvořte aplikaci ASP.NET 5. Klikněte pravým tlačítkem na projekt a klikněte na Publikovat.

Všimněte si sekce Docker Containers, která byla přidána? Stále máte PAAS (Platform as a Service) a můžete také publikovat na virtuálních počítačích v rámci Azure. Vyberte Docker a budete zde:

Vytvoříme nový VM, který bude hostovat naše věci Docker. Tento virtuální počítač bude hostitelem našich kontejnerů. Dnes to bude Ubuntu LTS VM. Všimněte si, že dialogové okno obsahuje všechna nastavení pro Docker, porty, certifikáty atd. Samozřejmě bych mohl použít stávající virtuální počítače.

Pokud nemáte VM, počáteční vytvoření chvíli trvá (5-10 minut nebo více), takže se vraťte. Pokud již jeden máte nebo je ten, který jste vytvořili, připraven, pokračujte.

Zvláště si poznamenejte možnost Dockerfile. Obvykle si budete chtít vybrat svůj vlastní ručně vytvořený soubor Dockerfile za předpokladu, že děláte víc než jen Hello World, jako jsem já.

ASP.NET Dockerfile je na GitHubu:https://github.com/aspnet/aspnet-docker a v registru Docker:https://registry.hub.docker.com/u/microsoft/aspnet/

V okně sestavení uvidíte spoustu výstupů souvisejících s dockerem. Zde je odstřižená verze pro chuť.

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.

Zajímavými částmi jsou volání dnx (hostitel .NET Execution), upozornění, že jsem začal na Windows a jdu na Linux, a také to, že používáme docker image „microsoft/aspnet“.

V mém příkladu jsem měl VS a rozšíření, aby mé certifikáty. Pokud se chci k této instanci připojit z příkazového řádku Windows Docker, musím buď předat tyto certifikáty, nebo nastavit env var. Zde spouštím "ps", abych viděl vzdálené kontejnery dockeru v tomto virtuálním počítači Azure Linux. Klient Docker hledá certifikáty v %USERPROFILE%\.docker, takže stačí nastavit DOCKER_HOST nebo jej předat takto.

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

Fungovalo to skvěle. Nezapomeňte také prozkoumat složku PublishProfiles, která se vytvoří v projektu sady Visual Studio v části Vlastnosti. V této složce se vytvoří skript PowerShell a skript prostředí, které můžete použít k publikování aplikace z příkazového řádku. Například:

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

nebo z Linuxu:

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/

Těším se na budoucnost plnou možností výběru mezi různými platformami. Konečně je tu skvělá 7dílná videosérie s názvem „Docker for .NET Developers“, kterou byste si měli prohlédnout na kanálu 9.

Sponzor: Velké díky Atalasoftu za sponzorování blogu a feedu tento týden! Pokud vaše společnost pracuje s dokumenty, rozhodně se podívejte na vývojářské nástroje Atalasoftu pro webové a mobilní prohlížení, snímání a transformaci. Mají bezplatné zkušební verze a také pozoruhodný tým podpory.


Docker
  1. Jak nainstalovat Nextcloud s Dockerem na váš Linux Server

  2. Optimalizace velikostí obrazu ASP.NET Core Docker

  3. Visual Basic .Net v Linuxu

  1. Začínáme s Visual Studio Code (VSC) v systému Linux

  2. Docker Tutorial – Začínáme s Dockerem v Linuxu

  3. Podporuje .NET Core v Linuxu Visual Basic?

  1. Nainstalujte kód Microsoft Visual Studio v systému Linux

  2. Začínáme s Docker Compose v Linuxu

  3. Jak nastavit MySQL pomocí Dockeru v Linuxu