Kontejnery Windows serverů. Stručný úvod do kontejnerů Windows

Je to hotové! Pomohly buď modlitby, nebo oběti, ale nyní můžete spouštět kontejnery Docker s Windows uvnitř. Skvělá zpráva přišla s vydáním Windows Server 2016. A to nemluvíme o nějakém chytře skrytém virtuálním stroji nebo emulaci Windows na linuxovém jádře – skutečné Windows běží ve skutečném Dockeru, se spuštěným Dockerfile, docker-compose a dalším Dockerem věci .

Omezení

To ale neznamená, že nyní můžete spustit jakýkoli kontejner kdekoli. Vzhledem k tomu, že kontejnery Docker „vytlačují“ jádro operační systém ze svého hostitele (jinak by museli mít vlastní OS a proměnit se ve virtuální stroj), Kontejnery Windows lze spustit pouze na nejnovější aktualizaci Windows 10 Pro Anniversary Update a Windows Server 2016.

Druhým bodem je, že stále není možné spustit nativní linuxový kontejner na Windows. Anniversary Update má svůj vlastní linuxový subsystém (se kterým můžete spustit například skutečný Bash), ale neobstojí ani v plnohodnotném linuxovém jádru, takže stejný kontejner s Ubuntu na Windows stále potřebuje skrytý virtuální stroj.

Konečně můžete na počítači s Windows spustit oba kontejnery současně, ale s určitými obtížemi. Pokud tento příkaz spustíte na Windows Server 2016 s nainstalovaným Dockerem (před rokem bych to nazval čarodějnictví), bude fungovat:

Ale pokud se po tomto příkazu pokusíte spustit kontejner Ubuntu, Docker bude smutný:

Problém je v tom, že kontejnery Windows a Linux obsluhují různí démoni Docker, kteří však ke komunikaci s příkazovým řádkem používají stejný kanál. To znamená, že v daném okamžiku může být aktivní pouze jeden démon. Na oficiálních stránkách Dockeru je beta „Docker for Windows“, která se snaží problém vyřešit (zatím pouze na Windows 10 Pro a Enterprise). Ale i s tím, abyste přešli z kontejnerů Windows na Linux, musíte buď přejít do nabídky nastavení, nebo komunikovat s příkazovým řádkem:

PowerShell

& "C:\Program Files\Docker\Docker\DockerCli.exe" -SwitchDaemon

& "C:\Program Files\Docker\Docker\DockerCli.exe"-SwitchDaemon

Obrázky systému Windows

Zatím existují pouze dva základní obrázky s kontejnerizovanými Windows:

Nemůžete si vytvořit svůj vlastní základní obrázek (scratch image).

Obraz Windows Server Core váží i 10 gigabajtů a obecně se chová jako plnohodnotný Windows Server 2016. Bez problémů se tam nainstaluje například MS SQL a plnohodnotné .NET Framework. Pokud vaše aplikace příliš nezávisí na uživatelském rozhraní, bude nainstalována.

Nano Server je o něco zajímavější. Je to vysoce optimalizovaný a zkrácený Windows Server, který váží méně než jeden koncert. Existuje ale také dostatek omezení: žádné 32bitové aplikace, uživatelské rozhraní, RDP, nasekané PowerShell atd. To vám však nebrání v instalaci stejného IIS, .NET Core a dokonce i některých MySQL na Nano Server.

A kdo by si před pár lety dokázal představit, že v Dockerfile můžete najednou najít „Microsoft“, „Windows“ a „PowerShell“?

Z microsoft/windowsservercore RUN powershell -Command....

OD microsoft/windowsservercore

RUN powershell - Command . . . .

Jsou to Windows v Dockeru! Pořád to zní absurdně.

Stupně izolace

Kontejnery Windows lze spouštět ve dvou režimech izolace:

  • Kontejnery Windows Server
  • Hyper-V kontejnery

