Devcontainer einrichten
Der Devcontainer wird durch das Dockerfile unter .devcontainer/Dockerfile
beschrieben. In dem Dockerfile
können Tools installiert und konfiguriert
werden, die fürs Projekt nötig sind. Dies erleichtert den Einstieg für neue
Projektmitglieder und garantiert dass alle die gleiche Umgebung haben.
Theoretisch könnte auch jeder Projektmitarbeiter alle Tools nodejs
, java
und
co. selbst installieren. Hat ja früher auch funktioniert 😉
- ❗ Es muss darauf geachtet werden, dass alle dieselben Versionen verwenden.
- Der Devcontainer (
.devcontainer/Dockerfile
) dient zum entwickeln. Darin wird gearbeitet.- 💡 Der Devcontainer wird lokal gestartet.
- Das produktive Image (
nginx/Dockerfile
, oder späterihr-projekt/Dockerfile
) ist optimiert. Dieses sollte so klein wie möglich sein und nur das nötigste beinhalten. Meisten z.B. die gebaute Applikation (ohne node_moduls und co.) und nicht der dev Build.- 💡 Das produktive Image wird als Container auf AWS gestartet.
Aufgaben
Mit docker compose
den Devcontainer starten und prüfen
- Den Devcontainer starten
docker compose up devcontainer -d
- Mit
docker exec
eine shell im Container öffnendocker exec -it devcontainer /bin/bash
- Im Container den
nginx
starten:chmod +x nginx/scripts/start-nginx.sh # evt. nicht nötig, schadet aber nicht
sh nginx/scripts/start-nginx.sh - Prüfen ob der Webserver läuft.
curl http://localhost:3000
- 💡 Mit
curl
kann man beliebige HTTP Request absetzen.curl
wird daher oft fürs testen verwendet
- 💡 Mit
Wenn auf dem Port 3000 bereits ein Prozess läuft, muss dieser gekillt werden
Windows
$ netstat -ano | findstr :3000
>TCP 0.0.0.0:3000 0.0.0.0:0 LISTENING 2660
>TCP [::]:3000 [::]:0 LISTENING 2660
$ taskkill /PID 2660 /F
Linux
kill $(lsof -t -i:3000)
Docker Container
Wenn der Port 3000 von einem anderen Docker Container belegt ist muss dieser gestoppt werden.
$ docker ps
> CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
> 95a55d07e361 a-image "/bin/sh -c 'while s…" 2 seconds ago Up 2 seconds 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp container-name
$ docker stop container-name
Natürlich kann man auch via Browser den Webserver testen. Dafür muss
http://localhost:3000
im Browser geöffnet werden.
In VS Code Devcontainer starten und prüfen
- Bitte startet den Devcontainer zuerst mit
docker compose
. - VS Code hat nicht so tolle Fehlermeldungen wenn was nicht klappt 🙄
- Bitte zuerst alle benötigten VS Code Plugins installieren
VS Code fragt automatisch nach, ob das Projekt im Container geöffnet werden soll sofern das Plugin "Dev Containers" installiert wurde.
- "Reopen in Container" klicken und warten
- Nun wird der Container gebaut und gestartet. Das kann einige Minuten dauern!
Unterdessen...
- Wen auf "Connecting to Dev Container (Show Logs)" geklickt wird
- erscheint folgender Log. Es zeigt wie das "Image" gebaut wird
- Unten rechts ist ersichtlich ob VS Code in einem Container geöffnet wird/wurde.
Terminal öffnen und nginx starten
- Mit
+
kann ein neues Terminal geöffnet werden, (z.B. zsh oder bash) - Nun existiert ein ubuntu Terminal im Container.
(selbst unter Windows 🤯) - Die Dateien sind verfügbar unter
/workspace
- Nginx starten (wie ohne VS Code)
chmod -x nginx/scripts/start-nginx # evt. nicht nötig, schadet aber nicht
sh nginx/scripts/start-nginx - Prüfen ob der Webserver läuft.
curl http://localhost:3000
Produktives Dockerfile testen
- Mit
docker compose
der productive service startendocker compose up production -d
- In der shell oder im Browser prüfen
curl http://localhost:3001
- Wenn Ihr ein Terminal im VS Code Devcontainer gestartet habt ist es möglich
direkt darin mit
docker compose up production -d
zu starten. 🤯 - Wenn Ihr den Devcontainer via
docker compose
selbst gestartet habt ist keindocker
verfügbar- kein Problem! Ihr könnt auch auf der Machine, in einer zweiten Shell den Befehl ausführen