Zum Hauptinhalt springen

Devcontainer anpassen

Der Devcontainer ist standardmässig nur mit Nginx ausgestattet. Es sind noch keine Programmiersprachen installiert. Dies wird für die meisten Projekte nicht reichen.

Es wurde jedoch das Tool mise installiert, mit welchem sehr einfach beliebige Sprachen installiert werden können. Mise ist ein universeller Packetmanager für Sprachen, aber auch andere Tools.

📺 Video der Aufgabe

vorsicht
  • Im Video verwende ich noch den Befehl ~/.local/bin/mise use
  • Neu könnt Ihr auch im Dockerfile mise use verwenden!

Aufgaben

Branch mise-test erstellen

Die folgende Aufgabe soll jeder für sich machen und ist nur bedingt Projektbezogen. Um Mergekonflikte zu vermeiden, sollen diese in einem eigenen Branch geschehen. Dieser Branch müsst ihr nicht pushen. Einen Branch erstellt ihr mit folgendem Befehl:

git checkout -b mise-test

Node installieren

Startet ein Terminal im devcontainer und führt folgende Befehle aus

  • Zuerst schauen wir ob node vorhanden ist (es sollte nicht)
    node
    > bash: command not found: node
  • Dann installieren wir node lts (long-term supported) global (-g)
    mise use node@lts -g
  • Nun prüfen wir nochmals ob node vorhanden ist (es sollte sein)
    node
    Welcome to Node.js v22.10.0.
    Type ".help" for more information.
    >

Java installieren

Startet ein Terminal im devcontainer und führt folgende Befehle aus

  • Zuerst schauen wir ob java vorhanden ist (es sollte nicht)
    java
    > bash: command not found: java
  • Dann installieren wir java lts (long-term supported) global (-g)
    mise use java@lts -g
  • Nun prüfen wir nochmals ob java vorhanden ist (es sollte sein)
    java --version
    openjdk 21.0.2 2024-01-16
    OpenJDK Runtime Environment (build 21.0.2+13-58)
    OpenJDK 64-Bit Server VM (build 21.0.2+13-58, mixed mode, sharing)
hinweis

So könnt ihr ziemlich jede noch so exotische Sprache installieren

  • wie rust (mise use rust@stable -g) oder zig: (mise use zig@0.13.0 -g)

Herausfinden was es für Versionen gibt

Mit dem Befehl mise list-all [sprache] [prefix] ist es möglich alle verfügbaren Versionen aufzulisten

Zeige alle node Versionen an

mise list-all node
0.1.14
0.1.15
...
22.10.0
23.0.0
23.1.0

Zeige alle Java "openjdk" Versionen an

mise list-all java openjdk
openjdk-9.0.0
openjdk-9.0.1
...
openjdk-23.0.0
openjdk-23.0.1

Für alle Programmiersprachen bereitstellen

Um zu garantieren, dass alle im Team die selbe Umgebung haben, müssen die Sprachen, nicht wie oben im Container, sondern im .devcontainer/Dockerfile installiert werden.

Dabei ist folgendes zu beachten:

  • Öffne das Projekt im Devcontainer mit "Reopen in Container"
  • Öffne die Datei .devcontainer/Dockerfile
  • Suche folgenden Befehl
    RUN curl https://mise.run | sh \
    • Damit wird das cli tool "mise" installiert.
  • Um nun damit Programmiersprachen direkt im Image zu installieren, muss dies danach passieren.
  • Füge nun den folgenden Befehl danach ins Dockerfile ein. (Er sollte bereits als Kommentar existieren)
    RUN  mise use node@lts -g
    • Damit wird die "long-term supported" Version von Nodejs installiert
  • Wenn das .devcontainer/Dockerfile geändert wurde, muss der Devcontainer neu gebaut werden. "Rebuild Container"
tipp
  • Es macht durchaus Sinn zuerst im Devcontainer zu prüfen was möglich ist und erst danach den Code ins Dockerfile zu kopieren.
  • Auch macht es Sinn den devcontainer mit docker compose build devcontainer zuerst zu bauen, da VS Code nicht so schöne Fehlermeldungen generiert.