- होम
- डेव कंटेनर
- स्थानीय विकास
स्थानीय विकास
यह पेज उन डेवलपर्स के लिए है जो रिपॉजिटरी क्लोन करना, इमेज को स्थानीय रूप से बिल्ड करना, या Dockerfile को कस्टमाइज़ करना चाहते हैं। यदि आप केवल पहले से बिल्ड किए गए कंटेनर का उपयोग करना चाहते हैं, तो शुरू करना देखें।
रिपॉजिटरी क्लोन करें
Section titled “रिपॉजिटरी क्लोन करें”git clone https://github.com/f5-sales-demo/devcontainer.gitcd devcontainerप्रोजेक्ट संरचना
Section titled “प्रोजेक्ट संरचना”.├── Dockerfile # Multi-stage image build├── docker-compose.yml # Base compose — pulls pre-built image├── docker-compose.build.yml # Build override — use explicitly with -f├── .devcontainer/ # VS Code Dev Container config│ └── devcontainer.json├── entrypoint.sh # Container startup script├── .env.example # Example environment variables├── docs/ # Documentation site (Starlight)├── claude-config/ # Claude Code configuration files├── codex-config/ # Codex configuration├── pi-config/ # Pi configuration└── omp-config/ # Oh-My-Pi (omp) configurationबिल्ड फ़ाइल
Section titled “बिल्ड फ़ाइल”docker-compose.build.yml फ़ाइल स्थानीय बिल्ड सपोर्ट जोड़ती है। यह ऑटो-मर्ज नहीं होती — आपको इसे -f फ्लैग के साथ स्पष्ट रूप से पास करना होगा। इसका मतलब है कि docker compose up -d (या podman-compose up -d) हमेशा GHCR से पहले से बिल्ड की गई इमेज पुल करता है, चाहे आपने रिपॉजिटरी क्लोन की हो या नहीं।
आप सत्यापित कर सकते हैं कि साधारण docker compose up केवल पहले से बिल्ड की गई इमेज का उपयोग करता है (कोई build: कॉन्टेक्स्ट नहीं):
docker compose configस्पष्ट बिल्ड कॉन्फ़िगरेशन से तुलना करें:
docker compose -f docker-compose.yml -f docker-compose.build.yml configआप सत्यापित कर सकते हैं कि साधारण podman-compose up केवल पहले से बिल्ड की गई इमेज का उपयोग करता है (कोई build: कॉन्टेक्स्ट नहीं):
podman-compose configस्पष्ट बिल्ड कॉन्फ़िगरेशन से तुलना करें:
podman-compose -f docker-compose.yml -f docker-compose.build.yml configस्थानीय रूप से बिल्ड करना
Section titled “स्थानीय रूप से बिल्ड करना”docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --buildpodman-compose -f docker-compose.yml -f docker-compose.build.yml up -d --buildयह बिल्ड फ़ाइल को बेस कंपोज़ फ़ाइल के साथ मर्ज करता है, स्थानीय Dockerfile से इमेज बिल्ड करता है, और कंटेनर शुरू करता है। --build फ्लैग कैश्ड इमेज मौजूद होने पर भी रीबिल्ड को बाध्य करता है।
दो-चरण बिल्ड आर्किटेक्चर
Section titled “दो-चरण बिल्ड आर्किटेक्चर”Dockerfile Docker लेयर कैशिंग के लिए अनुकूलित दो-चरण बिल्ड का उपयोग करता है:
चरण 1: deps (स्थिर नींव, ~4.5 GB)
Section titled “चरण 1: deps (स्थिर नींव, ~4.5 GB)”ये लेयर केवल तभी रीबिल्ड होती हैं जब कोई वर्शन ARG बदला जाता है या APT पैकेज बदलते हैं। सामान्य टूल-केवल परिवर्तनों पर, BuildKit इस पूरे चरण को छोड़ देता है।
| अनुभाग | विषय-वस्तु |
|---|---|
| 1. APT रिपॉज़ | NodeSource, deadsnakes, HashiCorp, GitHub, Docker, Microsoft, Google Cloud, Dart SDK |
| 2. APT पैकेज | सिस्टम टूल, Node.js, Python, Java, Terraform, GitHub CLI, Docker इंजन, Azure CLI, PowerShell, लोकेल |
| 2b. सुरक्षा APT पैकेज | नेटवर्क विश्लेषण, वेब स्कैनर, पासवर्ड टूल, रिवर्स इंजीनियरिंग, फोरेंसिक (~80 पैकेज) |
| 3. Python बूटस्ट्रैप | सिमलिंक + get-pip.py के माध्यम से pip |
| 4. Go | आधिकारिक tarball (नवीनतम स्थिर, बिल्ड समय पर रिज़ॉल्व) |
| 5. Rust | rustup (सिस्टम-वाइड, नवीनतम स्थिर) |
| 6. Maven + Gradle | /opt में बाइनरी डाउनलोड |
| 7. VNC स्टैक | Xvfb, x11vnc, noVNC, fluxbox — ब्राउज़र के माध्यम से रिमोट डिस्प्ले |
| 8. Nerd फ़ॉन्ट | JetBrainsMono, Hack, FiraCode (नवीनतम रिलीज़) |
चरण 2: final (अस्थिर टूल + उपयोगकर्ता सेटअप, ~1.5 GB)
Section titled “चरण 2: final (अस्थिर टूल + उपयोगकर्ता सेटअप, ~1.5 GB)”ये लेयर अधिक बार बदलती हैं (npm/pip अपडेट, कॉन्फ़िग परिवर्तन) लेकिन जल्दी रीबिल्ड होती हैं क्योंकि भारी deps चरण कैश्ड होता है।
| अनुभाग | विषय-वस्तु |
|---|---|
| 9. AWS CLI v2 | आधिकारिक इंस्टॉलर |
| 10. बाइनरी टूल | kubectl, helm, tflint, terraform-docs, act, actionlint, yt-dlp, uv |
| 10b. अतिरिक्त बाइनरी | VS Code CLI, oc, yq, terragrunt, ibmcloud, fzf, hadolint, codex |
| 10c. Super-linter बाइनरी | shfmt, gitleaks, editorconfig-checker, trivy, clj-kondo, dotenv-linter, golangci-lint, goreleaser, kubeconform, protolint, scalafmt, ktlint |
| 10d. Java JAR टूल | checkstyle, google-java-format (रैपर स्क्रिप्ट) |
| 10e. PHP लिंटर | phpcs, phpstan, psalm (PHAR डाउनलोड) |
| 10f. PowerShell मॉड्यूल | PSScriptAnalyzer, arm-ttk |
| 10g. सुरक्षा बाइनरी | nuclei, subfinder, httpx, ffuf, gobuster, feroxbuster, dalfox, amass, trufflehog, grype, syft, bettercap (amd64) |
| 10h. OWASP ZAP | Java-आधारित वेब एप्लिकेशन स्कैनर |
| 10i. Ghidra | रिवर्स इंजीनियरिंग फ्रेमवर्क |
| 10j. Metasploit | एक्सप्लॉइटेशन फ्रेमवर्क (केवल amd64) |
| 11. npm वैश्विक टूल | claude-code, prettier, markdownlint-cli2, devcontainers-cli, playwright, pi-coding-agent, oh-my-pi |
| 12. pip टूल | pre-commit, ansible, black, pylint, yamllint, playwright |
| 12c. Ruby लिंटर | rubocop + एक्सटेंशन |
| 12e. Perl लिंटर मॉड्यूल | Perl::Critic एक्सटेंशन |
| 12f. Lua लिंटर | luacheck |
| 12g. R लिंटर | lintr |
| 12h. सुरक्षा Ruby gems | wpscan, evil-winrm |
| 12i. Git-क्लोन सुरक्षा टूल | testssl.sh, exploitdb (searchsploit), SecLists, docker-bench-security, recon-ng, spiderfoot |
| 13. Playwright ब्राउज़र | Chromium + playwright install --with-deps के माध्यम से सिस्टम डिपेंडेंसी |
| 13b. Chrome DevTools MCP | Chrome सिमलिंक + MCP प्री-कैश + हेडलेस पैच |
| 14. Homebrew | Linuxbrew (AI सहायक डिपेंडेंसी + फॉर्मेटर) |
| 15. ZSH प्लगइन | oh-my-zsh कस्टम प्लगइन |
| 16. शेल बूटस्ट्रैप | npm-global, tfenv, compinit |
| 17. Claude Code + Codex कॉन्फ़िग | टूल जागरूकता मेमोरी, प्रबंधित पॉलिसी, सेल्फ-टेस्ट स्क्रिप्ट, Codex कॉन्फ़िग |
| 18. एंट्रीपॉइंट | कंटेनर स्टार्टअप स्क्रिप्ट (बिल्कुल अंतिम COPY) |
टूल जोड़ना
Section titled “टूल जोड़ना”Dockerfile संपादित करें और अपने टूल को उपयुक्त अनुभाग में जोड़ें। जोड़ने के बाद रीबिल्ड करें:
docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --buildpodman-compose -f docker-compose.yml -f docker-compose.build.yml up -d --buildया VS Code में: Dev Containers → Rebuild Container।
APT पैकेज
Section titled “APT पैकेज”अनुभाग 2 के apt-get install ब्लॉक में जोड़ें:
RUN apt-get update && apt-get install -y --no-install-recommends \ your-package-here \ && apt-get clean \ && rm -rf /var/lib/apt/lists/*npm टूल
Section titled “npm टूल”अनुभाग 11 के npm install -g ब्लॉक में जोड़ें:
RUN npm install -g \ your-npm-toolpip टूल
Section titled “pip टूल”अनुभाग 12 के pip install ब्लॉक में जोड़ें:
RUN pip install --no-cache-dir --break-system-packages \ your-python-toolबाइनरी डाउनलोड
Section titled “बाइनरी डाउनलोड”अनुभाग 10 में जोड़ें या आर्किटेक्चर डिटेक्शन के साथ एक नई RUN लेयर बनाएं:
RUN ARCH=$(dpkg --print-architecture) \ && curl -fsSL "https://example.com/tool-linux-${ARCH}.tar.gz" \ | tar -xz -C /usr/local/bin toolबिल्ड कैश
Section titled “बिल्ड कैश”CI रजिस्ट्री-आधारित कैशिंग का उपयोग करता है — बिल्ड लेयर GitHub Actions कैश के बजाय GHCR (ghcr.io/f5-sales-demo/devcontainer:cache-*) में संग्रहीत होती हैं। यह 10 GB GHA कैश सीमा से बचाता है जो इस ~6 GB मल्टी-आर्किटेक्चर इमेज के लिए बार-बार पूर्ण रीबिल्ड का कारण बनती थी।
दो-चरण आर्किटेक्चर रजिस्ट्री कैश के साथ इस प्रकार काम करता है:
- टूल वर्शन अपडेट (npm, pip, बाइनरी टूल) — केवल
finalचरण रीबिल्ड (~5 मिनट) - कॉन्फ़िग फ़ाइल परिवर्तन (
claude-config/,entrypoint.sh) — केवल अंतिम कुछ लेयर रीबिल्ड (~1 मिनट) - नींव परिवर्तन (APT पैकेज, Go/Rust/Java वर्शन) — दोनों चरणों का पूर्ण रीबिल्ड (~30 मिनट)