1. はじめに
2026年02月JANOGに参加しました。そこでNETCONというネットワークの問題を解いていく企画に参加しました。その時の問題出題システムがよくできていて、どうやって構築しているのだろうと疑問に思いました。それで調べてみるとどうやらk8sとContainerlabで構築されていました。Containerlabは名前だけは知っていたものの使ったことがなかったので触った内容を記事にまとめたいと思います。
(参考Xでの検索結果)
https://x.com/proelbtn/status/2022854362985369736?s=20
今回の作業範囲:
なお、今回は、インストールからクイックスタートガイドを終えるまでを範囲とします。
2. 環境
以下の環境にインストールをしています。
| 項目 | 値 |
|---|---|
| OS | Ubuntu 24.04.4 |
| Docker Version | version 29.2.1, build a5c7197 |
| CPU | Intel(R) Core(TM) i5-8400 |
| 仮想化支援 | intel-VTx |
| Memory | 32GB |
3. Containerlabとは?
Containerlab は、コンテナ化されたネットワーク機器(ルータ/スイッチ)をYAMLでトポロジーの定義するだけでネットワーク環境を即座に構築できるツールです。
従来の GNS3 や EVE-NG のように GUI で操作するタイプではなく、IaC(Infrastructure as Code) の思想に基づき、構成をコードとして管理できる点が大きな特徴です。また、体感EVE-NGやGNS3より処理が速い気がします。そして、コンテナ故に環境依存が少ないのも魅力です。
特徴
-
YAML でトポロジー定義
ノード(ネットワーク機器)やリンク(接続関係)を YAML で記述するだけで環境を再現可能。 -
高速なデプロイ
containerlab deployの 1 コマンドでネットワークが立ち上がる。 -
コンテナ/VM の混在が可能
vrnetlab などを使いVMをコンテナ化することでVMしか提供されていないOSもトポロジーに組み込むことが可能
Containerlabで利用できるネットワークOS
Containerlab は複数ベンダーのネットワーク OS をサポートしており、マルチベンダー環境の検証に非常に向いています。代表的なものをは以下の通りです。
| ベンダー | 種類 | イメージ例 | 備考 |
|---|---|---|---|
| Juniper | vJunos-router / vMX / vSRX | vrnetlab/juniper_vjunos-router |
vrnetlab 経由で利用 |
| Nokia | SR Linux | ghcr.io/nokia/srlinux |
Containerlab 公式サポート |
| Arista | cEOS | ceos:latest |
ライセンス要・入手にはアカウント必要 |
| Cisco | IOS XRv9k / CSR1000v | vrnetlab イメージ | VM ベース |
| SONiC | SONiC コンテナ |
sonic-slave など |
ホワイトボックス向け |
| 汎用 Linux | Alpine / Ubuntu |
alpine, ubuntu
|
テスト用ホストとして利用可能 |
※実際に利用するには、各ベンダーのライセンスやイメージ入手方法に従う必要があります。
活用方法
- マルチベンダーの設定検証
- BGP/OSPF/EVPN/VXLAN などのプロトコル検証
- CI/CD パイプラインに組み込んだ自動テスト
- トレーニング環境の自動構築
- トポロジーをコードとして管理したい場合
- 検証/教育用ラボの構築
etc...
4. 導入
Containerlabの導入は公式サイトのInstallationに沿ってインストールする。
以下のコマンドを実行すると自動でインストールが行われる
curl -sL https://containerlab.dev/setup | sudo -E bash -s "all"
#インストール後の確認
containerlab version
docker --version
出力例
root@root$ containerlab version
____ ___ _ _ _____ _ ___ _ _ _____ ____ _ _
/ ___/ _ \| \ | |_ _|/ \ |_ _| \ | | ____| _ \| | __ _| |__
| | | | | | \| | | | / _ \ | || \| | _| | |_) | |/ _` | '_ \
| |__| |_| | |\ | | |/ ___ \ | || |\ | |___| _ <| | (_| | |_) |
\____\___/|_| \_| |_/_/ \_\___|_| \_|_____|_| \_\_|\__,_|_.__/
version: 0.73.0
commit: 611350001
date: 2026-02-08T13:22:45Z
source: https://github.com/srl-labs/containerlab
rel. notes: https://containerlab.dev/rn/0.73/
root@root$
root@root$ docker --version
Docker version 29.2.1, build a5c7197
root@root$
※なお、個別に各モジュールをインストールすことも可能。Installationを参照すると良い。
参考:Installation
5. 起動テスト -サンプルの実行準備-
イクイックスタートにあるサンプルを起動してみましょう。公式クイックスタートでは、SRlinux(Nokia社のNOS)とvEOS(Arista社のNOS)で構築するようになっています。SRLinuxはDockerコンテナとして公開されているため自動でダウンロードされますが、vEOSのコンテナイメージはDockerに存在しないため自身で用意する必要があります。
参考URL:
https://containerlab.dev/quickstart/
5.1 Arista社のコンテナイメージの準備
手順1.コンテナイメージのダウンロード
ダウンロードサイトは以下のURLになります。ダウンロードするには会員登録が必要になります。登録の手順については補足:Arista会員登録を参考にしてください。
https://www.arista.com/en/support/software-download
手順2.コンテナイメージをDockerImageに変換
ContainerlabはDockerコンテナで操作するため変換が必要です。以下のコマンドで変換可能です。
docker import <<コンテナファイル名>>.tar.xz <<Image Name Tag>>
実行例:
docker import cEOS64-lab-4.32.0F.tar.xz ceos:4.32.0F
手順3. 登録されたImageの確認
Imageが登録されたか確認します。※以下は私の環境の出力のため他のも混じっています。
docker images
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
ceos:4.32.0F 313dc022c94e 2.04GB 0B
ghcr.io/nokia/srlinux:24.10 318c5a5c97cc 2.15GB 0B
ghcr.io/nokia/srlinux:24.10.2 1ac8e69ac8a6 2.35GB 0B
vrnetlab/juniper_vjunos-router:25.4R1.12 20ec1295313dc022c94e 2.04GB 0B
補足:Arista会員登録
手順1:
「Need a User Account」をクリックし新規にAccount作成を行います。

手順2.
必要事項を入力し、送信します。この時、すべて英語の必要があります。

手順3.
アカウントのアクティベート(有効化)を促すメールが登録時のメールアドレスに届きます。届いたURLをクリックしてアカウントをアクティベートしてください。

手順4.
上記、ダウンロードURLをクリックしユーザ名,パスワードでログインしてください。(覚えていないですが、仮にパスワードを設定した記憶がない場合はパスワードを忘れた場合からパスワード発行を行ってください)
5.2 クイックスタートyamlの実行
以下ガイドを参考にSRlinux及びArista EOSのみのシンプルなトポロジーを構築します。
参考URL:クイックスタートガイド
https://containerlab.dev/quickstart/
手順1
Sample yamlのダウンロード
curl -LO https://raw.githubusercontent.com/srl-labs/containerlab/main/lab-examples/srlceos01/srlceos01.clab.yml
ちなみに中身はこのようになっています。
※コメントは、私が追加しています。
cat srlceos01.clab.yml
#=======
# topology documentation: http://containerlab.dev/lab-examples/srl-ceos/
name: srlceos01 #---> 作成するリソース名
topology: #----> topologyセクションでtopologyの定義をする
nodes: #----> node セクションで利用するノードを定義する
srl: #----> ノード名が”srl”のものの名前やイメージファイルを定義する
kind: nokia_srlinux #----> node 種別を定義ここではnokia SRLinuxを定義
image: ghcr.io/nokia/srlinux:24.10 # ----> コンテナイメージの定義
ceos: #----> ノード名が”ceos”のものの名前やイメージファイルを定義する
kind: arista_ceos
image: ceos:4.32.0F # ----> コンテナイメージの定義
links: # ----> linkセクションでインターフェースの接続を定義
- endpoints: ["srl:ethernet-1/1", "ceos:eth1"] # ----> srlのeth1/1とceosのeth1を接続
詳しくは、以下のマニュアルを参照
URL:Usermanual .yamlファイルの定義方法
https://containerlab.dev/manual/topo-def-file/
手順2
デプロイする
sudo containerlab deploy
もしくはファイル名を指定して
sudo containerlab deploy -t srlceos01.clab.yml
すると以下のような出力になる
/nw-lab$ sudo containerlab deploy -t srlceos01.clab.yml
[sudo] root のパスワード:
00:44:45 INFO Containerlab started version=0.73.0
00:44:45 INFO Parsing & checking topology file=srlceos01.clab.yml
00:44:45 INFO Creating docker network name=clab IPv4 subnet=172.20.20.0/24 IPv6subnet=3fff:172:20:20::/64 MTU=0
00:44:45 INFO Creating lab directory path=/home/root/nw-lab/clab-srlceos01
00:44:45 INFO Creating container name=srl
00:44:45 INFO Creating container name=ceos
00:44:45 INFO Running postdeploy actions for Arista cEOS 'ceos' node
00:44:45 INFO Created link: srl:e1-1 (ethernet-1/1) ~qq~ ceos:eth1
00:44:45 INFO Running postdeploy actions kind=nokia_srlinux node=srl
00:45:11 INFO Adding host entries path=/etc/hosts
00:45:11 INFO Adding SSH config for nodes path=/etc/ssh/ssh_config.d/clab-srlceos01.conf
-----------------------------------------------------------------------------------
| Name | Kind/Image | State | IPv4/6 Address |
|---------------------|-----------------------------|---------|-------------------|
| clab-srlceos01-ceos | arista_ceos | running | 172.20.20.2 |
| | ceos:4.32.0F | | 3fff:172:20:20::2 |
|---------------------|-----------------------------|---------|-------------------|
| clab-srlceos01-srl | nokia_srlinux | running | 172.20.20.3 |
| | ghcr.io/nokia/srlinux:24.10 | | 3fff:172:20:20::3 |
----------------------------------------------------------------------------------
手順3
デプロイが完了したので、各ノードにログインしてみる
◆Nokia SRLinux
# access CLI
docker exec -it clab-srlceos01-srl sr_cli
# access bash
docker exec -it clab-srlceos01-srl bash
◆Arista vEOS
docker exec -it clab-srlceos01-ceos Cli
# access bash
docker exec -it clab-srlceos01-ceos bash
手順4
お試しが完了したら環境を停止する
sudo containerlab destroy -t srlceos01.clab.yml
5.3 解説
Point1:172.20.20.0/24のネットワークは何?
手順2で出力されていた、arista_coes:172.20.20.2、nokia_srlinux:172.20.20.3は何か?これはdocker内で立ち上がったコンテナに付与されたIPアドレス。このIPにSSHすると当該ノードのコンソールポート(現地ポート)にアクセス下のと同義になる。
Point2:172.20.20.0/24に外部からsshするには?
ymalファイルはdocker composeファイルみたいなものなので以下のようにポートフォワードしてあげれば、containerlabを構築したコンピュータの外のコンピュータからsshが可能になる。
# vEOSにログインする場合:User:admin,Pass:admin
# 参考URL:https://containerlab.dev/manual/kinds/ceos/
# ただし以下yamlファイルではadminを環境変数で定義
ssh admin@<<ContainerlabのIPアドレス>> -p 2223
参考yamlファイル:
name: srlceos01
topology:
nodes:
srl:
kind: nokia_srlinux
image: ghcr.io/nokia/srlinux:24.10
ports:
- "2222:22"
ceos:
kind: arista_ceos
image: ceos:4.32.0F
ports:
- "2223:22"
env:
EOS_DEFAULT_USERNAME: admin
EOS_DEFAULT_PASSWORD: admin
SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT: "1"
links:
- endpoints: ["srl:ethernet-1/1", "ceos:eth1"]
終わりに
とりあえず、クイックスタートまでやってみました。次の記事は、JUNOSのような仮想マシンをcontainlabで実行する方法を記述したいと思います。