V prvním režimu Windows se kontejnery chovají stejně jako všechny ostatní kontejnery v Dockeru: sdílejí společné jádro s operačním systémem, kontejnerové procesy jsou izolované, ale stále viditelné ve stromu hostitelského procesu atd. Toto je výchozí a nejrychlejší způsob spustit kontejner v systému Windows.

Ve druhém případě kontejnery spadají do speciálního virtuálního stroje Hyper-V. To má samozřejmě špatný vliv na rychlost spouštění, ale izolace je kompletní.

Závěr

Windows na Dockeru je skvělá zpráva. I když nespěcháte s balením svých produktů do kontejnerů, je to skvělý nástroj pro izolaci vašich jednotkových testů, produkčních strojů, demo serverů, sandboxů – všeho, pro co jste dříve museli vytvořit virtuální stroj. Pokud se Microsoftu ještě podaří spustit nanoserver na Linuxu, pak jim odpustím nedávné ukončení Microsoft Band 2, který jsem si neprozřetelně koupil dva měsíce předtím.

Kontejnery v Microsoft Windows Server 2016 jsou rozšířením možností této technologie pro zákazníky. Microsoft plánuje zákaznický vývoj, nasazení a nyní hostování aplikací v kontejnerech jako součást svých vývojových procesů.

Vzhledem k tomu, že tempo nasazování aplikací se neustále zrychluje a zákazníci používají nasazení verzí aplikací denně nebo dokonce každou hodinu, je schopnost rychle nasazovat aplikace ověřené z klávesnice vývojáře do produkčního prostředí zásadní pro obchodní úspěch. Tento proces urychlují kontejnery.

Zatímco virtuální stroje mají funkci migrace aplikací v datových centrech a do cloudu i mimo něj, virtualizační zdroje jsou dále odemykány kontejnery pomocí virtualizace OS (System Software). Toto řešení díky virtualizaci umožní rychlé dodání aplikací.

Technologie Windows Container zahrnuje dva různé typy kontejnerů, Windows Server Container a Hyper-V Container. Oba typy kontejnerů se vytvářejí, spravují a fungují identicky. Dokonce vyrábějí a konzumují stejný obrázek kontejneru. Liší se od sebe úrovní izolace vytvořené mezi kontejnerem, hostitelským operačním systémem a všemi ostatními kontejnery běžícími na hostiteli.

Kontejnery Windows Server: Na hostiteli může současně běžet více instancí kontejneru s izolací poskytovanou prostřednictvím jmenného prostoru, správy zdrojů a technologií izolace procesů. Kontejnery Windows Server mají stejné jádro umístěné na hostiteli.

Hyper-V kontejnery: Na hostiteli může současně běžet více instancí kontejneru. Každý kontejner je však implementován uvnitř vyhrazeného virtuálního stroje. To zajišťuje izolaci na úrovni jádra mezi každým kontejnerem Hyper-V a hostitelským kontejnerem.

Společnost Microsoft zahrnula do funkce kontejneru sadu nástrojů Docker pro správu nejen linuxových kontejnerů, ale také kontejnerů Windows Server a Hyper-V. V rámci spolupráce v komunitách Linux a Windows byla zkušenost s Dockerem rozšířena vytvořením modulu PowerShell pro Docker, který je nyní open source pro. Modul PowerShell může spravovat kontejnery Linux a Windows Sever lokálně nebo vzdáleně pomocí technologie Docker REST API. Vývojáři jsou spokojeni s inovacemi pro zákazníky pomocí open source kódu k vývoji naší platformy. V budoucnu plánujeme přinášet našim zákazníkům technologie spolu s inovacemi, jako je Hyper-V.

Kupte si Windows Server 2016

Nabízíme vám ke koupi Windows Server 2016 se slevou od oficiálního partnera společnosti Microsoft v Rusku – společnosti DATASYSTEMS. Budete mít možnost získat radu a také si zdarma stáhnout Windows Server 2016 k otestování kontaktováním našich specialistů technické podpory. Cena Windows Server 2016 na vyžádání. Komerční nabídku na účast na nákupu Windows Server 2016 můžete obdržet na vyžádání e-mailem:

