Przejdź do głównej zawartości

Konfiguracja kontenerów deweloperskich

Kontenery deweloperskie zapewniają idealną równowagę między potężnymi możliwościami automatyzacji Claude Code a wymaganiami bezpieczeństwa przedsiębiorstwa. Poprzez izolację Claude w konteneryzowanym środowisku, możesz bezpiecznie używać --dangerously-skip-permissions dla operacji bez nadzoru, jednocześnie chroniąc system hosta i poświadczenia produkcyjne.

Izolacja bezpieczeństwa

Firewall sieciowy ogranicza dostęp zewnętrzny tylko do zatwierdzonych usług

Spójne środowisko

Identyczna konfiguracja dla wszystkich członków zespołu niezależnie od systemu hosta

Swoboda uprawnień

Pomiń bezpiecznie prompty o uprawnienia w izolowanym kontenerze

Szybkie wdrażanie

Nowi programiści produktywni w minuty, nie godziny

  1. Zainstaluj wymagania

    • VS Code z rozszerzeniem Remote - Containers
    • Docker Desktop (lub kompatybilne środowisko uruchomieniowe kontenerów)
    • Git do klonowania implementacji referencyjnej
  2. Sklonuj implementację referencyjną

    Okno terminala
    git clone https://github.com/anthropics/claude-code.git
    cd claude-code/.devcontainer
  3. Otwórz w VS Code

    Okno terminala
    code .
  4. Otwórz ponownie w kontenerze

    • Kliknij “Reopen in Container” gdy zostaniesz o to poproszony
    • Lub użyj palety poleceń: Remote-Containers: Reopen in Container

Claude Code automatycznie instaluje się i konfiguruje w kontenerze, gotowy do natychmiastowego użycia z zwiększonym bezpieczeństwem.

Implementacja referencyjna składa się z trzech głównych komponentów:

{
"name": "Claude Code Dev Container",
"build": {
"dockerfile": "Dockerfile",
"context": ".."
},
"features": {
"ghcr.io/devcontainers/features/node:1": {
"version": "20"
}
},
"customizations": {
"vscode": {
"extensions": [
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"ms-azuretools.vscode-docker"
],
"settings": {
"terminal.integrated.defaultProfile.linux": "zsh",
"editor.formatOnSave": true
}
}
},
"postCreateCommand": ".devcontainer/init-firewall.sh",
"remoteUser": "vscode",
"mounts": [
"source=${localEnv:HOME}/.ssh,target=/home/vscode/.ssh,type=bind,consistency=cached",
"source=claude-history,target=/home/vscode/.claude,type=volume"
],
"runArgs": ["--cap-add=NET_ADMIN"]
}
FROM mcr.microsoft.com/devcontainers/javascript-node:20
# Zainstaluj zależności systemowe
RUN apt-get update && apt-get install -y \
git \
zsh \
fzf \
ripgrep \
iptables \
&& rm -rf /var/lib/apt/lists/*
# Skonfiguruj ulepszenia shell
RUN sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# Zainstaluj Claude Code globalnie
RUN npm install -g @anthropic-ai/claude-code
# Utwórz użytkownika non-root
ARG USERNAME=vscode
ARG USER_UID=1000
ARG USER_GID=$USER_UID
RUN groupadd --gid $USER_GID $USERNAME \
&& useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \
&& echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME
USER $USERNAME

Skrypt init-firewall.sh implementuje ścisły firewall domyślnie odmawiający:

#!/bin/bash
# Reset reguł firewall
sudo iptables -F
sudo iptables -X
# Domyślne polityki: odmów wszystkiego
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT DROP
# Pozwól na loopback
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
# Pozwól na ustanowione połączenia
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Whitelist podstawowych usług
ALLOWED_DOMAINS=(
"api.anthropic.com" # Claude API
"statsig.anthropic.com" # Telemetria
"registry.npmjs.org" # Pakiety npm
"github.com" # Operacje Git
"raw.githubusercontent.com" # Dostęp do surowych plików
)
for domain in "${ALLOWED_DOMAINS[@]}"; do
# Rozwiąż i pozwól na każde IP
for ip in $(dig +short $domain A); do
sudo iptables -A OUTPUT -d $ip -j ACCEPT
done
done
# Pozwól na zapytania DNS
sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
# Pozwól na SSH dla git
sudo iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
echo "✅ Firewall skonfigurowany z ograniczonym dostępem"

Rozszerz Dockerfile o standardowy zestaw narzędzi twojego zespołu:

# Dodaj środowisko deweloperskie Python
RUN apt-get update && apt-get install -y \
python3 \
python3-pip \
python3-venv \
&& rm -rf /var/lib/apt/lists/*
# Zainstaluj popularne narzędzia Python
RUN pip3 install --user \
black \
flake8 \
mypy \
pytest

Modyfikuj reguły firewall dla potrzeb twojej organizacji:

Okno terminala
# Dodaj dostęp do prywatnego rejestru
PRIVATE_REGISTRY="registry.company.com"
for ip in $(dig +short $PRIVATE_REGISTRY A); do
sudo iptables -A OUTPUT -d $ip -j ACCEPT
done
# Dodaj dostęp do wewnętrznych API
sudo iptables -A OUTPUT -d 10.0.0.0/8 -j ACCEPT # Sieć prywatna
sudo iptables -A OUTPUT -d 172.16.0.0/12 -j ACCEPT # Sieci Docker
# Dodaj konkretne porty dla usług
sudo iptables -A OUTPUT -p tcp --dport 5432 -j ACCEPT # PostgreSQL
sudo iptables -A OUTPUT -p tcp --dport 6379 -j ACCEPT # Redis

Skonfiguruj trwałe przechowywanie dla różnych scenariuszy:

{
"mounts": [
// Klucze SSH dla operacji git
"source=${localEnv:HOME}/.ssh,target=/home/vscode/.ssh,type=bind,readonly",
// Poświadczenia AWS (jeśli potrzebne)
"source=${localEnv:HOME}/.aws,target=/home/vscode/.aws,type=bind,readonly",
// Trwała historia Claude
"source=claude-history,target=/home/vscode/.claude,type=volume",
// Udostępniona konfiguracja zespołu
"source=${localWorkspaceFolder}/.devcontainer/team-config,target=/home/vscode/.config/team,type=bind,readonly"
]
}

Skonfiguruj ustawienia proxy w kontenerze:

# Dodaj do Dockerfile
ARG HTTP_PROXY
ARG HTTPS_PROXY
ARG NO_PROXY
ENV HTTP_PROXY=${HTTP_PROXY}
ENV HTTPS_PROXY=${HTTPS_PROXY}
ENV NO_PROXY=${NO_PROXY}
# Skonfiguruj npm dla proxy
RUN if [ -n "$HTTP_PROXY" ]; then \
npm config set proxy $HTTP_PROXY && \
npm config set https-proxy $HTTPS_PROXY; \
fi

Udostępnij spójne ustawienia Claude Code:

.devcontainer/team-config/claude-settings.json
{
"permissions": {
"allow": ["*"], // Bezpieczne w izolowanym kontenerze
"deny": []
},
"env": {
"CLAUDE_CODE_ENABLE_AUDIT_LOGGING": "1"
},
"hooks": {
"PreEdit": "npm run lint --fix",
"PostEdit": "npm run format"
}
}

Montuj i zastosuj w postCreateCommand:

Okno terminala
# Skopiuj ustawienia zespołu
cp /home/vscode/.config/team/claude-settings.json ~/.claude/settings.json

Zarządzanie poświadczeniami

Nigdy nie umieszczaj poświadczeń w obrazach kontenerów. Używaj montowania woluminów lub zmiennych środowiskowych.

Skanowanie obrazów

Regularnie skanuj obrazy kontenerów pod kątem luk używając narzędzi takich jak Trivy lub Snyk.

Zasada najmniejszych uprawnień

Uruchamiaj kontenery jako użytkownicy non-root i ogranicz możliwości do minimum wymaganego.

Monitorowanie sieci

Loguj i monitoruj połączenia wychodzące aby wykryć nietypową aktywność.

Dodaj logowanie do śledzenia działań Claude:

Okno terminala
# Dodaj do init-firewall.sh
# Loguj wszystkie zaakceptowane połączenia
sudo iptables -A OUTPUT -j LOG --log-prefix "CLAUDE-ALLOW: " --log-level 4
# Loguj wszystkie odrzucone połączenia
sudo iptables -A OUTPUT -j LOG --log-prefix "CLAUDE-DENY: " --log-level 4

Wyświetl logi za pomocą:

Okno terminala
sudo dmesg | grep CLAUDE-

Twórz izolowane środowiska dla różnych klientów:

Okno terminala
# Kontener klienta A
cd ~/projects/client-a
code . # Otwiera z devcontainer specyficznym dla klienta-a
# Kontener klienta B
cd ~/projects/client-b
code . # Całkowicie odizolowany od klienta-a

Używaj devcontainers w CI/CD:

.github/workflows/claude-test.yml
name: Claude Code Testing
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
container:
image: your-registry/claude-devcontainer:latest
options: --cap-add=NET_ADMIN
steps:
- uses: actions/checkout@v3
- name: Run Claude Code tests
run: |
claude -p "Uruchom wszystkie testy i napraw wszelkie błędy"

Standaryzuj środowiska deweloperskie:

  1. Utwórz kontener zespołu

    FROM anthropic/claude-devcontainer:base
    # Dodaj narzędzia specyficzne dla zespołu
    COPY .devcontainer/team-tools.sh /tmp/
    RUN /tmp/team-tools.sh
  2. Udokumentuj w README

    ## Pierwsze kroki
    1. Sklonuj to repozytorium
    2. Otwórz w VS Code
    3. Kliknij "Reopen in Container"
    4. Uruchom `claude` aby zacząć kodować!
    Wszystko jest wstępnie skonfigurowane - żadna konfiguracja nie jest wymagana.
Okno terminala
# Czyste przebudowanie
docker system prune -a
code . # Ponów próbę otwarcia w kontenerze
# Sprawdź zasoby Docker
docker system df
# Zwiększ pamięć Docker Desktop jeśli potrzeba
Okno terminala
# Testuj rozwiązywanie DNS
dig api.anthropic.com
# Sprawdź reguły firewall
sudo iptables -L -n -v
# Zweryfikuj rozwiązywanie dozwolonych domen
for domain in api.anthropic.com github.com; do
echo "Testowanie $domain:"
nc -zv $domain 443
done
Okno terminala
# Napraw problemy z własnością
sudo chown -R vscode:vscode /home/vscode
# Reset uprawnień Claude Code
rm -rf ~/.claude/settings.json
claude logout
claude login

Skonfiguruj zasoby kontenera w Docker Desktop lub docker-compose.yml:

version: '3.8'
services:
devcontainer:
build: .
mem_limit: 8g
cpus: 4
volumes:
- /tmp/.X11-unix:/tmp/.X11-unix:rw

Przyspiesz przebudowy z mount cache BuildKit:

# Cache pobierania pakietów
RUN --mount=type=cache,target=/var/cache/apt \
apt-get update && apt-get install -y git zsh
# Cache pakietów npm
RUN --mount=type=cache,target=/root/.npm \
npm install -g @anthropic-ai/claude-code

Integracja CI/CD

Automatyzuj przepływy pracy z Claude w swoich potokach

Przepływy zespołowe

Skaluj użycie devcontainer w całej organizacji

Wzmocnienie bezpieczeństwa

Zaawansowane konfiguracje bezpieczeństwa dla kontenerów