Zum Inhalt springen

docker Windows Server Container und Docker III

1,136 Aufrufe

Dockerfile

Damit man nicht mit jedem Container alles neu machen muss, kann man sich über Dockerfiles eigene Images erzeugen. Die hier gezeigte Version ist mehr oder weniger die finale Version. Davor gab es natürlich diverse Fehlversuche sei es wegen eigener Fehler oder weil man manche Dinge auch einfach nicht vermutet hätte. Unter Windows Nanoserver gibt es beispielsweise gar kein msiexec und das msiexec vom Server Core schreibt die Registryeinträge gar nicht oder irgendwohin wo sie später nicht gefunden werden. Mit setx kann man zwar globale Umgebungsvariablen setzen, startet man den Apache aber als Dienst, wird die Pfadeinstellung dennoch nicht genutzt.

# Wir benutzen unser schon gepulltes Windows Servercore Image
FROM servercore:ltsc2019
COPY install /install
# Installiert die ODBC Treiber im Image
# Wer hier eine Ausgabe zum Debuggen will kann noch "/l! out13.log" anhängen
RUN ["msiexec", "/a C:\\install\\msodbcsql_13.msi", "/qn"]
RUN ["msiexec", "/a C:\\install\\msodbcsql_17.msi", "/qn"]
# Installation von VC Redist - 15 wird bei Server 2019 nicht benötigt
RUN ["C:\\install\\vc_17.exe", "/quiet", "/install"]
RUN ["C:\\install\\vc_13.exe", "/quiet", "/install"]
# Die Registry-Datei für die ODBC Treiber importieren
RUN "reg import C:\\install\\odbc.reg"
# install brauchen wir nicht mehr
RUN "RMDIR /S /Q C:\\install"
# /instantclient entspricht dann C:\instantclient im Image
COPY instantclient /instantclient
# einfach großartig - wenn jemand eine Idee hat wie ich Apache als Service erklären kann wo der instantclient liegt ...
ENV PATH="C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\ContainerAdministrator\AppData\Local\Microsoft\WindowsApps;C:\instantclient"
# Apache usw. kopieren - *1
COPY webapp /webapp
WORKDIR /webapp
# wir möchten mit dem Container reden
EXPOSE 80
# kopieren von php und der php.conf ins Apache config Verzeichnis - *2
COPY php/php /webapp/php
COPY php/php.conf /webapp/Apache24/conf/extra
# zum Testen/Debuggen
#ENTRYPOINT ["cmd.exe"]
# und los geht’s
ENTRYPOINT ["C:\\webapp\\Apache24\\bin\\httpd.exe"]

Das Dockerfile kommt dann mit in das Build-Verzeichnis und das neue Image kann mit folgendem Befehl erzeugt werden.

PS E:\build\>docker build -t test .

Mit

PS E:\build\>docker run -it -p 80:80 --name test_container test

starten wir den Container und prüfen das alles wie gewünscht funktioniert. Ist das der Fall teilen wir das Dockerfile in 3 Dateien. Das Dockerfile wird dann bei *1 und *2 aufgeteilt. Der erste Teil bleibt wie er ist und wir nennen das Dockerfile core2019. Und bauen ein Image daraus.

PS E:\build\>docker image build -t core2019 -f .\core2019 .

Das zweite Dockerfile sieht dann so aus

FROM core2019:latest
COPY webapp /webapp
EXPOSE 80

und das dritte so

FROM apache_core2019:latest
COPY php/php /webapp/php
COPY php/php.conf /webapp/Apache24/conf/extra
WORKDIR /logodata
ENTRYPOINT ["C:\\webapp\\Apache24\\bin\\httpd.exe"]


Ich habe die Dockerfiles nach dem Image benannt das sie erzeugen. Die weiteren Images baue ich also mit

PS E:\build\>docker image build -t apache_core2019 -f .\apache_core2019 .
PS E:\build\>docker image build -t php_apache_core2019 -f .\php_apache_core2019 .

Damit hat man zwar etwas Overhead bei jedem Build, da jedesmal das komplette Verzeichnis zum Buildprozess übergeben wird. Allerdings können wir so sehr einfach andere PHP und/oder Apache Versionen in ein anderes Image packen ohne den Standard zu verlieren oder die grundlegende Installation wiederholen zu müssen.

Lauf Docker, Lauf!

Die entstandenen Images kann man nun wieder mit kürzeren Namen taggen und schließlich starten

PS> docker run --restart unless-stopped -d --name flamara -p 17000:80 -v E:\share\develop:C:\webapp\docroot -v E:\share\config:C:\webapp\docroot\config\ --dns=10.0.0.20 php2019:latest