V dnešním Zeptejte se administrátora Ukážu vám, jak nasadit obrázek do kontejneru v systému Windows Server 2016, vytvořit nový obrázek a nahrát jej do Dockeru.

Jednou z hlavních nových funkcí ve Windows Server 2016 je podpora pro kontejnery a Docker. Kontejnery poskytují lehké a flexibilní možnosti virtualizace, které mohou vývojáři použít k rychlému nasazení a aktualizaci aplikací bez režie virtuálních strojů. A ve spojení s Dockerem, řešením pro správu kontejnerů, technologie kontejnerů za posledních několik let explodovala.

Toto je aktualizovaný článek s informacemi, které byly dříve zahrnuty v tématu Nasazení a správa kontejnerů Windows Server pomocí Dockeru, který byl aktuální k Windows Server 2016 Technical Preview 3. Další informace o Dockeru najdete v tématu Co je Docker? a Jsou kontejnery Docker lepší než virtuální stroje? na Petriho technická znalostní báze IT.

Chcete-li postupovat podle pokynů v tomto článku, budete potřebovat přístup k fyzickému nebo virtuálnímu serveru se systémem Windows Server 2016. Můžete si stáhnout zkušební kopii z webu společnosti Microsoft nebo nastavit virtuální počítač v Microsoft Azure. Dále budete potřebovat bezplatné Docker ID, které získáte registrací.

Nainstalujte Docker Engine

Prvním krokem je instalace podpory Docker na Windows Server 2016.

  • Přihlaste se k systému Windows Server.
  • Klikněte Vyhledávání ikonu a typ na hlavním panelu PowerShell v okně vyhledávání.
  • Klikněte pravým tlačítkem myši Windows PowerShell ve výsledcích vyhledávání a vyberte Spustit jako administrátor z nabídky.
  • Po zobrazení výzvy zadejte přihlašovací údaje správce.

Chcete-li nainstalovat Docker na Windows Server, spusťte následující rutinu PowerShell. Budete vyzváni k instalaci NuGet, který stáhne modul Docker PowerShell z důvěryhodného online úložiště.

Install-Module -Name DockerMsftProvider -Force

Nyní použijte Instalační balíček cmdlet pro instalaci modulu Docker na Windows Server. Vezměte prosím na vědomí, že na konci procesu je vyžadován restart.

Install-Package -Name docker -ProviderName DockerMsftProvider -Force Restart-Computer -Force

Po restartování serveru spusťte dotaz PowerShell znovu a zajistěte, aby byl Docker nainstalován spuštěním následujícího příkazu:

Docker verze

Stáhněte si obrázek z Dockeru a spusťte proces kontejneru

Nyní, když je nainstalován modul Docker, stáhněte si výchozí bitovou kopii Windows Server Core z Dockeru:

Docker pull microsoft/windowsServerCore

Nyní, když je obrázek nahrán na místní server, spusťte proces kontejneru pomocí běžící docker:

Docker spusťte Microsoft /windowsServerCore

Vytvořte nový obrázek

Nyní můžeme vytvořit nový obraz pomocí dříve staženého obrazu Windows Server jako výchozího bodu. Před spuštěním budete potřebovat Docker ID. Pokud jej ještě nemáte, zaregistrujte si účet Docker.

sponzoři

Obrazy Dockeru se obvykle vytvářejí z receptur souborů Docker, ale pro účely ukázky spustíme příkaz na staženém obrazu, vytvoříme nový obraz na základě změny a poté jej stáhneme do Dockeru, aby byl přístupný z cloudu.

Vezměte prosím na vědomí, že v příkazovém řádku níže -t Parametr udává značku obrázku, která vám umožní snadno identifikovat obrázek. Zvláštní pozornost věnujte také pomlčce, která se objeví za názvem značky.

"OD Microsoft /windowsservercore `n CMD echo Hello World!" | sestavení dockeru -t mydockerid /windows-test-image -

