dertowa
Goto Top

Einstieg in die Welt der Container?

Hallo zusammen und frohe Ostern gehabt zu haben.
In einem meiner Ostereier war ein Wunsch eines Softwareentwicklers zu finden.
Er entwickelt u.a. für uns ein Produktionssystem auf PHP Basis, aktuell läuft das auf einem virtualisierten Server 2012 R2.
Nun wollte ich das System schon länger mal auf 2019 aktualisieren, ist bislang aber im Sande verlaufen.

Das Osterei brachte auch den Grund dafür ans Licht, der Softwareentwickler würde gern auf Container - Basis (Linux) umstellen
und hätte dafür von mir nun gern einen Testserver.

Soweit so gut, Container hat man ja schon mal gehört, meine Berührungspunkte damit bisher aber gleich Null, macht ja nichts.
Microsoft bietet ja auch die Integration von Containern seit Server 2016 in Zusammenarbeit mit der Docker Community,
nun habe ich versucht ein paar sinnvoll Informationen zu finden wie sich das gestalten würde.

Mein Rheinwerk "Windows Server 2019" Handbuch schweigt sich zu Containern allerdings ziemlich aus und verweist mehr
oder minder nur auf Azure und Kubernetes.

Folgende Randbedingung:
  • Hyper-V Server 2019 Datacenter (Desktopdarstellung)
  • DC 2019 Software Assurance vorhanden - somit könnten auch die aktuellen Servervarianten mit weiteren Verbesserungen hinsichtlich Container genutzt werden

Nun stellt sich mir schon die Frage:
Microsoft empfiehlt einen Core oder Nano Server für die Container, würde also bedeuten ich virtualisiere ein Serversystem am Hyper-V,
welches dann auch ein Hyper-V wird und Unterstützung für Container bereitstellt?
Oder würde man, sofern man das Grundsystem als Core-Variante ausführt direkt auf diesem die Container aktivieren?

Hinsichtlich der Container Verwaltung blicke ich noch nicht so ganz durch.
Im Stand Server 2016 gab es keine GUI Übersicht wie den Hyper-V Manager, ist das aktuell anders?
Bei Kubernetes gibt es einen WinClient, kann man das Ding nutzen?

Hat jemand gute Quellen wo ich zur Grundthematik einen Einblick erhalten kann?

Grüße
ToWa

Content-Key: 564781

Url: https://administrator.de/contentid/564781

Printed on: April 23, 2024 at 07:04 o'clock

Member: wiesi200
wiesi200 Apr 14, 2020 at 07:56:53 (UTC)
Goto Top
Hallo,

und wenn du ihm einfach ne Linux VM hinstellt?
Member: aqui
aqui Apr 14, 2020 at 08:17:33 (UTC)
Goto Top
Sinnvolle Literatur und ein Raspberry Pi reichen zum Verstehen:
https://www.heise.de/newsticker/meldung/Jetzt-erhaeltlich-c-t-wissen-Doc ...

Wie Kollege @wiesi200 schon richtig gesagt hat. Linux VM mit Nginx oder Apachen und fertisch iss. Gibts alles schon als fertige Container. face-wink
Member: dertowa
dertowa Apr 14, 2020 at 08:27:02 (UTC)
Goto Top
Zitat von @aqui:
Wie Kollege @wiesi200 schon richtig gesagt hat. Linux VM mit Nginx oder Apachen und fertisch iss. Gibts alles schon als fertige Container. face-wink

Also solche Container würde ich dann als VM im Hyper-V einfach starten?
Ist dann also ein SingleContainer als SingleVM einfach anstelle meiner vollwertigen Windows oder Linux VM?
Member: laster
laster Apr 14, 2020 updated at 10:14:40 (UTC)
Goto Top
Hallo, Grundlagen Container z.B.: https://jaxenter.de/einfuehrung-docker-tutorial-container-61528
...

vG
LS
Member: dertowa
dertowa Apr 14, 2020 updated at 12:39:05 (UTC)
Goto Top

Hmm danke.
Klar soweit, dass ich auf einer bestehenden Maschine ein System für Container entsprechend installieren kann,
mir ging es speziell aber auch um die Möglichkeiten des Server 2019:
containers

Microsoft empfiehlt einen Core oder Nano Server für die Container, würde also bedeuten ich virtualisiere ein Serversystem am Hyper-V, welches dann auch ein Hyper-V wird und Unterstützung für Container bereitstellt?
Oder würde man, sofern man das Grundsystem als Core-Variante ausführt direkt auf diesem die Container aktivieren?

Was ich dazu gefunden habe: https://bcthomas.com/2019/02/getting-started-with-linux-containers-on-wi ... was aber auch sehr rudimentär ist und kein Hintergrundwissen vermittelt.
Member: laster
laster Apr 14, 2020 at 13:05:14 (UTC)
Goto Top
Wenn Du einen Hyper-V Server als Host hast, laufen darauf VMs. In einer VM installierst Du den Docker-Container-Dienst und der wiederum kann Anwendungen als Container laufen lassen. Das ist keine VM in der VM. Wird auch hier ganz gut erklärt: https://docs.microsoft.com/de-de/virtualization/windowscontainers/deploy ...
Wenn Du nach "Server 2019 Docker" suchst, findest Du viel Infos ...
Ebenso kannst Du eine Linux-VM istallieren und darin den Docker-Dienst installieren und dann Container ....
Member: dertowa
dertowa Apr 14, 2020 at 16:07:55 (UTC)
Goto Top
Soweit ich gelesen hatte ist es eben bei den Windows Containern nötig dass, sofern Linux Container betrieben werden sollen, das Hyper-V Feature auch installiert ist.
Somit wäre das nach meinem Verständnis schon ein Virtualisierungs-Host am Virtualisierungs-Host und das finde ich irgendwie suspekt.

