{"id":30092736,"url":"https://github.com/rob-bl8ke/llm-dev-container","last_synced_at":"2026-05-16T08:34:26.909Z","repository":{"id":307823891,"uuid":"1030788235","full_name":"rob-bl8ke/llm-dev-container","owner":"rob-bl8ke","description":"A fully containerized, memory-efficient development environment for LLM and AI workflows using Conda, Mamba, and Jupyter Lab.","archived":false,"fork":false,"pushed_at":"2025-08-02T11:34:50.000Z","size":6,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-02T13:19:55.311Z","etag":null,"topics":["anaconda","docker","docker-compose","jupyterlab","llm","mamba"],"latest_commit_sha":null,"homepage":"","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rob-bl8ke.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-02T10:23:42.000Z","updated_at":"2025-08-02T11:34:54.000Z","dependencies_parsed_at":"2025-08-02T13:19:57.605Z","dependency_job_id":"5ca5028a-f4a2-46bd-a65b-e1a4babcdf7f","html_url":"https://github.com/rob-bl8ke/llm-dev-container","commit_stats":null,"previous_names":["rob-bl8ke/llm-dev-container"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/rob-bl8ke/llm-dev-container","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rob-bl8ke%2Fllm-dev-container","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rob-bl8ke%2Fllm-dev-container/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rob-bl8ke%2Fllm-dev-container/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rob-bl8ke%2Fllm-dev-container/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rob-bl8ke","download_url":"https://codeload.github.com/rob-bl8ke/llm-dev-container/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rob-bl8ke%2Fllm-dev-container/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269548500,"owners_count":24436113,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-09T02:00:10.424Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["anaconda","docker","docker-compose","jupyterlab","llm","mamba"],"created_at":"2025-08-09T08:03:53.523Z","updated_at":"2026-05-16T08:34:21.884Z","avatar_url":"https://github.com/rob-bl8ke.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\n# 🧠 LLM Engineering (Dockerized Dev Environment)\n\nThis project sets up a **fully containerized** environment for developing with LLMs, AI libraries, and Jupyter Lab — with **no local Conda or Python installation** required.\n\n‼️Ensure to take a look at the possible gotchas getting this to run for the first time.\n\n## 🔧 What's Included\n\n- **Miniconda** + Mamba for Python environment management\n- **Tiered install**: splits dependencies to avoid memory issues\n- **Jupyter Lab** as the main UI\n- Preinstalled libraries for:\n  - 📊 Data science: pandas, numpy, matplotlib, scikit-learn\n  - 🤖 AI/LLM: torch, transformers, langchain, sentence-transformers\n  - 🧰 Tools: dotenv, openai, pydub, psutil, twilio\n\n## 🚀 Getting Started\n\n### 1. Clone \u0026 build\n\n```bash\ngit clone https://github.com/your-org/llm_engineering.git\ncd llm_engineering\ndocker compose up --build\n````\n\n### 2. Access Jupyter\n\nVisit [http://localhost:8888](http://localhost:8888) in your browser. The token will appear in the console log.\n\n## 📦 Daily Development\n\nUsing `docker compose down` is quite destructive to use often because of the length of time it takes to do a `docker compose up`. Better to stop the environment and restart it again until you have to clean up resources.\n\n```bash\ndocker compose stop\ndocker compose start\n```\nwhich is the equivalent of...\n```bash\ndocker compose restart\n```\n\n\n## 🔐 API Keys via `.env`\n\nCreate a `.env` file in the project root:\n\n```\nOPENAI_API_KEY=sk-xxx\nGOOGLE_API_KEY=xxx\nANTHROPIC_API_KEY=xxx\n```\n\nThese are accessible in your notebooks using `dotenv`.\n\n## 💡 Notes\n\n* All dependencies are installed inside the container.\n* Environment is built in tiers to avoid memory crashes.\n* Your project files are mounted into the container via volume.\n\n## 📦 Clean Up\n\n```bash\ndocker compose down         # Stop and remove the container\ndocker system prune -a      # Remove all images/containers (careful!)\n```\n\n# Environment without spinning up ollama locally\n\nIf all you want to do is run labs and connect to LLM cloud APIs then you will not need a local installation of `ollama`. In this case, go with a simpler version of `docker-compose.yml` that does not depend on an `ollama` container.\n\n```docker\nservices:\n  llm-env:\n    build:\n      context: .\n    container_name: llm-engineering\n    volumes:\n      - .:/workspace\n    ports:\n      - \"8888:8888\"\n    entrypoint: [\"/workspace/bootstrap.sh\"]\n    tty: true\n    stdin_open: true\n```\n\n# 💥 Gotchas\n\n### `bootstrap.sh` no such file or directory\n\nWhen trying to do a `docker compose up` you run into the issue below:\n\n```\n =\u003e resolving provenance for metadata file                                                                                                                                                                                            0.0s\n[+] Running 3/3\n ✔ llm-env                            Built                                                                                                                                                                                           0.0s \n ✔ Network llm-dev-container_default  Created                                                                                                                                                                                         0.1s \n ✔ Container llm-dev-container        Created                                                                                                                                                                                         0.1s \nAttaching to llm-dev-container\nllm-dev-container  | exec /workspace/bootstrap.sh: no such file or directory\nllm-dev-container exited with code 255\n```\n\nWhat's really happening (if you're on a Windows machine) is that if you run this in your editor (eg. Visual Studio Code) after cloning the repository, your`bootstrap.sh` file is replacing `\\n` with `\\r\\n` (CRLF) the classic line-ending issue. When the file is copied to the container the file cannot be read properly by the Linux system. To fix this, the easiest thing to do is to ensure that your file is changed to LF instead of CRLF. You can do this in Visual Studio on the bottom status bar or simply set the defaults in settings. ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frob-bl8ke%2Fllm-dev-container","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frob-bl8ke%2Fllm-dev-container","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frob-bl8ke%2Fllm-dev-container/lists"}