Poté, co Docker dokončí vytváření nového obrázku, zkontrolujte seznam dostupných obrázků na místním serveru. Měli byste vidět obojí Microsoft/windowsServerCore A mydockerid/windows-test-images na seznamu.

obrázek dockeru

Nyní začněte v kontejneru nový obrázek a nezapomeňte jej nahradit mydockerid s názvem vašeho Docker ID a měli byste vidět Ahoj světe! Na výstupu se objeví:

Docker spouští mydockerid /windows-test-images

Nahrajte obrázek do Dockeru

Nahrajte obrázek, který jsme právě vytvořili, do Dockeru, aby byl přístupný z cloudu. Přihlaste se pomocí svého Docker ID a hesla:

Přihlaste se do docker -u mydockerid -p mojeheslo

používání docker push k načtení obrázku, který jsme vytvořili v předchozích krocích nahrazením mydockerid s názvem vašeho Docker ID:

Docker push mydockerid /windows-test-images

Jak zabalit aplikaci do kontejneru Docker?

Mám aplikaci napsanou v NodeJS. Jak jej mohu zabalit do obrazu Docker, aby se spustil jako kontejner?

Docker je systém pro správu kontejnerů pro operační systémy kompatibilní s POSIX (aktuálně podporované Linuxem). Zvláštností Dockeru je možnost zabalit aplikaci s veškerým potřebným prostředím tak, aby ji bylo možné spustit na jiném systému bez dlouhých a složitých procedur pro instalaci závislostí nebo budování ze zdrojů. Zabalená aplikace připravená k nasazení se nazývá „image“. Obrázky Dockeru jsou založeny na "šablonách" - předkonfigurovaných pracovních prostředích. Můžete si je představit jako distribuce operačního systému, i když to není tak úplně pravda. Můžete si také vytvořit vlastní šablonu prostudováním dokumentace Dockeru. Výhodou tohoto přístupu je, že obraz vaší aplikace bude obsahovat pouze aplikaci samotnou a prostředí pro ni potřebné se automaticky stáhne z úložiště šablon. Docker lehce připomíná chroot nebo bsd jail, ale funguje jinak.

Je důležité rozlišovat mezi pojmy „kontejner“ a „obrázek“. Kontejner je spuštěná kopie vaší aplikace a obrázek je soubor, ve kterém je aplikace uložena a ze kterého je kontejner vytvořen.

Řekněme, že máte aplikaci NodeJS, kterou chcete kontejnerizovat. Předpokládejme, že soubor, který spouští vaši aplikaci, se jmenuje server.js a aplikace naslouchá, aby fungovala na portu 8000. Jako šablonu použijeme „node:carbon“. Chcete-li aplikaci kontejnerizovat, musíte v adresáři, kde jsou umístěny soubory vaší aplikace, vytvořit soubor „Dockerfile“, který bude popisovat parametry přípravy obrazu:

$ klepněte na Dockerfile

Obsah souboru může být něco takového:

# Určete šablonu pro použití FROM node:carbon # Vytvořte pracovní adresář aplikace uvnitř kontejneru WORKDIR /usr/src/app # Nainstalujte závislosti aplikace pomocí npm # Zkopírují se soubory package.json i package-lock.json, pokud jsou k dispozici KOPÍROVAT package*.json ./ RUN npm install # Zkopírujte soubory aplikace do obrazu COPY . . # Otevřete port 8000, aby byl přístupný zvenčí kontejneru EXPOSE 8000 # Proveďte příkaz ke spuštění aplikace uvnitř kontejneru CMD [ "npm", "start" ]

Chcete-li z obrázku vyloučit nepotřebné soubory, můžete uvést jejich názvy v souboru „.dockerignore“. Můžete použít masku (*.log).

Obrázek se vytvoří pomocí následujícího příkazu:

$ docker build -t username/node-web-app .