Bedeutet aber ich sollte das "Container" Feature nicht direkt am Blech-Hyper-V-System aktivieren, sondern in eine VM auslagern, ja? :D
Member: Visucius
Visucius Apr 15, 2020 updated at 05:25:30 (UTC)
Goto Top
Du wirst sinnvoller Weise unten drunter ein Linux haben wollen. Alleine schon, weil Du Dich sonst bei den Docker-Containern einschränkst.

Dieses Linux kann auf Blech oder HyperV laufen. Wobei es ziemlich easy ist ein Linux in HyperV zu konfigurieren ... Ubuntu LTS ist doch als Install-Option in HyperV vorkonfiguriert?! D.h. einen Knopf drücken und schon läuft das. Anschließend google „Docker auf Ubuntu“ und dann das Manual zum speziellen Container. Das habe sogar ich Newbie schon hinbekommen - ist also lösbar 😉
Member: laster
laster Apr 15, 2020 at 05:41:04 (UTC)
Goto Top
und hier noch ein Link, mit dessen Hilfe es nun klappen sollte: https://decatec.de/home-server/docker-auf-ubuntu-server/
viel Erfolg!
LS
Mitglied: 143611
143611 Apr 15, 2020 at 07:32:30 (UTC)
Goto Top
Moin,

falls ihr im Unternehmen keine Pinguine verwalten könnt/wollt, ist der Server 2019 eine super-Plattform, um auch Linux-Container zu hosten (docker). Für 2019 ist die Docker Enterprise Edition kostenlos und im Zusammenspiel mit WSL2 auch ordentlich performant. Sogar der Mischbetrieb von Win- und Linux-Containern ist möglich. Der aktivierte Modus (Win oder Linux) schränkt lediglich die Art der Images ein, welche gestartet werden können; laufende Container werden nicht abgerissen ^^

MS hat für die Installation entsprechende Anleitungen ins Netz gestellt.
Member: dertowa
dertowa Apr 15, 2020 updated at 11:52:47 (UTC)
Goto Top
Zitat von @143611:
falls ihr im Unternehmen keine Pinguine verwalten könnt/wollt, ist der Server 2019 eine super-Plattform, um auch Linux-Container zu hosten (docker). Für 2019 ist die Docker Enterprise Edition kostenlos und im Zusammenspiel mit WSL2 auch ordentlich performant.
MS hat für die Installation entsprechende Anleitungen ins Netz gestellt.

Damit kommen wir der Sache doch schon etwas näher.
Ich mag das gern konsistent, wenn das mit Windows Bordmitteln funktioniert (was ja so sein sollte seit Server 2016),
dann befasse ich mich lieber gern mit Nano oder Core-Server und der Powershell Verwaltung, bevor ich mir zusätzlich
ein Linux rein hole. ;)

Hast du einen Ansatzpunkt für diese "Anleitungen welche Microsoft ins Netz gestellt hat"? ;)
Auch hinsichtlich des Docker Enterprise?
Ist das dann eine andere Variante oder diese welche man über die Powershell dann beziehen kann?
Mitglied: 143611
143611 Apr 15, 2020 updated at 14:52:40 (UTC)
Goto Top
Moin,

hab' Mist erzählt; das HowTo kommt von docker selbst: unter (klick me) ist die Installation von docker EE beschrieben; vorher sollten die Rollen/Features "Hyper-V", "Container" und "Windows Subsystem for Linux" auf der Kiste installiert sein.
Wenn Du bei der Build-Version nicht konservativ sein musst, würde ich Eine nehmen, die bereits WSL2 unterstützt.

[edited]
P.S. Für die ersten Gehversuche kann ich "Kitematic" empfehlen; kann nicht viel, aber für Schritt 1 von n reicht's ;)
Member: ASP.NET.Core
ASP.NET.Core Apr 15, 2020 at 17:02:11 (UTC)
Goto Top
Als jemand der Docker seit ~2015 und Kubernetes seit ~2018 in verschiedenen Umgebungen betreut hole ich mal etwas aus, damit du das ganze grundlegend verstehst: Docker nutzt Linux-Technologie. Die ist seit weit über 10 Jahren Bestandteil des Kernels und dementsprechend ausgereift. Und weil das zum Kernel gehört gibt es in dem Sinne auch kein echtes Docker für Windows. Das ist einfach nur der eingeschränktere und weniger elegante Weg zu dem was hier schon vorgeschlagen wurde: Eine Linux VM. So lange Windows nicht zum Linux-Kernel wechselt, wird das wohl auch so bleiben.

Als das ganze durch Docker damals stark an Verbreitung gewann, kopierte Microsoft das ganze: Windows Container waren geboren. Im Prinzip ähnlich wie die Linux-Container, aber auf Windows beschränkt. Dementsprechend konnte sich das ganze bis heute nicht wirklich durchsetzen. Es gibt wenig Anwendungsfälle wo das Sinn macht. Wer in .NET entwickelt und auf Windows angewiesen ist, hat eine leichtgewichtige Alternative zu VMs. Aber eben eher eine Nische: .NET Core selbst ist ja seit Jahren plattformunabhängig. Wer nicht gerade spezielle Anforderungen hat, braucht kein Windows mehr. Vieles wird ja auch auf anderen, offenen Plattformen (z.B. NodeJS, Python, PHP etc) entwickelt - alles OS Technologien, die eher Linux als Windows nahe stehen.

