はじめに
Apple SiliconのmacOSでContainerlabを実行させる方法はいくつかありますが、ここでは以下を参考にDev Containersを使用してDocker Outside Of Docker (dood)で動かしてみます。
環境
今回使用したPCは以下です。
- モデル: MacBook Pro
- チップ: Apple M1 Pro
- メモリ: 16GB
- macOS: Tahoe 26.2
全体像は以下のイメージになります。
Containerlab環境の準備
前提
- VS Codeがインストール済みであること
OrbStackのインストール
公式サイトからダウンロードして導入します。
Dev Containersのインストール
VS Codeの拡張機能 Dev Containers をインストールします。
参考:https://code.visualstudio.com/docs/devcontainers/containers
Dev Containersの設定
以下のように devcontainer.json を作成します。
参考:https://qiita.com/ntaka329/items/ed5d8b0b9de27893e0a7
{
"image": "ghcr.io/srl-labs/containerlab/devcontainer-dood-slim:0.72.0",
"runArgs": [
"--network=host",
"--pid=host",
"--privileged"
],
"mounts": [
"type=bind,src=/var/lib/docker,dst=/var/lib/docker",
"type=bind,src=/lib/modules,dst=/lib/modules"
],
"workspaceFolder": "${localWorkspaceFolder}",
"workspaceMount": "source=${localWorkspaceFolder},target=${localWorkspaceFolder},type=bind"
}
Containerlabの実行
VS Codeより、コンテナーで再度開く(Reopen in container) を選択してコンテナを起動すると、起動したVS CodeのターミナルでContainerlabが利用できるようになります。
Cisco IOL環境の準備
今回はApple Silicon(ARM64)で稼働させるため、vrnetlabを使用してCisco IOLのVMイメージをコンテナ化します。
vrnetlabイメージのビルド
以下のGitHubから vrnetlab リポジトリーをクローンします。
Cisco IOLイメージの入手
無償版CML (CML-free)を利用します。
参考:https://marcstech.blog/archives/add-cisco-iol-containerlab-macos/
CML-freeにサインアップするとメールが届き、そこにイメージのダウンロードサイトの直リンクが記載されています。
Software Downloadサイトから以下のISOファイルをダウンロードします。
ダウンロードするにはCisco.comアカウント (CCO ID)が必要になります。
Cisco IOLイメージのビルド
ダウンロードしたzipファイル refplat-20250616-free-iso.zip を解凍し、refplat-20250616-free.iso を開いてmacOSにマウントします。
以下のように、マウントしたISOファイルに含まれる2つのIOLイメージを vrnetlab/cisco/iol ディレクトリー配下にRenameしてコピーします。
cp /Volumes/REFPLAT/virl-base-images/iol-xe-17-16-01a/x86_64_crb_linux-adventerprisek9-ms.iol ./vrnetlab/cisco/iol/cisco_iol-17.16.01a.bin
cp /Volumes/REFPLAT/virl-base-images/ioll2-xe-17-16-01a/x86_64_crb_linux_l2-adventerprisek9-ms.iol ./vrnetlab/cisco/iol/cisco_iol-L2-17.16.01a.bin
参考:https://github.com/srl-labs/vrnetlab/tree/master/cisco/iol
次に、vrnetlab/cisco/iol ディレクトリーに移動してコンテナイメージをビルドします。
DOCKER_DEFAULT_PLATFORM=linux/amd64 make docker-image
docker images コマンドでビルドされたコンテナイメージを確認します。
% docker images vrnetlab/cisco_iol
REPOSITORY TAG IMAGE ID CREATED SIZE
vrnetlab/cisco_iol L2-17.16.01a db1e028a46c2 6 days ago 615MB
vrnetlab/cisco_iol 17.16.01a 94ddf05089c1 6 days ago 713MB
Containerlabのトポロジー作成
トポロジー定義ファイルの作成
サンプルとして、ここでは IOL と IOL-L2 をそれぞれ1台ずつ配置し、Ethernet0/1 でお互い結線したシンプルな構成にしています。
name: iol
prefix: clab
mgmt:
network: clab-mgmt
ipv4-subnet: 172.10.10.0/24
topology:
nodes:
r1:
kind: cisco_iol
image: vrnetlab/cisco_iol:17.16.01a
mgmt-ipv4: 172.10.10.11
startup-config: configs/r1.cfg
ports:
- "20001:22"
s1:
kind: cisco_iol
image: vrnetlab/cisco_iol:L2-17.16.01a
type: l2
mgmt-ipv4: 172.10.10.12
startup-config: configs/s1.cfg
ports:
- "20002:22"
links:
- endpoints: ["r1:Ethernet0/1","s1:Ethernet0/1"]
startup-config の r1.cfg と s1.cfg はContainerlabのGithubで公開されているテンプレートをそのまま使用しています。
トポロジーのデプロイ
以下のコマンドで作成したトポロジーをデプロイします。
❯ clab deploy -t topo.clab.yml
02:17:53 INFO Containerlab started version=0.72.0
02:17:53 INFO Parsing & checking topology file=topo.clab.yml
02:17:53 INFO Creating lab directory path=/Users/aha03230/Downloads/containerlab/.devcontainer/cisco/clab-iol
02:17:53 INFO unable to adjust Labdir file ACLs: operation not supported
02:17:53 INFO Creating container name=s1
02:17:53 INFO Creating container name=r1
02:17:54 INFO Running postdeploy actions for Cisco IOL 'r1' node
02:17:54 INFO Created link: r1:eth1 (Ethernet0/1) ▪┄┄▪ s1:eth1 (Ethernet0/1)
02:17:54 INFO Running postdeploy actions for Cisco IOL 's1' node
02:18:04 INFO Adding host entries path=/etc/hosts
02:18:04 INFO Adding SSH config for nodes path=/etc/ssh/ssh_config.d/clab-iol.conf
╭─────────────┬─────────────────────────────────┬─────────┬────────────────╮
│ Name │ Kind/Image │ State │ IPv4/6 Address │
├─────────────┼─────────────────────────────────┼─────────┼────────────────┤
│ clab-iol-r1 │ cisco_iol │ running │ 172.10.10.11 │
│ │ vrnetlab/cisco_iol:17.16.01a │ │ N/A │
├─────────────┼─────────────────────────────────┼─────────┼────────────────┤
│ clab-iol-s1 │ cisco_iol │ running │ 172.10.10.12 │
│ │ vrnetlab/cisco_iol:L2-17.16.01a │ │ N/A │
╰─────────────┴─────────────────────────────────┴─────────┴────────────────╯
VS Code拡張機能の Containerlab のTopoViewerでデプロイされたトポロジー図を確認できます。
疎通確認
r1に対してping疎通とSSH接続できることを確認します。
❯ ping 172.10.10.11
PING 172.10.10.11 (172.10.10.11) 56(84) bytes of data.
64 bytes from 172.10.10.11: icmp_seq=1 ttl=255 time=153 ms
64 bytes from 172.10.10.11: icmp_seq=2 ttl=255 time=1.38 ms
64 bytes from 172.10.10.11: icmp_seq=3 ttl=255 time=0.548 ms
^C
--- 172.10.10.11 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2006ms
rtt min/avg/max/mdev = 0.548/51.562/152.756/71.555 ms
/Users/aha03230/Downloads/containerlab/.devcontainer/cisco 02:35:15
❯ ssh admin@172.10.10.11
(admin@172.10.10.11) Password:
r1#
topo.clab.yml の以下の定義により、ホストのmacOSからIOLにSSH接続することも可能です。
r1:
ports:
- "20001:22"
s1:
ports:
- "20002:22"
% ssh -p 20001 admin@localhost
The authenticity of host '[localhost]:20001 ([::1]:20001)' can't be established.
RSA key fingerprint is SHA256:EzWGI2Pk31mx0roX6Nt0QlQj0oe370Sq1FGMM5apov8.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[localhost]:20001' (RSA) to the list of known hosts.
(admin@localhost) Password:
r1#
r1#sh cdp nei
Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
S - Switch, H - Host, I - IGMP, r - Repeater, P - Phone,
D - Remote, C - CVTA, M - Two-port Mac Relay
Device ID Local Intrfce Holdtme Capability Platform Port ID
r1.lab Eth 0/0 175 R Linux Uni Eth 0/0
s1.lab Eth 0/0 131 R S I Linux Uni Eth 0/0
Total cdp entries displayed : 2
Apple SiliconのmacOSでContainerlabを使用してCisco IOLを動作させることができました。
関連して、今回構築したContainerlab環境を使用してCisco IOS XE用MCPサーバーを使って自然言語でCisco IOLを操作してみたので以下の記事で紹介しています。



