⚙️ devcontainer
Środowisko developerskie w kontenerze Docker
Zawartość konfiguracji:
devcontainer.json— konfiguracja konteneraDockerfile— własny obraz bazowy.userfiles/— symlink do katalogu konfiguracjibootstrap.sh— skrypt inicjalizacyjny

W pracy nad wieloma projektami infrastrukturalnymi (OpenTofu, Ansible, Vault, GitLab CI) szybko pojawia się ten sam problem: jak zapewnić powtarzalne, gotowe do pracy środowisko developerskie — bez ręcznego konfigurowania systemu na każdym laptopie czy VM. Artykuł pokazuje konkretne rozwiązanie, które sprawdza się w codziennej pracy.
/userfiles z kluczami SSH, .gitconfig, .zshrc montowany jako bind-mountpostCreateCommand uruchamia bootstrap przy każdym starcie konteneraOba podejścia rozwiązują ten sam problem, ale w różny sposób:
⚙️ devcontainer
Środowisko developerskie w kontenerze Docker
Zawartość konfiguracji:
devcontainer.json — konfiguracja konteneraDockerfile — własny obraz bazowy.userfiles/ — symlink do katalogu konfiguracjibootstrap.sh — skrypt inicjalizacyjny🗄️ GitLab Container Registry
Rejestr obrazów dla gotowych kontenerów
Przechowuje:
opentofu:0.0.1)docker pull🔗 Odwiedź
/userfiles.userfiles.devcontainer/devcontainer.jsonDockerfileDocker jest wymagany jako backend dla Dev Containerów. Zainstaluj go zgodnie z oficjalną dokumentacją dla swojego systemu:
Zainstaluj oficjalny plugin Dev Containers z marketplace VSCode:
Dev Containers: Reopen in Container/userfilesKatalog /userfiles zawiera konfigurację użytkownika montowaną do każdego kontenera — klucze SSH, aliasy shell, konfigurację git:
Dzięki bind-mountowi pliki z /userfiles są dostępne wewnątrz kontenera pod tą samą ścieżką — bootstrap kopiuje je do $HOME użytkownika w kontenerze.
.userfilesW katalogu repozytorium tworzysz symlink wskazujący na /userfiles:
devcontainer.jsonPlik .devcontainer/devcontainer.json definiuje konfigurację kontenera deweloperskiego:
Kluczowe elementy:
mounts: bind-mount katalogu /userfiles z hosta do kontenerarunArgs: --network=host przydatne przy testach sieciowychcustomizations.vscode.extensions: lista rozszerzeń VSCode instalowanych automatycznieDockerfileWłasny obraz oparty na Ubuntu 24.04 z minimalistycznym zestawem narzędzi:
Narzędzia dobrane pod pracę z IaC:
direnv: automatyczne ładowanie zmiennych środowiskowych z .envrczsh: shell z możliwością użycia konfiguracji z .userfiles/.zshrcopenssh-client: klucze SSH z /userfiles/.ssh/Skrypt .userfiles/bootstrap.sh uruchamiany przez postCreateCommand przy tworzeniu kontenera:
Trzy kroki:
/userfiles do $HOME w kontenerzedirenv dla bieżącego katalogu roboczegoJeśli chcesz udostępnić gotowy obraz zespołowi, możesz opublikować go w GitLab Container Registry.
Zaloguj się do rejestru
Znajdź identyfikator kontenera
VSCode buduje obraz z automatycznie generowaną nazwą — znajdź go poleceniem:
Przykładowy wynik:
Nadaj właściwą nazwę i tag
Opublikuj obraz
| Zasób | Czego się nauczysz |
|---|---|
| Dev Containers Spec | Specyfikacja formatu devcontainer.json |
| VSCode Dev Containers | Integracja z VSCode |
| Docker Docs | Budowanie i zarządzanie obrazami |
| GitLab Container Registry | Publikowanie obrazów |
| Nasze kontenery | Gotowe obrazy deweloperskie |
Maciej Rachuna | rachuna-net.pl
Artykuł opisuje realne środowisko deweloperskie używane przy projektach IaC. Konfiguracja devcontainer.json, Dockerfile i skrypty bootstrap bazują na praktyce, a nie na teorii.