Damit sind wir bei deinem Thema: Es macht wenig Sinn, das auf Windows betreiben zu wollen. Das gibt einen Krampf und du zahlst noch einen haufen Lizenzgebühren. Nimm lieber eine der großen Distris (Ubuntu, Debian, CentOS, ...). Wenn du unbedingt für Support bezahlen willst geht das ja bei den meisten auch (RHEL, Ubuntu Abo etc). Die große Mehrheit der Container nutzt die offenen Linux-Container. Für PHP gibt es da auch offizielle Images: https://hub.docker.com/_/php Und man erhält deutlich mehr Support auf Stackoverflow oder anderen Foren.

Habe ich selbst seit Jahren auf einem Ubuntu-Host im Einsatz. Für schnell und einfach empfehle ich das Standard-PHP Modul mit Apache. Ist weniger komplex und euch reicht ein Container für den Applikationsserver (ggf. noch DB mit dazu, je nachdem was die alles braucht). Für den Anfang gut geeignet, wenn es um Performance geht lieber NGINX mit PHP-FPM. Falls Apache aus funktionellen Gründen benötigt wird, läuft auch Nginx für statische Inhalte und der Apache als Reverse-Proxy für PHP nicht schlecht.

Die Container verwaltest du dann ganz normal auf der Konsole: docker ps listet dir z.B. alle aufenden Container auf. Ich würde aber von langen docker run Befehlen abraten. Lieber gleich Docker-Compose nutzen. Vereinfacht das Handling und du kannst gut Abhängigkeiten abbilden, die man heutzutage bei so ziemlich jeder Webanwendung hat: Anwendungsserver muss auf die DB, hängt vllt noch einem Redis oder was vergleichbarem ab etc. Bleibt auch bei mehreren Containern übersichtlicher.

Wenn es noch größer wird wäre über Kubernetes nachzudenken. So wie ich das interpretiere ist das wohl aber aktuell noch definitiv overkill. Klar kann man das auch für was kleineres nehmen. Ich würde aber davon abraten, alles mit Kubernetes erschlagen zu wollen. Vor allem wenn ihr noch am Anfang seid. Für was größeres ist das toll, ansonsten bringt es eher mehr Komplexität.

Entwickeln würde ich btw auch auf Linux. Ist bei uns seit einiger Zeit ein Diskussionthema. Die Entwickler wollen das alle, weils unter Windows ein Krampf ist. Aber die Zuständigen sind von der "Ich hab schon Windows administriert als ihr noch in die Windeln geschissen habt" Sorte. Dell bietet da z.B. Laptops als Developer Edition an, mit Ubuntu, alles offiziell unterstützt, mit Support etc. Bei uns Admins stehen so lange zwei ausgemusterte i7 Rechner unterm Tisch mit Linux im Installationsnetz. Für das Alter laufen die erstaunlich gut. Da fehlt aber natürlich auch der ganze Overhead, der bei uns per Softwareverteilung überall zwangsinstalliert wird.
Mitglied: 143611
143611 Apr 15, 2020 updated at 20:17:18 (UTC)
Goto Top
Moin,

docker for Windows virtualisierten per Hyper-V einen stark angepasstes mini-linux, auf dem dann docker läuft. Dasselbe Prinzip wie bei Deiner Virtualisierungslösung, nur dass nicht ein ganzer Rechner inkl. Hardware+BIOS/UEFI virtualisiert wird, sondern nur der OS-Kernel. Ich stimme Dir zu, dass Linux zum Betrieb als Plattform die beste Lösung ist - wenn Linux als Host ausfällt (AD, SSO, Azure connect, Anwendungen f. Win-Clients), ist Dein Vorschlag aber wesentlich inperformanter als "Docker for Windows". Insbesondere im Zusammenspiel mit WSL2. Falls bei Dir Interesse zu dessen (Linux/docker) Implementierung unter Windows besteht, kann ich Dir diesen Podcast empfehlen.

Es ist kein Problem, Linux-Images unter Windows zu starten - machen wir hier seit knapp einem Jahr unter Einsatz von Kubernetes und sehen keine großen Performance-Einbußen dabei und ist afaik die einzige Möglichkeit, containerisierte SSO-Lösungen per AD/Win auth anzubieten (hab leider noch keine Lösung gefunden, nginx, samba oder einen anderen Pinguin-Webserver dazu zu bewegen, WinAuth anzubieten - Kerberos & Co. sind aber auch bömische Dörfer für mich und bin für Tipps dankbar).
Ich persönlich bevorzuge ebenfalls einen Linux-Host, falls mgl., aber da spielen die Anforderungen an die Plattform oder Anwendung halt auch eine Rolle.

Zum Thema Entwickeln unter Linux: die berühmte out-of-the-box "F5-expereance" ist imho nach wie vor ungeschlagen und sorgt bei Vorführungen immer noch für jaw-drops; das bootstrapping + toolchain einrichten + Debugging und breakpoints an beliebiger Stelle beschränkt sich auf die Auswahl der passenden Projektvorlage und wem das zu unflexibel ist, wird immernoch die Möglichkeit der manuellen Anpassung/Konfiguration geboten; hat sich einiges massiv bei M$ geändert, seit Nadella der Captain ist.

