Kali LinuxをDockerにインストール
Kali LinuxをDockerにインストールすることで、軽量かつ高速にペネトレーションテスト環境を構築できます。しかし、仮想マシンとの違いや、Docker版Kali Linuxの制限事項を理解せずに環境構築を始めると、思わぬところでつまずくことがあります。
本記事では、Docker版Kali Linuxのメリットや制限事項を整理しながら、実際のインストール手順と使い方を解説します。
Kali LinuxをDockerに構築する前に知っておくべきこと
Kali Linuxは脆弱性診断やペネトレーションテストの分野において、広く利用されているLinuxディストリビューションです。従来は仮想マシン(VirtualBoxやVMwareなど)上で動かすことが一般的でしたが、近年はDockerコンテナとして利用するケースも増えています。
ただし、Docker版Kali Linuxは仮想マシン版とは仕組みが異なるため、事前に違いを理解しておくことが重要です。
Kali LinuxをDockerで動かすメリット
【メリット1】ホストOSを汚さない
セキュリティツールをホストOSに直接インストールすると、依存関係に問題が生じる場合があります。Kali Linuxには多数のセキュリティツールが標準搭載されており、これらをDockerコンテナ上で実行することで、ホストOSの設定やライブラリを変更せず、安全に利用できます。
【メリット2】環境構築が速い
仮想マシンの場合、仮想イメージのダウンロードからインストール、アップデート、初期設定の完了までに、2〜3時間程度かかることがあります。
一方、Dockerであればdocker pull、docker runコマンドを実行するだけで環境が立ち上がります。イメージのダウンロード時間を含めても、数分程度で完了します。
【メリット3】リソース消費が少ない
仮想マシンの場合、ホストOSとは別にゲストOSのカーネルを動作させるため、メモリを2〜4GB程度専有することが一般的です。Dockerコンテナはホストカーネルを共有するため、最小構成では数十MB〜数百MB程度のメモリ消費に抑えられます。
Docker版Kali Linuxの制限事項
DockerでKali Linuxを動かす場合、以下の制限事項をあらかじめ把握しておく必要があります。
【制限事項1】セキュリティツールが含まれていない
Kali LinuxのDockerイメージは最小構成で提供されています。Nmap、Metasploit、skipfishといったセキュリティツールは含まれておらず、必要なものを個別にインストールする必要があります。
【制限事項2】GUIアプリケーションが使えない
Dockerコンテナは標準でディスプレイサーバーを持たないため、GUIツールを起動することができません。別途設定を行うことで対応可能ですが、設定が非常に複雑なため、GUIツールを使う場合は仮想マシンでの利用が現実的です。
【制限事項3】カーネル操作・ネットワーク操作に制限がある
ハイパーバイザー方式を採用している仮想マシンとは異なり、Dockerコンテナの場合、カーネルやネットワーク機能はホストOSと共有です。そのため、パケットキャプチャや無線LAN、Bluetooth関連のツールは、機能制限により利用できない場合があります。
【制限事項4】systemdが動作しない
Kali LinuxのDockerイメージはsystemdを起動しません。そのため、systemctlでのサービス管理ができず、一部のツールはサービスとして常駐起動させる代わりに手動で実行する必要があります。
Kali Linuxを動かすなら「仮想マシン」or「Docker」
結論から言えば、用途によって使い分けることが最善です。どちらが優れているという単純な話ではありません。
ただし、脆弱性診断やペネトレーションテストを学習する初期段階では、まず仮想マシンをメイン環境として構築し、Dockerは補助的な環境として活用することを推奨します。仮想マシンはKali Linuxの標準的な利用環境に近く、公式ドキュメントやトレーニング教材に沿った学習がしやすいためです。
仮想マシンが向いているケース
- Kali Linuxにプリインストールされているセキュリティツールを包括的に使いたい
- 学習目的でKali Linuxを使用する
- GUIツール(Burp Suite、Wireshark等)を多用する
- 独立したネットワーク環境を構築したい(複数VMによるネットワーク環境)
- 日常業務でKali Linuxを使用する
- カーネルレベルの操作が必要

