Skip to content
GitLabGitHub

devcontainers + plugin vscode

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 lub VM.


Celem jest środowisko stworzenie kontenera deweloperskiego, które:

  • działa identycznie na każdym hoście,
  • za pomocą katalogu .userfiles, konfiguruje wstępnie kontener użytkownika, tak aby można było pracować wewnątrz.

Kluczowe elementy:

  • Dev Container oparty o własny obraz Dockera,
  • bind-mount katalogu .userfiles,
  • postCreateCommand jako punkt wejścia do bootstrapu.

  1. Plugin: ms-vscode-remote.remote-containers

  2. Utworzyłem katalog w /userfiles, w którym skopiowałem wszystkie potrzebne pliki użytkownika, tak bym mógł pracować w jego konteście

      /userfiles
      ├── bootstrap.bash
      ├── configure_user.bash
      ├── .zshrc
      ├── .gitconfig
      ├── .gitignore_global
      └── .ssh/
          ├── priv
          ├── priv.pub
          └── known_hosts
  3. Utworzenie dowiązania symbolicznego do repo

    Section titled “Utworzenie dowiązania symbolicznego do repo”
    ln -s /userfiles .userfiles
  4. Utworzenie pliku .devcontainer/devcontainer.json

    Section titled “Utworzenie pliku .devcontainer/devcontainer.json”
    {
      "name": "iac-gitlab",
      "build": {
        "dockerfile": "Dockerfile"
      },
      "workspaceMount": "source=${localWorkspaceFolder},target=/workspaces/${localWorkspaceFolderBasename},type=bind,consistency=cached",
      "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
      "runArgs": [
        "--network=host" // w specyficznych przypadkach
      ],
      "mounts": [
        "source=/userfiles,target=/userfiles,type=bind"
      ],
      "customizations": {
        "vscode": {
          "extensions": []
        }
      }
    }
  5. FROM ubuntu:24.04
    
    RUN apt-get update \
      && apt-get install -y --no-install-recommends \
        ca-certificates \
        curl \
        direnv \
        git \
        openssh-client \
        sudo \
        tar \
        unzip \
        zsh \
      && rm -rf /var/lib/apt/lists/*
  6. Utworzenie skryptu .userfiles/bootstrap.sh

    Section titled “Utworzenie skryptu .userfiles/bootstrap.sh”
    #!/bin/bash
    cp -fr /userfiles/.* $HOME/
    source ~/.zshrc
    direnv allow
  1. docker login registry.gitlab.com
  2. Szukanie kontenera, który nas interesuje:

      docker images
                                                                                                                                                                                                                    i Info   U  In Use
      IMAGE                                                                                             ID             DISK USAGE   CONTENT SIZE   EXTRA
      vsc-iac-gitlab-72c45f5e1ed25a8c0d801e27eec2c072c6ed78470b8589b0d63eefc43917013a:latest            9832794997dc        432MB             0B    U   

    Rename kontenera

    docker tag vsc-iac-gitlab-72c45f5e1ed25a8c0d801e27eec2c072c6ed78470b8589b0d63eefc43917013a registry.gitlab.com/pl.rachuna-net/artifacts/containers/opentofu:0.0.1

    Push kontenera

    docker push registry.gitlab.com/pl.rachuna-net/artifacts/containers/opentofu:0.0.1