Falls ich hier wie ein fanboy klinge: die Plattform ist mir piepegal, meine Hauptkiste läuft unter Linux, konnte mir seit der Uni nix anderes Vorstellen und wurde vom AG Anfang der 2000er gezwungendermaßen zur Win-Entwicklung getrieben.
Ist auf jeder Plattform dasselbe; kennt man sie nicht en détail, verhält sie sich halt nicht so, wie man's gerne hätte.
...Nur Vorurteile finde ich halt albern; es gibt kein "besseres" System, nur solche, die zu Anforderungen passen oder nicht bzw. diese leichter realisierbar machen. Und dertowa hat die Randbedingungen klar vorgegeben. Diese über den Haufen zu werfen, weil man eine Plattform favorisiert ist unprofessionell.
Member: dertowa
dertowa Apr 15, 2020 updated at 20:38:48 (UTC)
Goto Top
Danke euch beiden, ich weiß, dass das durchaus ein Thema Win vs. Lin ist, aber ich sehe das auch situationsbezogen.
Ich administriere ungern irgendwelche Kisten mit denen ich mich nicht auskenne. Dabei ist es kein Problem sich auf
etwas anderes einzulassen, jeder Anfang ist schwer und alles braucht seine Zeit.

Aber wenn ich einen Entwickler habe, welcher sich an der aktuellen VM zwecks "Komfort" stört, dann mit Container
um die Ecke kommt, NGINX war da auch als Schlagwort gefallen und mir dann kommt mit Zitat:
Ich liefere da einen fertigen Container, den müssen wir dann nur laufen lassen und dann kann ich den auch mit pull immer auf einen aktuellen Stand bringen den ich in der Entwicklung habe und kann da zurück wenn was nicht geht etc.

Da schrillen bei mir alle Alarmglocken (vielleicht zu unrecht), aber letztlich läuft dann irgendwie ein Fremdkörper mit
dem ich mich nicht auskenne und dann hänge ich an einem seidenen Faden.

Wir reden da von einem produktiven Fertigungssystem was im Zweifel einen Stillstand der Fertigung nach sich zieht,
natürlich mag das sein, dass die Container stabiler laufen als eine Win-VM, aber hey seit Server 2012 habe ich weder
auf ESXi noch auf Hyper-V irgendeinen Servercrash einer VM erlebt und auf die VM kann ich mich aufschalten, kann mir
die Dienste ansehen und ggf. in die MariaDB schauen und ich kann das an sich verwalten.
--> ohne dass ich im Schweiße meines Angesichts irgendwelche Befehlsketten aus dem WWW saugen muss.

Wie sich das mit dem Container verhält keine Ahnung, aber mich stört es ein wenig den Faden vollständig aus der Hand
zu geben und auf eine Basis zu setzen die von einem Entwickler bevorzugt wird.
Ist ja nur eine Frage der Zeit bis der nächste kommt (der auf seinem Mac entwickelt) und von mir irgendwas in die Richtung
haben will.
Das dumme ist eben, das ich der Ochse vorm Berg bin der dann rappido im Feuer steht wenn was ausfällt und die Herren
Entwickler sich auf den Seychellen die Sonne auf den Bauch scheinen lassen...

Von daher ist mir schon mal deutlich wohliger, wenn die Basis irgendwie bekannt bleibt - Container @Windows.
Wenn das nicht gehen würde, dann wäre die Sache eine andere, aber es geht nun mal und ich denke wir haben da eine
gute Basis im Haus mit Server 2019 Datacenter und Software Assurance und somit auch der Möglichkeit der aktuellsten Serverversion.
--> Das Thema Lizenzgebühren stellt sich also nicht.

Faktisch halte ich fest:
Ich habe meinen Server 2019 Datacenter im Hyper-V Modus und baue mir darauf eine Core-VM mit den Funktionen "Containers, Hyper-V & Linux Subsys". Dann schau ich mal ob ich mit Lesematerial oder Podcast für das Szenario weiter voran komme...
Member: laster
laster Apr 16, 2020 updated at 06:04:09 (UTC)
Goto Top
Hallo ToWa,

Deine Bedenken sind absolut nachvollziehbar.
In einem meiner Ostereier war ein Wunsch eines Softwareentwicklers zu finden.
Der Softwareentwickler ist ein Dienstleister. Normalerweise bekommt der ein Lastenheft und liefert eine Lösung, die ihr dann gut oder schlecht findet.
Er entwickelt u.a. für uns ein Produktionssystem auf PHP Basis, aktuell läuft das auf einem virtualisierten Server 2012 R2.
Scheinbar eine Webanwendung à la (W)AMP
Das Osterei brachte auch den Grund dafür ans Licht, der Softwareentwickler würde gern auf Container - Basis (Linux) umstellen und hätte dafür von mir nun gern einen Testserver.
Wenn ihr nun keine Container wollt, wegen des zusätzlichen Aufwandes, dann würde ich dem Entwickler sagen, dass ich das so nicht will. Und er muss mir einen Vorschlag bringen, der in meine Landschaft passt.
Wäre doch auch eine Option?
Ausserdem, er würde gern, na ja, ich würde auch gern vieles ..., aber ihr bezahlt doch...

