5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

macOS(Apple Silicon)のContainerlabでCisco IOLを動かしてみた

Last updated at Posted at 2026-01-29

はじめに

Apple SiliconのmacOSでContainerlabを実行させる方法はいくつかありますが、ここでは以下を参考にDev Containersを使用してDocker Outside Of Docker (dood)で動かしてみます。

環境

今回使用したPCは以下です。

  • モデル: MacBook Pro
  • チップ: Apple M1 Pro
  • メモリ: 16GB
  • macOS: Tahoe 26.2

全体像は以下のイメージになります。

image.png

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

.devcontainer/devcontainer.json
{
    "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が利用できるようになります。

image.png

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ファイルをダウンロードします。

image.png

ダウンロードするには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のトポロジー作成

トポロジー定義ファイルの作成

サンプルとして、ここでは IOLIOL-L2 をそれぞれ1台ずつ配置し、Ethernet0/1 でお互い結線したシンプルな構成にしています。

topo.clab.yml
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-configr1.cfgs1.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でデプロイされたトポロジー図を確認できます。

image.png

疎通確認

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を操作してみたので以下の記事で紹介しています。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?