2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Containerlabで構築する検証環境 - 1. 導入編 -

2
Last updated at Posted at 2026-03-04

1. はじめに

 2026年02月JANOGに参加しました。そこでNETCONというネットワークの問題を解いていく企画に参加しました。その時の問題出題システムがよくできていて、どうやって構築しているのだろうと疑問に思いました。それで調べてみるとどうやらk8sContainerlabで構築されていました。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に沿ってインストールする。
以下のコマンドを実行すると自動でインストールが行われる

install-shell
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コンテナで操作するため変換が必要です。以下のコマンドで変換可能です。

Convert Docker Image
docker import <<コンテナファイル名>>.tar.xz <<Image Name Tag>>

実行例:

example Convert Docker image
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作成を行います。
image.png

手順2.

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

手順3.

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

手順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ファイル:

srlceos01.clab.yml
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で実行する方法を記述したいと思います。

2
3
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?