vG
LS
Member: dertowa
dertowa Apr 16, 2020 updated at 13:56:15 (UTC)
Goto Top
Alles richtig soweit, wie gesagt ich sehe durchaus den Sinn von Containern, habe heute noch mal ein längeres Telefonat geführt.
Er wollte ein Programm am Hostsystem, was ihm dann eine fertig konfigurierte VM im Hyper-V erstellt da er den manuellen Aufwand nicht will.
Zudem wäre es beim Container ja so, dass wenn Windows drunter liegt auch nur Windows Container laufen würden, faktisch veraltetes Wissen, aber ich kann ihm halt auch nichts herzaubern. :D

Die Windowsbasis wäre seinerseits ja nur weil wir das wünschen würden, er hätte eigentlich gern ein Linux.
Bis ich mal dahinter kam, dass er nicht von VMs spricht, sondern von einem Stück Blech was dann ein Linux hat worauf er sich frei bewegt...

Stück Blech in einer voll virtualisierten Umgebung, nur damit er seine Linuxbasis bekommt? Nö.

Die Einigung sieht nun etwas anders aus, er erstellt eine Linux-VM mit seinem Automatikprogramm an seinem Win 10 Hyper-V, exportiert diese und ich hoste das Ding, da endet dann meine Zuständigkeit - das muss ich nur noch dem Chef begreiflich machen. ;)


Natürlich komme ich damit hinsichtlich Container mit den Windowsfunktionen nicht weiter, aber vielleicht findet sich da noch was hinsichtlich Try & Error, oder passende Unterlagen.
Member: laster
laster Apr 16, 2020 at 13:57:29 (UTC)
Goto Top
klingt doch gut die Einigung. Die VM kannst du dann auch komplett sichern und auch in einer Testumgebung testen.
viel Erfolg
LS
Member: ASP.NET.Core
ASP.NET.Core Apr 17, 2020 at 17:28:07 (UTC)
Goto Top
Zitat von @dertowa:
Ich administriere ungern irgendwelche Kisten mit denen ich mich nicht auskenne. Dabei ist es kein Problem sich auf
etwas anderes einzulassen, jeder Anfang ist schwer und alles braucht seine Zeit.

Dann wäre doch jetzt ein guter Moment, damit anzufangen. Container werden zunehmend zum Standard für Entwicklung und Softwareverteilung, was ja auch Sinn macht. Eine VM ist wesentlich schwerfälliger und ressourcenfressender. Wer mit dem Thema noch gar nichts gemacht hat und in einem Bereich arbeitet, in dem das irgendwie halbwegs Sinn macht, würde ich empfehlen, mich damit auseinanderzusetzen. Unabhängig von deinem Ursprungsthema.

Aber wenn ich einen Entwickler habe, welcher sich an der aktuellen VM zwecks "Komfort" stört, dann mit Container
um die Ecke kommt, NGINX war da auch als Schlagwort gefallen und mir dann kommt mit Zitat:
Ich liefere da einen fertigen Container, den müssen wir dann nur laufen lassen und dann kann ich den auch mit pull immer auf einen aktuellen Stand bringen den ich in der Entwicklung habe und kann da zurück wenn was nicht geht etc.
Da schrillen bei mir alle Alarmglocken (vielleicht zu unrecht), aber letztlich läuft dann irgendwie ein Fremdkörper mit
dem ich mich nicht auskenne und dann hänge ich an einem seidenen Faden.

Für mich klingt das nach einer normalen agilen Testumgebung. Häufiges Deployen ist da nicht nur normal, sondern ausdrücklich gewünscht. Wenn er so einen Wunsch äußert, vermute ich mal, dass er gerne automatisiertes Deployment (CI/CD) hätte, aber das in der jetzigen Lösung nicht kann oder darf. Dafür bietet sich Docker durchaus an (gerade für Testumgebungen). Geht aber natürlich auch ohne. Vor allem wenn man die Maschinen automatisiert hochzieht, kommt man auf ein ähnliches Ergebnis, nur halt mit mehr Overhead.

Wir reden da von einem produktiven Fertigungssystem was im Zweifel einen Stillstand der Fertigung nach sich zieht,
natürlich mag das sein, dass die Container stabiler laufen als eine Win-VM, aber hey seit Server 2012 habe ich weder
auf ESXi noch auf Hyper-V irgendeinen Servercrash einer VM erlebt und auf die VM kann ich mich aufschalten, kann mir
die Dienste ansehen und ggf. in die MariaDB schauen und ich kann das an sich verwalten.
--> ohne dass ich im Schweiße meines Angesichts irgendwelche Befehlsketten aus dem WWW saugen muss.

Naja also wild irgendwelche Entwicklungsstände einfach so aufs Produktivsystem zu deployen, macht man auch in der modernen Softwareentwicklung nicht, im Gegenteil ;) Normal hat man mindestens 2 Umgebungen (Test/Prod), bei kritischen Sachen auch bis zu 4 für Staging/Quality.

Klassischerweise geht man oft den Mittelweg aus 3 Systemen: Ich schreibe Code, der landet automatisch auf einem Dev-System (1). Wenn der als stabil angesehen wird, kommt er auf ein Quality-System (2). Das sollte ein möglichst identisches Spiegelsystem vom produktiven sein. Am besten auch mit realistischen Daten. Da hat man (je nach Umfang/Projekt) auch gerne mal Testser drauf. Im Scrum-Umfeld z.B. würde da auch der Product Owner abnehmen.