$ docker images # Příklad ID TAGU REPOSITORY CREATED node carbon 1934b0b038d1 před 5 dny uživatelské jméno/node-web-app nejnovější d64d3505b0d2 před 1 minutou

Kontejner se spouští z obrázku pomocí následujícího příkazu:

$ docker run -p 49160:8000 -d uživatelské jméno/uzel-web-app

Tento příklad vytvoří kontejner z obrázku „username/node-web-app“ a okamžitě jej spustí. Port aplikace 8000 je dostupný na lokálním počítači (localhost) a aby byl přístupný „venku“, je „přesměrován“ na port 49160. Můžete si vybrat libovolný volný port, navíc je možné aplikaci přesměrovat port „tak jak je“ zadáním volby „ -p 8000:8000“.

Zadáním příkazu zjistíte, že váš kontejner běží:

$ docker ps # Příklad ID IMAGE COMMAND ... PORTS ecce33b30ebf uživatelské jméno/uzel-web-app: nejnovější npm start ... 49160->8000

Kontejner lze spravovat pomocí různých příkazů zadáním ID tohoto kontejneru:

$ docker pause ecce33b30ebf - pozastavení kontejneru s ID ecce33b30ebf
$ docker obnovit ecce33b30ebf - obnovit kontejner s ID ecce33b30ebf
$ docker stop ecce33b30ebf - stop kontejner s ID ecce33b30ebf
$ docker rm ecce33b30ebf - smazat kontejner (toto smaže všechna data vytvořená aplikací uvnitř kontejneru)

V březnu 2013 Soloman Hikes oznámil zahájení projektu s otevřeným zdrojovým kódem, který se později stal známým jako Docker. V následujících měsících získal silnou podporu od linuxové komunity a na podzim 2014 Microsoft oznámil plány na implementaci kontejnerů ve Windows Server 2016. Společnost WinDocks, kterou jsem spoluzaložil, vydala nezávislou verzi open source Docker pro Windows na začátku roku 2016 se zaměřením na prvotřídní podporu kontejnerů v SQL Server. Kontejnery se rychle stávají středem pozornosti v průmyslu. V tomto článku se podíváme na kontejnery a jejich použití vývojáři SQL Serveru a správci databází

Principy organizace kontejnerů

Kontejnery definují nová metoda balení aplikací v kombinaci s izolací uživatelů a procesů pro aplikace s více nájemci. Různé implementace kontejnerů pro Linux a Windows existují již mnoho let, ale s vydáním Windows Server 2016 máme de facto standard Docker. Dnes jsou Docker API a formát kontejneru podporovány na veřejně dostupných AWS, Azure, Google Cloud, všech distribucích Linuxu a Windows. Elegantní struktura Dockeru má důležité výhody.

  • Přenosnost. Kontejnery obsahují závislosti aplikačního softwaru a běží beze změny na vývojářském notebooku, sdíleném testovacím serveru a jakékoli veřejné službě.
  • Kontejnerový ekosystém. Docker API je domovem průmyslových inovací s řešeními pro monitorování, protokolování, ukládání dat, orchestraci clusterů a správu.
  • Kompatibilní s veřejnými službami. Kontejnery jsou navrženy pro architektury mikroslužeb, škálování a pomíjivé úlohy. Kontejnery jsou navrženy tak, aby je bylo možné v případě potřeby odstranit a vyměnit, nikoli opravovat nebo upgradovat.
  • Rychlost a úspora. Vytvoření kontejnerů trvá několik sekund; je poskytována účinná podpora pro vícenásobné předplatné. Pro většinu uživatelů se počet virtuálních strojů sníží třikrát až pětkrát (obrázek 1).

SQL Server kontejnery

SQL Server podporuje vícenájem pojmenovaných instancí již deset let, jaká je tedy hodnota kontejnerů SQL Server?

Faktem je, že kontejnery SQL Server jsou praktičtější díky své rychlosti a automatizaci. Kontejnery SQL Server jsou pojmenované instance s daty a nastaveními zřízenými během několika sekund. Schopnost vytvářet, odstraňovat a nahrazovat kontejnery SQL Server během několika sekund je činí praktičtějšími pro vývoj, zajištění kvality a další případy použití popsané níže.