Dockerが向いているケース
- ホストマシンのスペックが限られている
- 使い捨て環境を何度も作成したい
- CLIツールのみ利用
- 特定のセキュリティツールだけ使用する
Kali LinuxをDockerにインストール
- Dockerがインストール済みであること
- インターネットに接続できること
まだ、Dockerを導入していない場合、ご利用の環境(OS)に応じて、Dockerをインストールして下さい。Ubuntuの場合、「UbuntuにDockerを導入する」をご覧ください。
このセクションでは、Ubuntu環境を使用して、実際にDockerにKali Linuxをインストールした手順を解説します。
- Ubuntu 24.04
- Docker version 29.3.1
Dockerイメージのダウンロード
まず、Docker HubからKali Linuxの公式イメージを取得します。
$ docker pull kalilinux/kali-rollingKali Linuxの公式イメージは、kalilinux/kali-rollingとして公開されており、ローリングリリース方式で常に最新のパッケージが提供されています。
実行結果
Using default tag: latest
latest: Pulling from kalilinux/kali-rolling
c5e21c932646: Pull complete
Digest: sha256:a3849f99f9f187122de4822341c49e55d250a771f2dbc5cfd56a146017e0e6ae
Status: Downloaded newer image for kalilinux/kali-rolling:latest
docker.io/kalilinux/kali-rolling:latestイメージサイズは非常に軽量で、ダウンロードが完了すると、「Status: Downloaded newer image for ・・・」と表示されます。
ダウンロードしたDockerイメージを確認
ローカルに保存されているイメージの一覧を表示
$ docker image ls
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
kalilinux/kali-rolling:latest a3849f99f9f1 187MB 52.2MBIMAGE:イメージ名 + タグID:イメージを一意に識別するIDDISK USAGE:ディスク上で実際に使用している容量CONTENT SIZE:イメージの論理的なサイズEXTRA:イメージに関する追加情報
仮想マシン用のイメージファイル(約4GB)と比較すると、Dockerイメージは非常に軽量です。ただし、Kali LinuxのDockerイメージは最小構成のベースイメージとして提供されているため、セキュリティツールは別途インストールする必要があります。
コンテナの起動
取得したイメージからコンテナを起動します。
$ docker run -it kalilinux/kali-rolling-i:標準入力(stdin)をコンテナに接続する-t:疑似TTYをコンテナに割り当てるkalilinux/kali-rolling:使用するDockerイメージ
コマンド実行後、プロンプトが以下のように表示されれば、Kali Linuxコンテナへのログインは成功です。(root㉿に続く文字列はコンテナIDです。)
実行結果
┌──(root㉿xxxxxxxxxx)-[/]
└─#
# 当サイトの検証環境の場合
┌──(root㉿556f24f8e308)-[/]
└─#Kali Linuxのバージョン確認
コンテナ内で以下のコマンドを実行し、起動したKali Linuxのバージョンを確認します。
┌──(root㉿556f24f8e308)-[/]
└─# cat /etc/os-release
PRETTY_NAME="Kali GNU/Linux Rolling"
NAME="Kali GNU/Linux"
VERSION_ID="2026.1"
VERSION="2026.1"
VERSION_CODENAME=kali-rolling
ID=kali
ID_LIKE=debian
HOME_URL="https://www.kali.org/"
SUPPORT_URL="https://forums.kali.org/"
BUG_REPORT_URL="https://bugs.kali.org/"
ANSI_COLOR="1;31"VERSION_ID="2026.1"と表示され、2026年4月7日時点の最新バージョンがインストールされたことが確認できます。
Docker版Kali Linuxの使い方
- セキュリティツールのインストール
- コンテナの終了
- コンテナの削除
セキュリティツールのインストール
Docker版のKali Linuxは最小構成で提供されているため、セキュリティツールはプリインストールされていません。そのため、kali-linux-headlessメタパッケージを導入するか、必要なツールを個別にインストールする必要があります。
kali-linux-headlessメタパッケージには多数のセキュリティツールが含まれているため、インストールするパッケージの総容量は数GBに達します。複数のセキュリティツールを横断的に利用する場合、Dockerより仮想マシンの方が適しているため、そのような用途では仮想マシンの導入を推奨します。
以降の手順は、docker run -it kalilinux/kali-rollingコマンドで起動したKali Linuxコンテナ内での操作を前提としています。
kali-linux-headlessメタパッケージを導入する
Docker環境では、基本GUIが使えないため、CLIベースのセキュリティツールをまとめたメタパッケージkali-linux-headlessを導入します。このメタパッケージには、代表的なセキュリティツール(Nmap、Nikto、sqlmap、hping3、Gobusterなど)が含まれており、GUIを必要としない環境向けに最適化されています。
パッケージリストの更新
┌──(root㉿556f24f8e308)-[/]
└─# apt update
Get:1 http://kali.download/kali kali-rolling InRelease [34.0 kB]
Get:2 http://kali.download/kali kali-rolling/non-free-firmware amd64 Packages [14.3 kB]
Get:3 http://kali.download/kali kali-rolling/contrib amd64 Packages [118 kB]
Get:4 http://kali.download/kali kali-rolling/main amd64 Packages [21.0 MB]
Get:5 http://kali.download/kali kali-rolling/non-free amd64 Packages [186 kB]
Fetched 21.4 MB in 2s (11.1 MB/s)
All packages are up to date.まず、パッケージリストを最新の状態に更新します。
メタパッケージの詳細情報を確認
┌──(root㉿556f24f8e308)-[/]
└─# apt show kali-linux-headless
Package: kali-linux-headless
Version: 2026.1.8
Priority: optional
Section: metapackages
Source: kali-meta
Maintainer: Kali Developers <devel@kali.org>
Installed-Size: 13.3 kB
Depends: kali-linux-core, kali-system-cli, aircrack-ng, amass, arp-scan, arping | iputils-arping, binwalk, binwalk3, bluez, bluez-hcidump, bulk-extractor, bully, cadaver, certipy-ad, cewl, chntpw, commix, creddump7, crunch, cryptcat, davtest, dbd, dirb, dmitry, dns2tcp, dnschef, dnsenum, dnsrecon, enum4linux, evil-winrm, exe2hexbat, exiv2, exploitdb, ffuf, fierce, fping, gobuster, gpp-decrypt, hash-identifier, hashcat, hashcat-utils, hashid, hping3, hydra, i2c-tools, ike-scan, impacket-scripts, inetsim, iodine, john, kismet, laudanum, lbd, macchanger, magicrescue, maskprocessor, masscan, metasploit-framework, mimikatz, mitmproxy, msfpc, nasm, nbtscan, ncrack, ncurses-hexedit, netdiscover, netexec, netsed, nikto, nmap, onesixtyone, passing-the-hash, patator, pdf-parser, pdfid, peass, pipal, pixiewps, powershell-empire, powersploit, proxychains4, proxytunnel, ptunnel, python3-impacket, python3-scapy, qsslcaudit, radare2, reaver, rebind, recon-ng, redsocks, responder, rsmangler, samba-common-bin (>= 2:4.21.2+dfsg-3), samdump2, sbd, scalpel, scrounge-ntfs, set, skipfish, sleuthkit, smbmap, snmpcheck, spiderfoot, spike, spooftooph, sqlmap, ssldump, sslscan, sslsplit, sslyze, statsprocessor, thc-ipv6, thc-pptp-bruter, theharvester, udptunnel, unix-privesc-check, voiphopper, wafw00f, wce, webshells, weevely, wfuzz, whatweb, wifite, windows-binaries, wordlists, wpscan, pipx, python3-pip, python3-virtualenv, apache2, atftpd, axel, bind9-dnsutils, cifs-utils, clang, cryptsetup, cryptsetup-initramfs, cryptsetup-nuke-password, default-mysql-server, dos2unix, ethtool, expect, gdisk, git, hashdeep, hotpatch, ifenslave, iw, libimage-exiftool-perl, minicom, miredo, multimac, netmask, netsniff-ng, ngrep, openvpn, 7zip, php, php-mysql, plocate | mlocate, powershell, pwnat, rake, rfkill, sakis3g, samba, screen, sendemail, snmp, snmpd, socat, sslh, stunnel4, swaks, tcpick, tcpreplay, telnet, testdisk, tftp-hpa, traceroute, unrar | unar, upx-ucl, vboot-kernel-utils, vboot-utils, xxd, vim | vim-nox, vlan, vpnc, whois
Recommends: fuse3, python3-requests, python2, offsec-awae-python2, gss-ntlmssp, netbase
Homepage: https://www.kali.org
Download-Size: 8152 B
APT-Sources: http://http.kali.org/kali kali-rolling/main amd64 Packages
Description: Kali's default headless tools
This metapackage depends on all the applications that are included in
official Kali Linux images and that don't require X11/GUI.kali-linux-headlessメタパッケージをインストールする前に、パッケージの詳細情報を確認します。
kali-linux-headlessのインストール
┌──(root㉿556f24f8e308)-[/]
└─# apt install -y kali-linux-headlessパッケージの内容を確認できたら、kali-linux-headlessメタパッケージをインストールします。前述のとおり、インストールするパッケージの総容量は数GBに達します。
必要なツールを個別にインストールする
ここでは代表的なポートスキャナである「Nmap」を例に挙げ、インストール手順を解説します。
Nmapがインストールされていないことを確認
┌──(root㉿556f24f8e308)-[/]
└─# which nmap
┌──(root㉿556f24f8e308)-[/]
└─# apt list --installed | grep nmapまず、Nmapが現在の環境にインストールされていないことを確認します。whichコマンドに加えて、パッケージ管理システム(apt)の観点からも確認します。
パッケージリストの更新
┌──(root㉿556f24f8e308)-[/]
└─# apt updateツールをインストールする前に、パッケージリストを最新の状態に更新します。
パッケージ情報の確認
┌──(root㉿556f24f8e308)-[/]
└─# apt show nmap
Package: nmap
Version: 7.98+dfsg-1kali1
Priority: optional
Section: non-free/net
Maintainer: Kali Developers <devel@kali.org>
Original-Maintainer: Debian Security Tools <team+pkg-security@tracker.debian.org>
Installed-Size: 4776 kB
Depends: nmap-common (= 7.98+dfsg-1kali1), libc6 (>= 2.38), libgcc-s1 (>= 3.0), liblinear4 (>= 2.01+dfsg), liblua5.4-0 (>= 5.4.6), libpcap0.8t64 (>= 1.5.1), libpcre2-8-0 (>= 10.32), libssh2-1t64 (>= 1.11.0), libssl3t64 (>= 3.0.0), libstdc++6 (>= 5.2), zlib1g (>= 1:1.1.4)
Suggests: ncat, ndiff, zenmap
Homepage: https://nmap.org/
Download-Size: 1965 kB
APT-Sources: http://http.kali.org/kali kali-rolling/non-free amd64 Packages
Description: The Network Mapper
Nmap is a utility for network exploration or security auditing. It
supports ping scanning (determine which hosts are up), many port
scanning techniques, version detection (determine service protocols
and application versions listening behind ports), and TCP/IP
fingerprinting (remote host OS or device identification). Nmap also
offers flexible target and port specification, decoy/stealth scanning,
sunRPC scanning, and more. Most Unix and Windows platforms are
supported in both GUI and commandline modes. Several popular handheld
devices are also supported, including the Sharp Zaurus and the iPAQ.パッケージの詳細情報を確認します。
Version:NmapのバージョンDepends:依存パッケージDescription:パッケージの概要
Nmapのインストール
┌──(root㉿556f24f8e308)-[/]
└─# apt install -y nmap
Installing:
nmap
Installing dependencies:
dbus dbus-system-bus-common libcryptsetup12 libjson-c5 libpcap0.8t64 nmap-common
dbus-bin dmsetup libdbus-1-3 libkmod2 libssh2-1t64 systemd
dbus-daemon libapparmor1 libdevmapper1.02.1 liblinear4 libsystemd-shared systemd-cryptsetup
dbus-session-bus-common libblas3 libexpat1 liblua5.4-0 linux-sysctl-defaults systemd-timesyncd
Suggested packages:
default-dbus-session-bus libdw1t64 libpwquality1 ndiff systemd-resolved
| dbus-session-bus libelf1t64 libqrencode4 zenmap systemd-repart
liblinear-tools libfido2-1 libtss2-esys-3.0.2-0t64 systemd-container libtss2-tcti-device0
liblinear-dev libgcrypt20 libtss2-mu-4.0.1-0t64 systemd-homed polkitd
libarchive13t64 libidn2-0 libtss2-rc0t64 systemd-userdbd
libbpf1 libp11-kit0 ncat systemd-boot
Summary:
Upgrading: 0, Installing: 25, Removing: 0, Not Upgrading: 0
Download size: 14.7 MB
Space needed: 53.7 MB / 8998 MB available
〜 省略 〜
Setting up nmap (7.98+dfsg-1kali1) ...
Setting up dmsetup (2:1.02.205-2+b1) ...
Setting up libdevmapper1.02.1:amd64 (2:1.02.205-2+b1) ...
Setting up libcryptsetup12:amd64 (2:2.8.4-1) ...
Setting up systemd-cryptsetup (259.1-1) ...
Processing triggers for libc-bin (2.42-13) ...パッケージ情報に問題がなければ、インストールを実行します。
インストール後の確認
インストール後、実行ファイルのパスを確認します。
┌──(root㉿556f24f8e308)-[/]
└─# which nmap
/usr/bin/nmap最後に、インストールされたNmapのバージョン情報を確認します。
┌──(root㉿556f24f8e308)-[/]
└─# nmap -V
Nmap version 7.98 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.4.8 openssl-3.5.5 libssh2-1.11.1 libz-1.3.1 libpcre2-10.46 libpcap-1.10.6 nmap-libdnet-1.18.0 ipv6
Compiled without:
Available nsock engines: epoll poll selectNmap version:バージョンPlatform:実行環境Compiled with:使用ライブラリ
コンテナを終了する
Dockerコンテナの終了方法には、コンテナを停止して終了する方法と、コンテナをバックグラウンドで稼働させたまま終了する方法(デタッチ)の2種類があります。
コンテナを停止する方法
┌──(root㉿556f24f8e308)-[/]
└─# exitDockerで起動したKali Linuxコンテナは、exit コマンド、またはCtrl + Dを実行すると停止します。これは仮想マシンの「シャットダウン」に相当する動作です。
停止中のコンテナの一覧は、docker container ls コマンドで確認できます。-aオプションを付けることで、稼働中・停止中を問わず、すべてのコンテナが表示されます。
ホストOSで実行
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
556f24f8e308 kalilinux/kali-rolling "bash" 2 hours ago Exited (0) About a minute ago beautiful_northcuttCONTAINER ID:コンテナIDIMAGE:イメージ名STATUS:Exited(終了)
停止したコンテナを起動(再開)するには、docker start -ai <コンテナID>を実行します。
ホストOSで実行
$ docker start -ai 556f24f8e308
┌──(root㉿556f24f8e308)-[/]
└─#-a:コンテナの標準出力(stdout)と標準エラー出力(stderr)をターミナルに接続-i:コンテナの標準入力(stdin)を開いたままにする
-aと-iを組み合わせることで、停止前と同じようにコンテナを対話的に操作できます。
コンテナを停止しない方法(デタッチ)
exitはコンテナそのものを停止させますが、コンテナを起動したままターミナルだけを抜けたい場合(デタッチ)は、Ctrl + P→Ctrl + Qのキーシーケンスを使います。
┌──(root㉿556f24f8e308)-[/]
└─#(ここで「Ctrl+P」→「Ctrl+Q」を入力)実行後
┌──(root㉿556f24f8e308)-[/]
└─# read escape sequenceデタッチに成功すると、read escape sequenceと表示されます。
デタッチ後、ホスト側でdocker container lsを実行すると、コンテナのステータスがUpのまま稼働していることを確認できます。
ホストOSで実行
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
556f24f8e308 kalilinux/kali-rolling "bash" 2 hours ago Up 12 minutes beautiful_northcuttデタッチしたコンテナに再接続(アタッチ)するには、docker attach <コンテナID>を実行します。
ホストOSで実行
$ docker attach 556f24f8e308再接続(アタッチ)すると、デタッチ前の状態のシェルに戻ることができます。
exitとCtrl + P→Ctrl + Qの違い
| 操作 | コンテナの状態 | 用途 |
|---|---|---|
exitまたはCtrl + D | 停止(Exited) | 作業を完全に終了する場合 |
Ctrl + P→Ctrl + Q | 稼働中(Up) | バックグラウンドで処理を継続させたい場合 |
コンテナを削除する
不要になったコンテナは、docker rmコマンドで削除できます。(コンテナ内でインストールしたツールも、すべて削除対象となります。)
まず、docker container ls -aで削除対象のコンテナIDを確認します。
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
556f24f8e308 kalilinux/kali-rolling "bash" 3 hours ago Exited (130) 5 minutes ago beautiful_northcutt次に、docker rm <コンテナID>を実行してコンテナを削除します。
$ docker rm 556f24f8e308
556f24f8e308削除が成功すると、コンテナIDがそのまま出力されます。削除後、docker container ls -aを再実行すると、対象のコンテナが一覧から消えていることが確認できます。
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES稼働中のコンテナは削除できません。
稼働中のコンテナを削除すると、エラーになる
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
556f24f8e308 kalilinux/kali-rolling "bash" 3 hours ago Up 41 minutes beautiful_northcutt
$ docker rm 556f24f8e308
Error response from daemon: cannot remove container "556f24f8e308": container is running: stop the container before removing or force remove強制的に削除したい場合は、-f(--force)オプションを付けます。
インストールしたセキュリティツールを実行
このセクションでは、実際にインストールしたNmapを使って、脆弱性診断の学習環境として広く利用されているMetasploitable2に対してポートスキャンを実行します。
Metasploitable2は、意図的に脆弱性が組み込まれたLinuxベースの仮想マシンで、セキュリティ診断のトレーニング環境として広く利用されています。
ここで解説する操作は、自身が管理するネットワーク環境でのみ実施してください。許可のないホストへのスキャンは、不正アクセス禁止法等の法令に抵触する可能性があります。
システム構成
本デモは、Windows上に構築したローカルネットワーク環境を用いて実施します。
| スキャン元 | Docker版 Kali Linux(ホストOS:Ubuntu 24.04) |
|---|---|
| スキャン対象 | Metasploitable2(IPアドレス:192.168.10.101) |
| 使用ツール | Nmap |
| ネットワーク | ローカルネットワーク(閉じた検証環境) |
Nmapを実行する
Kali Linuxのコンテナ内でnmapコマンドを実行します。
┌──(root㉿556f24f8e308)-[/]
└─# nmap 192.168.10.101実行結果
Starting Nmap 7.98 ( https://nmap.org ) at 2026-04-07 11:22 +0000
Nmap scan report for 192.168.10.101
Host is up (0.00020s latency).
Not shown: 977 closed tcp ports (reset)
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
25/tcp open smtp
53/tcp open domain
80/tcp open http
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
514/tcp open shell
1099/tcp open rmiregistry
1524/tcp open ingreslock
2049/tcp open nfs
2121/tcp open ccproxy-ftp
3306/tcp open mysql
5432/tcp open postgresql
5900/tcp open vnc
6000/tcp open X11
6667/tcp open irc
8009/tcp open ajp13
8180/tcp open unknown
Nmap done: 1 IP address (1 host up) scanned in 0.71 seconds今回の結果では、23個のポートがopenと検出されました。これはMetasploitable2が意図的に多数のサービスを起動しているためです。実際のセキュリティ診断業務では、これだけ多くのポートが開放されているホストは、攻撃対象となるサービスが多い(アタックサーフェスが広い)と判断されます。