Normalerweise sollten zwischendrin auch noch automatisierte Tests durchgelaufen sein, um konsistente Qualität gewährleisten zu können. Machen leider viele nicht, ist für eine (konsistente!) Softwarequalität aber wichtig. Das nur mal so am Rande.
Wenn meine ganzen Tests grün sind, ich mit der Funktion zufrieden bin, auf dem Staging-System alles gut läuft und im besten falle der PO das sogar abgenommen hat, gibts einen Merge Request. Ob ich bis hierhin einen dev- oder Feature Branch genutzt habe ist sekundär, kann man so oder so machen. Aber direkt im Master hab ich als Entwickler nix verloren. Bei dem Merge Request gilt normal das 4-Augen Prinzip: Ich mache den Request auf und ein zweiter guckt drüber. Das kann ein Kollege sein, der Chef, Gruppenleiter oder wer auch immer. Wichtig wäre, dass die Person den Code zumindest lesen kann. Wenn die Person ihr Okay gibt, kann deployt werden (ggf. auch Nightly wegen Downtimes).

Wie du siehst ist da recht viel Spielraum. Das kommt auf viele Faktoren an, wie Teamgröße, Projekt, Relvanz, Strukturen etc. Und wie schon oben gesagt gehts dabei in erster Linie um Prozesse. Docker kann eine konsistente und schnelle Umsetzung erleichtern. Aber letztendlich kann man das mit entsprechenden Einschränkungen auch mit klassischen VMs umsetzen.

Wie sich das mit dem Container verhält keine Ahnung, aber mich stört es ein wenig den Faden vollständig aus der Hand
zu geben und auf eine Basis zu setzen die von einem Entwickler bevorzugt wird.

Container kannst du genau so troubleshooten. Sogar teils besser, weil es manchmal einfacher ist, einen kaputten Container neu zu bauen statt sich den Kopf mit Reparieren zu zerbrechen (geht bei einer VM nur bedingt so einfach). Aber ich sag mal so: Wenn ihr Container einsetzt, musst du als Admin darin fit sein. Damit du im Fehlerfall deinen Job machen kannst. Deinen Entwicklern irgendwas hinstellen wofür du verantwortlich bist, wird nicht funktionieren.

Letztendlich müsst ihr euch darauf einigen, wer was macht UND wer auch für welchen Part Verantwortung trägt. Prinzipiell gibts 3 Möglichkeiten:

1. Ihr setzt Docker ein und du administrierst das wie gehabt. Dafür musst du das ganze verstehen und zumindest adminseitig damit sicher umgehen können (Container Starten/Stoppen, Logs lesen, mit Compose umgehen, wissen wie die deployen etc)
2. Ihr verlagert das mehr hin zu den Entwicklern, sodass die für weitere Teile der Administration verantwortlich sind
3. Jemand macht "DevOps" und ist dazwischen angesiedelt: Der kennt beide Seiten, du machst dann eher Server/OS Support, alles andere macht entweder er oder klärts mit den Devs

Auf Variante #3 ists bei mir raus gelaufen: Ich hab schon vor der Ausbildung viel entwickelt, aber fand isoliertes Entwickeln genau wie isoliertes Administrieren auf Dauer zu langweilig und hab mich auch mit der Infrastruktur drum herum beschäftigt. In meiner Ausbildungszeit eskalierte das Docker-Problem in meinem Ausbildungsbetrieb. Die Entwickler wollten davor schon Docker machen, aber die Admins hatten keine Ahnung davon und wollten auch nicht weg von ihren VMs (damals haben auch noch viele Win Only gemacht, es gab nur 2 Linux Admins).

Jedenfalls hat das ganze natürlich zu Chaos geführt, weil zig Entwickler wild dran rumgebastelt haben. Gegen Ende hin hat man mich auch mal als Azubi z.B. aus dem Lager ans Telefon geholt, weil jemand den Docker Server abgeschossen hatte und keiner wusste wie man das wieder repariert. Seit dem betreue ich das, mittlerweile mit einem 2. Kollegen weil es alleine unmöglich ist, die letzten ~15 Jahre verschlafene Automatisierung und Standartisierung mal eben nachzuholen.

Wir sind bis heute nicht fertig (wenn man das denn jemals ist?) aber mittlerweile auf einem guten Weg: Es ist geordneter geworden und gibt weniger Konflikte. Das ist jetzt eine lange Geschichte, aber was ich dir damit aufzeigen will: Der wo das betreut muss zumindest die Technologie verstehen. Am besten noch bisschen Entwicklererfahrung haben. Das hilft mir ungemein Themen zu verstehen, bei denen unsere klassischen Server-Admins mit den Schultern zucken und eher abblocken, weil sie weder mit Containern noch mit Entwicklung was zutun haben und das eigentlich auch gar nicht wollen.


Ist ja nur eine Frage der Zeit bis der nächste kommt (der auf seinem Mac entwickelt) und von mir irgendwas in die Richtung
haben will.

Das halte ich für unwahrscheinlich, weil Docker ja genau das verhindern soll: Ich entwickle irgendwas, packe das in ein Image. Das läuft auf meinem Linux Server genau wie beim Kollegen auf dem Linux-Laptop. Selbst ein Mac-User muss lediglich Docker installieren und auch dort läuft meine Anwendung in der von mir definierten Umgebung. Das ist einer der Hauptgründe für Docker. Mit einer VM bekomme ich das zwar auch hin, aber selbst mit Linux ist das Teil mehrere GB groß. Updates wenn der andere da Daten drin liegen hat? Aua... Mit Docker Volumes? Kein Stress.