Díky rychlosti a automatizaci kontejnerů SQL Server jsou ideální pro produkční vývoj a prostředí QA. Každý člen týmu spouští izolované kontejnery na sdíleném virtuálním počítači, čímž se počet virtuálních strojů snižuje třikrát až pětkrát. V důsledku toho získáváme značné úspory na údržbě virtuálních strojů a na nákladech na licence Microsoftu. Kontejnery lze snadno integrovat do polí SAN (Storage Area Network) pomocí replik úložiště a klonů databáze (obrázek 2).

1TB připojená databáze je vytvořena na instanci kontejneru za méně než jednu minutu. Jde o významné zlepšení oproti serverům s vyhrazenými pojmenovanými instancemi nebo poskytováním virtuálních strojů pro každého vývojáře. Jedna společnost používá osmijádrový server pro obsluhu až 20 400 GB kontejnerů SQL Server. V minulosti trvalo zřízení každého virtuálního počítače déle než hodinu a instance kontejneru byly zřízeny za dvě minuty. Podařilo se tak 20krát snížit počet virtuálních strojů, 5krát snížit počet procesorových jader a výrazně snížit náklady na placení licencí Microsoftu. Kromě toho se zvýšila obchodní flexibilita a schopnost reagovat.

Použití kontejnerů SQL Server

Kontejnery jsou definovány pomocí skriptů Dockerfile, které poskytují konkrétní kroky k sestavení kontejneru. Dockerfile zobrazený na obrázku 1 určuje SQL Server 2012 s databázemi zkopírovanými do kontejneru a skriptem SQL Server pro maskování vybraných tabulek.

Každý kontejner může obsahovat desítky databází s podporou a soubory protokolu. Databáze lze zkopírovat a spustit v kontejneru nebo připojit pomocí příkazu MOUNTDB.

Každý kontejner obsahuje soukromý systém souborů, izolovaný od zdrojů hostitele. V příkladu zobrazeném na obrázku 2 je kontejner vytvořen pomocí MSSQL-2014 a venture.mdf. Vygeneruje se jedinečné ID kontejneru a port kontejneru.


Obrazovka 2. Kontejner založený na SQL Server 2014 a venture.mdf

Kontejnery SQL Server poskytují novou úroveň výkonu a automatizace, ale jejich chování je úplně stejné jako u běžných pojmenovaných prostorů. Správa zdrojů může být implementována pomocí nástrojů SQL Server nebo prostřednictvím omezení zdrojů kontejneru (obrázek 3).

Jiné aplikace

Kontejnery jsou nejběžnějším prostředkem organizace vývojových a QA prostředí, ale objevují se i další využití. Testování obnovy po havárii je jednoduchý, ale slibný případ použití. Mezi další patří kontejnerizace interního prostředí SQL Server pro starší aplikace, jako je SAP nebo Microsoft Dynamics. Kontejnerový backend se používá k zajištění pracovního prostředí pro podporu a průběžnou údržbu. Vyhodnocovací kontejnery se také používají k podpoře produkčních prostředí s trvalými datovými úložišti. V příštím článku budu podrobně hovořit o perzistentních datech.

WinDocks si klade za cíl ještě více zjednodušit používání kontejnerů prostřednictvím webového rozhraní. Další projekt se zaměřuje na migraci kontejnerů SQL Server v procesu DevOps nebo Continuous Integration s CI/CD potrubími založenými na Jenkins nebo Team City. Dnes se můžete seznámit s používáním kontejnerů na všech edice Windows 8 a Windows 10, Windows Server 2012 nebo Windows Server 2016 s podporou pro všechny edice počínaje SQL Server 2008 pomocí vaší kopie WinDocks Community Edition (https://www.windocks.com/community-docker-windows).

Pokud najdete chybu, vyberte část textu a stiskněte Ctrl+Enter.