[{"data":1,"prerenderedAt":334},["ShallowReactive",2],{"notice":3,"post-kali-linux-in-docker":30},{"id":4,"title":5,"body":6,"description":22,"extension":23,"meta":24,"navigation":25,"path":26,"seo":27,"stem":28,"__hash__":29},"page\u002Fnotice.md","Site relaunch",{"type":7,"value":8,"toc":18},"minimark",[9],[10,11,12,13,17],"p",{},"🎉 ",[14,15,16],"strong",{},"Welcome to the all-new Red ALT Key site",", rebuilt from scratch! Video Notes are back, as well as a proper accessibility panel in the header. Still polishing corners — thanks for bearing with us.",{"title":19,"searchDepth":20,"depth":20,"links":21},"",2,[],"🎉 Welcome to the all-new Red ALT Key site, rebuilt from scratch! Video Notes are back, as well as a proper accessibility panel in the header. Still polishing corners — thanks for bearing with us.","md",{},true,"\u002Fnotice",{"title":5,"description":22},"notice","VKMJnU1ySGlgFLHqcmtMB3LTbmKa7RxzFMeX2jhSEc4",{"id":31,"title":32,"body":33,"date":320,"description":321,"extension":23,"image":322,"meta":323,"navigation":25,"path":324,"readingTime":325,"seo":326,"stem":327,"tags":328,"videoUrl":332,"__hash__":333},"posts\u002Fposts\u002Fkali-linux-in-docker.md","How to Install Kali Linux in Docker",{"type":7,"value":34,"toc":311},[35,38,43,51,55,58,82,86,114,130,133,137,144,196,200,203,221,232,252,256,288,292,298,307],[10,36,37],{},"Running a full Kali Linux VM for the occasional tool or CTF is overkill. If you already run Docker in your home lab, you can get a disposable Kali environment up in under two minutes — and nuke it just as fast when you're done.",[39,40,42],"h2",{"id":41},"why-docker-instead-of-a-vm","Why Docker Instead of a VM?",[10,44,45,46,50],{},"A VM reserves RAM, disk, and CPU whether you're using it or not, and it takes a snapshot of an entire OS just to run a handful of tools. A container shares the host kernel and only packages the userland tools you actually need, so it starts in seconds and costs you almost nothing at rest. For a \"quick nmap scan\" or \"just need ",[47,48,49],"code",{},"hashcat"," for five minutes\" workflow, that's exactly the trade-off you want.",[39,52,54],{"id":53},"step-1-pull-the-official-image","Step 1: Pull the Official Image",[10,56,57],{},"Kali maintains an official Docker image, so there's no sketchy third-party build to trust:",[59,60,64],"pre",{"className":61,"code":62,"language":63,"meta":19,"style":19},"language-bash shiki shiki-themes github-light github-dark","docker pull kalilinux\u002Fkali-rolling\n","bash",[47,65,66],{"__ignoreMap":19},[67,68,71,75,79],"span",{"class":69,"line":70},"line",1,[67,72,74],{"class":73},"sScJk","docker",[67,76,78],{"class":77},"sZZnC"," pull",[67,80,81],{"class":77}," kalilinux\u002Fkali-rolling\n",[39,83,85],{"id":84},"step-2-run-it-interactively","Step 2: Run It Interactively",[59,87,89],{"className":61,"code":88,"language":63,"meta":19,"style":19},"docker run -it --name kali-box kalilinux\u002Fkali-rolling \u002Fbin\u002Fbash\n",[47,90,91],{"__ignoreMap":19},[67,92,93,95,98,102,105,108,111],{"class":69,"line":70},[67,94,74],{"class":73},[67,96,97],{"class":77}," run",[67,99,101],{"class":100},"sj4cs"," -it",[67,103,104],{"class":100}," --name",[67,106,107],{"class":77}," kali-box",[67,109,110],{"class":77}," kalilinux\u002Fkali-rolling",[67,112,113],{"class":77}," \u002Fbin\u002Fbash\n",[115,116,117,124],"ul",{},[118,119,120,123],"li",{},[47,121,122],{},"-it"," gives you an interactive TTY attached to the container.",[118,125,126,129],{},[47,127,128],{},"--name kali-box"," makes it easy to reference later instead of a random hash.",[10,131,132],{},"You'll land in a bare shell — the rolling image intentionally ships minimal, so you install only what you need.",[39,134,136],{"id":135},"step-3-install-the-tools-you-actually-use","Step 3: Install the Tools You Actually Use",[10,138,139,140,143],{},"The base image doesn't include the full ",[47,141,142],{},"kali-linux-default"," metapackage by design (image size). Grab what you need:",[59,145,147],{"className":61,"code":146,"language":63,"meta":19,"style":19},"apt update && apt install -y kali-linux-headless\n# or, for a specific tool:\napt install -y nmap hashcat john\n",[47,148,149,172,178],{"__ignoreMap":19},[67,150,151,154,157,161,163,166,169],{"class":69,"line":70},[67,152,153],{"class":73},"apt",[67,155,156],{"class":77}," update",[67,158,160],{"class":159},"sVt8B"," && ",[67,162,153],{"class":73},[67,164,165],{"class":77}," install",[67,167,168],{"class":100}," -y",[67,170,171],{"class":77}," kali-linux-headless\n",[67,173,174],{"class":69,"line":20},[67,175,177],{"class":176},"sJ8bj","# or, for a specific tool:\n",[67,179,181,183,185,187,190,193],{"class":69,"line":180},3,[67,182,153],{"class":73},[67,184,165],{"class":77},[67,186,168],{"class":100},[67,188,189],{"class":77}," nmap",[67,191,192],{"class":77}," hashcat",[67,194,195],{"class":77}," john\n",[39,197,199],{"id":198},"step-4-keep-it-around-or-dont","Step 4: Keep It Around (or Don't)",[10,201,202],{},"If you want the container to persist between sessions instead of being wiped on exit:",[59,204,206],{"className":61,"code":205,"language":63,"meta":19,"style":19},"docker start -ai kali-box\n",[47,207,208],{"__ignoreMap":19},[67,209,210,212,215,218],{"class":69,"line":70},[67,211,74],{"class":73},[67,213,214],{"class":77}," start",[67,216,217],{"class":100}," -ai",[67,219,220],{"class":77}," kali-box\n",[10,222,223,224,227,228,231],{},"If you'd rather keep things fully disposable — which is the whole point of doing this in Docker — just re-run the ",[47,225,226],{},"docker run"," command each time and add ",[47,229,230],{},"--rm"," so it cleans up after itself automatically:",[59,233,235],{"className":61,"code":234,"language":63,"meta":19,"style":19},"docker run -it --rm kalilinux\u002Fkali-rolling \u002Fbin\u002Fbash\n",[47,236,237],{"__ignoreMap":19},[67,238,239,241,243,245,248,250],{"class":69,"line":70},[67,240,74],{"class":73},[67,242,97],{"class":77},[67,244,101],{"class":100},[67,246,247],{"class":100}," --rm",[67,249,110],{"class":77},[67,251,113],{"class":77},[39,253,255],{"id":254},"a-few-gotchas","A Few Gotchas",[115,257,258,276,282],{},[118,259,260,263,264,267,268,271,272,275],{},[14,261,262],{},"Networking tools that need raw sockets"," (like some ",[47,265,266],{},"nmap"," scan types) require the container to run with extra privileges: add ",[47,269,270],{},"--cap-add=NET_RAW --cap-add=NET_ADMIN"," rather than reaching for ",[47,273,274],{},"--privileged",", which grants far more than you need.",[118,277,278,281],{},[14,279,280],{},"GUI tools won't work out of the box."," This setup is CLI-only. If you need a desktop environment, you're back to a VM.",[118,283,284,287],{},[14,285,286],{},"This isn't a security boundary."," Don't treat the container as isolation from anything you don't trust — it shares your host kernel.",[39,289,291],{"id":290},"where-this-fits-in-a-home-lab","Where This Fits in a Home Lab",[10,293,294,295,297],{},"This pattern — official image, disposable container, ",[47,296,230],{}," by default — is how I run most short-lived tools in the lab now. It keeps the \"real\" machines clean and means every tool run starts from a known-good state.",[10,299,300,301,306],{},"If you want the full home lab context this fits into, check out the ",[302,303,305],"a",{"href":304},"\u002Fposts\u002Fgetting-started-with-a-home-lab","Home Lab getting-started guide",".",[308,309,310],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":19,"searchDepth":20,"depth":20,"links":312},[313,314,315,316,317,318,319],{"id":41,"depth":20,"text":42},{"id":53,"depth":20,"text":54},{"id":84,"depth":20,"text":85},{"id":135,"depth":20,"text":136},{"id":198,"depth":20,"text":199},{"id":254,"depth":20,"text":255},{"id":290,"depth":20,"text":291},"2026-08-17","Spin up a disposable Kali Linux environment in Docker in minutes — no dual-boot, no dedicated VM, no fuss.",null,{},"\u002Fposts\u002Fkali-linux-in-docker","7 min read",{"title":32,"description":321},"posts\u002Fkali-linux-in-docker",[329,330,331],"Docker","Linux","Home Lab","https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=5pJVwDmmrDw","DxiwIW4Hbb_InSS9S_pCnA-BMzkXCscZreeKf8hCOrA",1788843378949]