Container sind eine fundamentale Technologie, vergleichbar wie damals der Wechsel von Bare Metal hin zu VMs. Und ich sage bewusst Container, nicht Docker. Gut möglich, dass Docker verschwindet. Aber die Container-Specs bleiben. Dann wird halt Podman als Runtime genutzt. Merkt der User nicht mal, weil standartisiert. Daher kann man bereits im jetzigen frühen Stadium Podman benutzen und ein Alias auf Docker setzen.

Ich würde Container daher nicht mit irgend einem Hype-Buzzword gleichsetzen, das in wenigen Jahren keine Relevanz mehr hat.

Das dumme ist eben, das ich der Ochse vorm Berg bin der dann rappido im Feuer steht wenn was ausfällt und die Herren
Entwickler sich auf den Seychellen die Sonne auf den Bauch scheinen lassen...

Verständlich. Warum baut ihr dann nich erst mal eine Testumgebung auf? Da kannst du auch Erfahrung sammeln. Produktiv würde ich erst gehen, wenn es mindestens eine Person bei euch gibt, die mit der Technik sicher umgehen kann.

Von daher ist mir schon mal deutlich wohliger, wenn die Basis irgendwie bekannt bleibt - Container @Windows.
Wenn das nicht gehen würde, dann wäre die Sache eine andere, aber es geht nun mal und ich denke wir haben da eine
gute Basis im Haus mit Server 2019 Datacenter und Software Assurance und somit auch der Möglichkeit der aktuellsten Serverversion.

Naja es geht im Grunde auch nicht. Der Windows Kernel kann das nicht und das wird sich so schnell auch nicht ändern. Dein Docker für Windows startet im Hintergrund einfach nur eine Linux-VM. Die siehst du halt nur nicht, weil ein Wrapper dazwischen steckt der das ganze abstrahiert. Man hat also Docker für Win, der das Linux-Docker abstrahiert, was wiederum über libcontainer auf die Linux Kernelfunktionen zugreift.

Wenn das in einer VM läuft, wirds noch lustiger: Dann habe ich eine VM in einer 2. VM geschachtelt. Selbst wenn ich hardcore Windows Fan wäre, würde ich mir doch überlegen, ob ich so ein Konstrukt wirklich einsetzen will - noch dazu produktiv und für was kritisches... Nicht nur dass die Performance flöten geht, das Nesting evtl Probleme macht. Das ganze wird halt einfach komplexer ohne Mehrwert. Im Gegenteil, einziger Mehrwert ist ein proprietäres OS über ein freies gestülpt. Klingt noch grauenvoller als Docker in Docker, was ich auch schon keinem empfehlen würde.

Im Bezug auf Docker bringt dir das auch keinen Mehrwert. Auch du wirst z.B. docker run --rm hello-world ausführen, genau wie ich auf meinem Linux und ein anderer auf dem Mac. Einziger Unterschied ist, dass du halt ein Win patchst (oder patchen lässt). Mehr wird auf dem Server dann sowieso nicht laufen, weil die Applikationen ja alle auf Docker sind.
Member: ASP.NET.Core
ASP.NET.Core Apr 17, 2020 at 18:07:41 (UTC)
Goto Top
Zitat von @dertowa:
Er wollte ein Programm am Hostsystem, was ihm dann eine fertig konfigurierte VM im Hyper-V erstellt da er den manuellen Aufwand nicht will.

Macht grundsätzlich Sinn, an Infrastructure as Code bin ich auch dran mit einer HCL Connections Umgebung. Bin mittlerweile so weit, dass ein grundlegendes System nach 1,5h zuschauen steht (davor: Consultant mit 10 Jahren Erfahrung braucht mindestens 1 Arbeitstag, ich am Anfang fürs Grundsystem ~1,5). Und zwar immer exakt gleich nach Doku konfiguriert. Aktuell für Testumgebungen, aber mein Plan ist, damit z.B. bei einem Update eine Testinstanz hochzufahren, auf Knopfdruck alle Anpassungen draufzuspielen und wenn alles passt das gleiche mit Prod zu machen. Noch cooler wird das mit Kubernetes Clustern, das hab ich mit KVM mal POC mäßig gemacht.

Ob das für euch Sinn macht, kommt auf die Umgebung drauf an. Für eine einzelne PHP-Anwendung wäre das in meinen Augen etwas oversized, auch wenn ich den Ansatz gut finde.

Zitat von @dertowa:
Zudem wäre es beim Container ja so, dass wenn Windows drunter liegt auch nur Windows Container laufen würden, faktisch veraltetes Wissen, aber ich kann ihm halt auch nichts herzaubern. :D

Wie gesagt nur über die Virtualisierung. Über eine reguläre VM (also in VirtualBox, Hyper-V, Vagrant oder was auch immer selbst installiert) ging das schon immer. Ich würde nicht sagen, dass Windows das kann, nur weil eine Black Box VM irgendwo im Hintergrund läuft. Wenn ich unter Linux eine Win VM installiere läuft auch MS Office. Ob das rechtfertigt zu sagen, Office läuft auf Linux? Naja.... Aber das ist Definitionssache, was man darunter versteht. Je nachdem wie er und du es meinen habt ihr evtl. beide recht.

Bis ich mal dahinter kam, dass er nicht von VMs spricht, sondern von einem Stück Blech was dann ein Linux hat worauf er sich frei bewegt...

Stück Blech in einer voll virtualisierten Umgebung, nur damit er seine Linuxbasis bekommt? Nö.

Verstehe ich nicht wieso er Bare Metal will? So lange eure Hardware das packt ist für ihn doch egal, ob du ihm eine VM oder einen kompletten Bare Metal Server bereitstellst. Der einzige Grund den ich mir vorstellen könnte ist, dass er dort mit Terraform oder was vergleichbarem automatisch VMs erstellen will (wie zu Beginn schon angesprochen).