Mit -p mappen wir einen Port des Hosts zu dem freigegebenen Port des Containers. Dann mappen wir mit -v zum einen die Webapplikation selbst ins docroot des Containers und auch die Konfiguration der Software.

So können wir beliebige Versionen der Software mit der gleichen Konfiguration (Benutzer, Rechte, Datenbankanbindung) in der gleichen Umgebung testen.

Die nächsten Schritte wären nun, das Ganze mit einem Linux Base-Image zur erstellen und danach automatisierte Builds.



0 Kommentare


Empfohlene Kommentare

Keine Kommentare vorhanden

Gast
Kommentar schreiben...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

  • Blogkommentare

    • Ach, der Text kommt mir doch bekannt vor 😜
    • Also ernsthaft kaputt war noch nichts, ein mittleres Problem sind VMware Vorlagen. Die erste angelegte Vorlage ist nun etwas über ein Jahr alt. Das erste was "kaputt" geht ist der arch-keyring. Pakete von damals gibt es nicht mehr und neue bekommt man unter umständen nicht weil die Signaturen nicht mehr stimmen. Etwas nervig. Dann kann man sich erstmal aktuelle Schlüssel besorgen (pacman-key --refresh-keys) und dann den neuen keyring holen (pacman -S archlinux-keyring) Updates hab ich bishe
    • Arch als Server interessiert mich. Ich nutze es seit 2011 privat als Desktop-OS und erlebe kaum einen Tag ohne mehrere Paket-Updates. Wenn man die zu lange warten lässt, geht später gern mal was kaputt.  Von gefühlt dauernden Kernel-Updates mal ganz zu schweigen. Wie sind deine / eure Erfahrungen damit bisher?
    • Richtig Budgie basiert auf Gnome. Früher war ich zwar kein Gnome Fan aber das sieht schon ganz brauchbar aus. Die Skalierung funktioniert bei dem 4K Display allerdings eher so mittel-gut. Gnome typisch kann man nur 100, 200 und 300% auswählen. 200% ist dann schon wieder zu groß, das Problem lässt sich aber mit xrandr beheben. Das kommt dann im nächsten Teil. oh-my-zsh kenn ich schon, muss mich nur mal tiefer damit beschäftigen. Kommt wohl auch beim nächsten mal, zusammen mit tmux und ranger
    • "Budgie" kenne ich noch nicht - ist das ein Ableger von Gnome? Bei meinem Arch kann ich mich momentan nicht so wirklich zwischen XFCE aus Gewohnheit und i3-gaps wegen der Geschwindigkeit (wenn man fertig eingerichtet...) entscheiden. Wenn du bereits zsh-Fan bist, würde ich noch "oh-my-zsh" empfehlen. Ŭber kleine Module kommt da noch ne ganze Menge an Helferlein für die Shell hinzu.
    • oh super, danke dir. Ja mit den hochgestellten und tiefgestellten zahlen ist das so ne Sache. Da kommt der ein oder andere Fehler gern zustande. Leider kann man das nicht bearbeiten. Also hoffe ich das die Option irgendwann dazukommen wird oder jeder hier auch die Kommentare liest  
    • Das ist natürlich richtig, aber ich bin nicht der geduldigste Mensch und Arch kannte ich halt auch schon  Dazu kommt dann noch das der Core m5-Y71 nicht gerade ein Kraftpaket ist. Aber ich merkt mir mal Gentoo für ganz viel Langeweile oder potentere Hardware vor.
    • @_n4p_: Auch eine Gentoo Stage1 Installation ist gar nicht sooo kompliziert. Man braucht halt vor allem entsprechend viel Zeit, um alles selber zu kompilieren, anstatt es viel schneller nur zu installieren. Dafür läuft das System (wenn man alles richtig macht) aber auch schneller und stabiler als so ziemlich jedes andere System.
    • Das Arch Wiki ist echt großartig. Das kann man gar nicht oft genug sagen Für Gentoo und LFS war die Motivation einfach nicht groß genug. Arch bildet einen schönen Mittelweg aus den Extremen - Ubuntu, Mint auf der einen und LFS auf der anderen Seite. Irgendwo hab ich mal gelesen Arch sei auf die richtige Art kompliziert, zumindest zum Lernen. Will man einfach ein Linux um produktiv zu arbeiten, ist Arch vermutlich nicht der richtige Anfang. Das Abenteuer geht auch noch weiter
  • Blogstatistik

    • Blogs insgesamt
      1
    • Einträge insgesamt
      40

Fachinformatiker.de, 2020 SE Internet Services

fidelogo_small.png

if_icon-6-mail-envelope-closed_314900.pnSchicken Sie uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App


Get it on Google Play

Kontakt

Hier werben?
Oder senden Sie eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...

Wichtige Information

Fachinformatiker.de verwendet Cookies. Mehr dazu in unserer Datenschutzerklärung