Development containers (Devcontainers)
Claude Code'u bir dev container içinde çalıştırarak ekip genelinde tutarlı ve izole geliştirme ortamları oluşturabilirsiniz. Bir development container (dev container), her mühendisin aynı, izole edilmiş ortamda çalışmasını sağlar. Claude Code bu container içinde kurulduğunda, Claude'ın çalıştırdığı komutlar container içinde yürütülürken, proje dosyalarınızdaki düzenlemeler yerel deponuzda görünür.
Uyarı: Dev container önemli korumalar sağlasa da, hiçbir sistem tüm saldırılara karşı tamamen bağışık değildir. --dangerously-skip-permissions ile çalıştırıldığında, dev container'lar kötü niyetli bir projenin container içinde erişilebilen her şeyi (Claude Code kimlik bilgileri dahil) dışarı sızdırmasını engellemez. Dev container'ları yalnızca güvenilir depolarla geliştirme yaparken kullanın ve Claude'ın aktivitelerini izleyin. ~/.ssh veya bulut kimlik bilgisi dosyaları gibi host sırlarını container'a mount etmekten kaçının; repo kapsamlı veya kısa ömürlü token'ları tercih edin.
Dev container'lar editörünüzle nasıl çalışır (How dev containers work with your editor)
Bir dev container, Docker container'ı olarak yerel makinenizde veya GitHub Codespaces gibi bir bulut hostunda çalışır. VS Code, GitHub Codespaces, JetBrains IDE veya Cursor gibi Dev Containers spesifikasyonunu destekleyen bir editör bu container'a bağlanır: dosyaları her zamanki gibi görüntüleyip düzenlersiniz, ancak entegre terminal, dil sunucuları ve derleme araçları container içinde çalışır. Düz Vim gibi dev container desteği olmayan editörler bu iş akışının parçası değildir.
Claude Code container içinde çalıştığı için, projenizin araç zincirindeki diğer araçlarla aynı dosyaları, bağımlılıkları ve araçları görür. VS Code'da Claude Code eklenti panelini veya entegre terminalde claude komutunu kullanabilirsiniz; her ikisi de container içinde çalışır ve aynı ~/.claude yapılandırmasını paylaşır.
Claude Code'u dev container'ınıza ekleme (Add Claude Code to your dev container)
Claude Code, Claude Code Dev Container Feature aracılığıyla herhangi bir dev container'a kurulur. Ayarlar, VS Code, GitHub Codespaces veya JetBrains IDE'ler gibi Dev Containers spesifikasyonunu destekleyen herhangi bir araçla çalışır. Aşağıdaki adımlar VS Code'u örnek olarak kullanır. Container'ı VS Code veya Codespaces'te açtığınızda, özellik ayrıca Claude Code VS Code eklentisini de ekler; diğer editörler bu kısmı yok sayar.
Yeni başlayanlar için: VS Code Dev Containers eğitimi, Docker'ı, eklentiyi kurma ve ilk container'ınızı açma adımlarını anlatır. Daha sağlam bir örnek için Referans container'ı inceleyin.
1. devcontainer.json dosyasını oluşturun veya güncelleyin
Aşağıdakini deponuzda .devcontainer/devcontainer.json olarak kaydedin veya features bloğunu mevcut dosyanıza ekleyin. Sondaki sürüm etiketi (:1.0 gibi), özelliğin kurulum betiğini sabitler, Claude Code sürümünü değil. Özellik en son Claude Code'u kurar ve Claude Code varsayılan olarak container içinde kendini otomatik günceller. CLI sürümünü sabitlemek veya otomatik güncellemeyi devre dışı bırakmak için "Kurum politikasını zorunlu kıl" bölümüne bakın.
{
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"features": {
"ghcr.io/anthropics/devcontainer-features/claude-code:1.0": {}
}
}
image satırını projenizin temel imajıyla değiştirin veya mevcut dosyanız bir Dockerfile kullanıyorsa bu satırı kaldırın.
2. Container'ı yeniden derleyin (Rebuild)
VS Code Komut Paleti'ni Mac'te Cmd+Shift+P, Windows ve Linux'ta Ctrl+Shift+P ile açın ve Dev Containers: Rebuild Container komutunu çalıştırın. Diğer araçlar için ilgili aracın yeniden derleme işlemini takip edin.
3. Claude Code'da oturum açın
Yeniden derlenen container'da bir terminal açın ve claude komutunu çalıştırın, ardından kimlik doğrulama istemini takip edin. Kimlik doğrulama isteminde gördükleriniz sağlayıcınıza bağlıdır:
- Anthropic: Tarayıcı üzerinden Claude veya Anthropic Console hesabınızla oturum açın
- Amazon Bedrock, Google Vertex AI veya Microsoft Foundry: Claude Code bulut sağlayıcı kimlik bilgilerinizi kullanır, tarayıcı istemi olmaz
Bulut sağlayıcıları için, kimlik bilgilerini host'tan mount etmek yerine containerEnv, bir Codespaces secret'ı veya bulut iş yükü kimliği aracılığıyla container'a ortam değişkenleri olarak iletin.
Tarayıcı oturum açma işlemi tamamlanır ancak geri arama container'a ulaşmazsa, tarayıcıda gösterilen kodu kopyalayın ve terminaldeki "Paste code here if prompted" istemine yapıştırın. Bu, editörün port yönlendirmesi localhost geri aramasını yönlendirmediğinde gerçekleşebilir.
Kimlik doğrulama ve ayarları yeniden derlemeler arasında kalıcı yapma (Persist authentication and settings across rebuilds)
Varsayılan olarak, container'ın home dizini yeniden derlemede atılır, bu nedenle mühendisler her seferinde tekrar oturum açmak zorundadır. Claude Code, kimlik doğrulama token'ını, kullanıcı ayarlarını ve oturum geçmişini ~/.claude altında saklar. Bu durumu yeniden derlemeler arasında korumak için bu yola adlandırılmış bir volume mount edin.
Aşağıdaki örnek, node kullanıcısının home dizinine bir volume mount eder:
"mounts": [
"source=claude-code-config,target=/home/node/.claude,type=volume"
]
/home/node kısmını container'ınızın remoteUser değerinin home diziniyle değiştirin. Volume'ü ~/.claude dışında bir yere mount ederseniz, Claude Code'un orada okuyup yazması için CLAUDE_CONFIG_DIR'i mount yoluna ayarlayın.
Durumu proje başına izole etmek için, kaynak adına ${devcontainerId} değişkenini ekleyin. Referans yapılandırması bu amaçla source=claude-code-config-${devcontainerId} kullanır.
GitHub Codespaces'te, ~/.claude bir codespace'i durdurup başlatma arasında kalıcıdır, ancak container'ı yeniden derlediğinizde yine de temizlenir, bu nedenle volume mount yukarıdaki gibi burada da geçerlidir. Kimlik doğrulamayı codespace'ler arasında taşımak için, ANTHROPIC_API_KEY veya claude setup-token komutundan alınan CLAUDE_CODE_OAUTH_TOKEN'ı bir Codespaces secret'ı olarak saklayın.
Kurum politikasını zorunlu kılma (Enforce organization policy)
Dev container, kurum politikasını uygulamak için uygun bir yerdir çünkü aynı imaj ve yapılandırma her mühendisin makinesinde çalışır. Claude Code, Linux'ta /etc/claude-code/managed-settings.json dosyasını okur ve bunu ayarlar hiyerarşisinde en yüksek öncelikle uygular, böylece buradaki değerler bir mühendisin ~/.claude veya projenin .claude/ dizininde ayarladığı her şeyi geçersiz kılar.
Dosyayı Dockerfile'ınızdan kopyalayın:
RUN mkdir -p /etc/claude-code
COPY managed-settings.json /etc/claude-code/managed-settings.json
Dockerfile depoda bulunduğu için, yazma erişimi olan herkes bu adımı değiştirebilir veya kaldırabilir. Mühendislerin depo dosyalarını düzenleyerek atlatamayacağı politikalar için, managed ayarları sunucu tarafından yönetilen ayarlar veya MDM aracılığıyla iletin.
Container'daki her Claude Code oturumuna uygulanacak ortam değişkenlerini ayarlamak için, bunları devcontainer.json dosyasında containerEnv'e ekleyin. Aşağıdaki örnek telemetri ve hata raporlamayı devre dışı bırakır ve Claude Code'un kurulumdan sonra otomatik güncellenmesini engeller:
"containerEnv": {
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
"DISABLE_AUTOUPDATER": "1"
}
Dev Container Feature her zaman en son Claude Code sürümünü kurar. Tekrarlanabilir derlemeler için belirli bir Claude Code sürümünü sabitlemek isterseniz, özelliği kullanmak yerine Dockerfile'ınızdan npm install -g @anthropic-ai/claude-code@X.Y.Z ile kurun ve yukarıdaki gibi DISABLE_AUTOUPDATER'ı ayarlayın.
İzin kuralları, araç kısıtlamaları ve MCP sunucu izin listeleri dahil politika kontrollerinin tam listesi için "Claude Code'u kurumunuz için ayarlama" bölümüne bakın. MCP sunucularını container içinde kullanılabilir kılmak için, bunları depo kökünde bir .mcp.json dosyasında proje kapsamında tanımlayın. Yerel stdio sunucularının bağlı olduğu ikili dosyaları Dockerfile'ınıza kurun ve uzak sunucu alan adlarını ağ izin listenize ekleyin.
Ağ çıkışını kısıtlama (Restrict network egress)
Container'ın giden trafiğini yalnızca Claude Code'un ihtiyaç duyduğu alan adlarıyla sınırlayabilirsiniz. Çıkarım ve kimlik doğrulama alan adları için Ağ erişim gereksinimleri bölümüne ve isteğe bağlı telemetri ve hata raporlama bağlantıları ile bunları nasıl devre dışı bırakacağınız için Telemetri hizmetleri bölümüne bakın.
Referans container, Claude Code ve geliştirme araçlarınızın ihtiyaç duyduğu alan adları dışındaki tüm giden trafiği engelleyen bir init-firewall.sh betiği içerir. Bir container içinde güvenlik duvarı çalıştırmak ek izinler gerektirir, bu nedenle referans, runArgs aracılığıyla NET_ADMIN ve NET_RAW yeteneklerini ekler. Güvenlik duvarı betiği ve bu yetenekler Claude Code'un kendisi için gerekli değildir: bunları çıkarabilir ve kendi ağ kontrollerinize güvenebilirsiniz.
İzin istemleri olmadan çalıştırma (Run without permission prompts)
Container, Claude Code'u root olmayan bir kullanıcı olarak çalıştırdığından ve komut yürütmeyi container ile sınırladığından, gözetimsiz çalışma için --dangerously-skip-permissions bayrağını kullanabilirsiniz. CLI, root olarak başlatıldığında bu bayrağı reddeder, bu nedenle remoteUser'ın root olmayan bir hesaba ayarlandığından emin olun.
İzin istemlerini atlamak, araç çağrılarını çalıştırılmadan önce inceleme fırsatınızı ortadan kaldırır. Claude, bind-mounted çalışma alanındaki herhangi bir dosyayı (host'unuzda doğrudan görünen) ve container'ın ağ politikasının izin verdiği her şeye erişebilir. Bu bayrağı, atlatılan bir oturumun erişebileceklerini sınırlamak için yukarıdaki ağ çıkış kısıtlamalarıyla birlikte kullanın.
Daha az istem istiyor ancak güvenlik kontrollerini tamamen devre dışı bırakmak istemiyorsanız, bunun yerine eylemleri çalıştırmadan önce bir sınıflandırıcı tarafından inceleyen auto mode'u düşünün. Mühendislerin --dangerously-skip-permissions kullanmasını tamamen engellemek için, managed ayarlarında permissions.disableBypassPermissionsMode'u "disable" olarak ayarlayın.
Referans container'ı deneyin (Try the reference container)
anthropics/claude-code deposu, CLI, çıkış güvenlik duvarı, kalıcı volumeler ve Zsh tabanlı bir kabuğu birleştiren örnek bir dev container içerir. Bakımı yapılan bir temel imajdan ziyade çalışan bir örnek olarak sağlanmıştır; kendi yapılandırmanıza uygulamadan önce parçaların nasıl bir araya geldiğini görmek için kullanın.
Ön koşulları kurun
VS Code ve Dev Containers eklentisini kurun.
Referansı klonlayın
Claude Code deposunu klonlayın ve VS Code'da açın.
Container'da yeniden açın
İstendiğinde "Reopen in Container"a tıklayın veya Komut Paleti'nden "Dev Containers: Reopen in Container"ı çalıştırın.
Claude Code'u başlatın
Container derlemeyi tamamladığında, Ctrl+`` ile bir terminal açın ve oturum açmak ile ilk oturumunuzu başlatmak için claude` komutunu çalıştırın.
Bu yapılandırmayı kendi projenizle kullanmak için, .devcontainer/ dizinini deponuza kopyalayın ve Dockerfile'ı araç zincirinize göre ayarlayın veya yalnızca özelliği mevcut kurulumunuza eklemek için "Claude Code'u dev container'ınıza ekleme" bölümüne dönün.
Referans yapılandırması üç dosyadan oluşur. Hiçbiri Claude Code'u kendi dev container'ınıza özellik aracılığıyla eklerken gerekli değildir, ancak parçaları birleştirmenin bir yolunu gösterirler:
| Dosya | Amaç |
|---|---|
devcontainer.json |
Volume mount'ları, runArgs yetenekleri, VS Code eklentileri ve containerEnv |
Dockerfile |
Temel imaj, geliştirme araçları ve Claude Code kurulumu |
init-firewall.sh |
İzin verilen alan adları dışındaki tüm giden ağ trafiğini engeller |
Sonraki adımlar (Next steps)
Claude Code dev container'ınızda çalışırken, aşağıdaki sayfalar kuruluş dağıtımının geri kalanını kapsar: kimlik doğrulama yolu seçme, depo dışında yönetilen politika dağıtma, kullanımı izleme ve Claude Code'un ne saklayıp gönderdiğini anlama.
- Claude Code'u kurumunuz için ayarlama: Kimlik doğrulama sağlayıcısı seçme, politikanın cihazlara nasıl ulaşacağına karar verme ve dağıtımı planlama
- Sunucu tarafından yönetilen ayarlar: Mühendislerin depo dosyalarını düzenleyerek atlatamaması için Claude.ai yönetici konsolundan yönetilen politika dağıtma
- Kullanımı izleme ve aktiviteyi denetleme: OpenTelemetry metriklerini dışa aktarma ve ekibinizin ne çalıştırdığını inceleme
- Ağ erişim gereksinimleri: Proxy'ler ve güvenlik duvarları için tam alan adı izin listesi
- Telemetri hizmetleri ve devre dışı bırakma: Claude Code'un varsayılan olarak ne gönderdiği ve bunu devre dışı bırakan ortam değişkenleri
- .claude dizinini keşfetme: Volume mount'un içerdikleri: kimlik bilgileri, ayarlar ve oturum geçmişi
- Güvenlik modeli: Claude Code'un izin sistemi, sandboxing ve prompt-enjeksiyon korumalarının nasıl bir araya geldiği
- İzin modları: Plan modundan auto mode'a ve bypass'a kadar tam aralık ve her birinin ne zaman kullanılacağı
Örnek kullanım senaryosu
Bir yazılım ekibi, Claude Code'u tüm geliştiriciler için tutarlı bir ortamda çalıştırmak istiyor. Ekip lideri aşağıdaki adımları izler:
Dev container yapılandırmasını oluşturma: Ekip lideri, depo kökünde
.devcontainer/devcontainer.jsondosyasını oluşturur ve Claude Code özelliğini ekler:{ "image": "mcr.microsoft.com/devcontainers/base:ubuntu", "features": { "ghcr.io/anthropics/devcontainer-features/claude-code:1.0": {} } }Kalıcı yapılandırma ekleme: Kimlik doğrulamanın yeniden derlemelerde kaybolmaması için volume mount eklenir:
"mounts": [ "source=claude-code-config-${devcontainerId},target=/home/node/.claude,type=volume" ]Kurum politikasını uygulama: Ekip lideri,
managed-settings.jsondosyasını oluşturur ve Dockerfile ile/etc/claude-code/dizinine kopyalar. Ayrıca telemetriyi devre dışı bırakmak içincontainerEnvekler:"containerEnv": { "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1" }Container'ı yeniden derleme: Ekip üyeleri VS Code'da
Dev Containers: Rebuild Containerkomutunu çalıştırır.Oturum açma: Her geliştirici terminalde
claudekomutunu çalıştırır ve tarayıcıda Anthropic hesabıyla oturum açar. Volume mount sayesinde, bir sonraki yeniden derlemede tekrar oturum açmaları gerekmez.Günlük kullanım: Geliştiriciler,
claudekomutunu kullanarak kod tabanında değişiklik yapar, hata ayıklar ve kod incelemeleri yapar. Tüm komutlar container içinde çalışır, böylece yerel makinede bağımlılık çakışması olmaz.