Die Einigung sieht nun etwas anders aus, er erstellt eine Linux-VM mit seinem Automatikprogramm an seinem Win 10 Hyper-V, exportiert diese und ich hoste das Ding, da endet dann meine Zuständigkeit - das muss ich nur noch dem Chef begreiflich machen. ;)

Das klingt nach einem guten Deal für ihn, aber nach einem weniger guten für dich. Wie oft wird das denn deployt und was musst du da alles anpassen? Wenn die Antwort darauf nicht "überraschend wenig" lautet, würde ich mir über ein zeitgemäßes Deployment Gedanken machen.

Selbst wenn es für den Anfang nur was halblebiges wird wie z.B. er stellt ein Ansible für die Pakete (Webserver, PHP etc) bereit und um den aktuellen Quellcode vom Git Server zu holen, was du dann ausführst. Wenn es mehr wird, würde ich da einen Jenkins, Gitlab oder so was hinstellen. Wenn dir das zu viel Rechte in den Händen des Entwicklers ist, kannst du ja dann in den Master-Branch das Review durchführen. So lange du da nicht mergen klickst, landet nix im Produktivsystem. Man kann da bei Bedarf auch weitere Schutzmaßnahmen treffen und z.B. direktes Pushen in den Master-Branch verbieten.
Member: dertowa
dertowa Apr 19, 2020 updated at 13:31:08 (UTC)
Goto Top
Uff...
Danke für den ausführlichen Kommentar.
Bestätigt letztlich aber genau meine Denke.

Mein Problem besteht ja nicht darin, dass ich konsequent gegen Container bin oder nicht bereit wäre mich damit zu befassen,
aber das benötigt einfach Zeit und Input. Der Entwickler möchte eben einfach die Maschine haben, das umsetzen und laufen lassen.
Daher am liebsten Bare Metal auf Linuxbasis und er macht das alles, wäre für mich grundsätzlich auch OK, aber dafür bin ich
Admin und denke eben ein paar Schritte weiter - Sicherung, Ausfallsicherheit, zwei Standorte Konzept fällt A aus, läuft B mit allem weiter.

Daher geht es nur als VM, da haben wir nun mal Hyper-V, nicht weil ich das wollte, komme aus einem Unternehmen mit ESXi, sondern
weil Hyper-V einfach da war und für das, was bisher gebraucht wurde vollkommen ausreicht und keine weiteren Lizenzkosten nach sich zieht.

Es gibt auch keine andere Anwendung im ganzen Unternehmen die überhaupt auf Linux oder gar Mac laufen würde, es ist alles Windows.

Wie der Entwickler das dann innerhalb seiner Linux VM aufbaut ist mir unbekannt, wäre auch nach seiner Kommunikation nicht mein Ding,
denn Zitat: "Damit kennen Sie sich sowieso nicht aus." ...und somit soll ich da auch einfach nicht dran.


Was für mich nach wie vor offen ist:
Ich habe einen HyperV 2019 DC auf Bare Metal, befasse ich mich nun mit Containern würde ich die Funktion direkt auf dem Hyper-V Server nutzen, damit ich eben nicht in dieser Schleife ende eine VM zu hosten welche wieder VMs bereitstellt?
Das würde aber bedeuten wenn ich Docker auf Bare Metal nutze verstoße ich gegen die MS Lizenzauflagen, dass auf dem Basissystem keine weitere Software laufen darf, von ganz wenigen Ausnahmen abgesehen.
Dann wäre der HyperV- Server auch noch eine Corevariante. ;)

Es fehlt also einfach an einer Art Tutorial in Hinblick auf die Situation, gemäß meiner Beschreibung sehe ich eigentlich nur die Variante
die Microsoft Container mit Linux Subsystem zu nutzen, durch die SoftwareAssurance könnte der HyperV ja auch die aktuellste 2004 Server - Version haben, aber sowas macht man doch nicht produktiv? :D

P.S.: ...bis sich einer bei uns mit Container auskennt... das müsste dann ich sein, denn die IT besteht ausschließlich aus mir. *hust* ;)
Member: laster
laster Apr 21, 2020 at 10:28:35 (UTC)
Goto Top
damit ich eben nicht in dieser Schleife ende eine VM zu hosten welche wieder VMs bereitstellt
Keine Schleife, da ein Container keine VM ist, sondern nur Virtualisierungsfunktionen nutzt.
Auf einem Hyper-V Host (Blech), Knoten sollte KEINE andere Software zusätzlich laufen ... - wie du schon erkannt hast.
vG
LS
Member: dertowa
dertowa Apr 22, 2020 updated at 08:25:10 (UTC)
Goto Top
Zitat von @laster:
Keine Schleife, da ein Container keine VM ist, sondern nur Virtualisierungsfunktionen nutzt.
vG
LS

OK soweit, würde aber bedeuten, wenn ich Container unter Windows bereitstellen will mache ich dies direkt am
Hyper-V Host (Blech) und nicht in einer VM, welche dann eben auch die Hyper-V Rolle, die Container und die Linux Subsys Funktion benötigt?
Also mir geht es um "best practice". ;)
Member: laster
laster Apr 22, 2020 updated at 08:57:36 (UTC)
Goto Top
Nein, siehe oben (14.04.2020 um 15:05 Uhr) und viele nachfolgende Beiträge...