docker-composeを使ってAristaNetworksのcEOS-labを複数動かす
はじめに
AristaNetworksのcEOS-labについて以前ここに記載していたのだが、docker-composeを使って複数のcEOS-labを起動する記事を記載してなかったのでここに記載する。
前の記事を見てることを前提に記載します。 また、今回の内容はArista社のEOS Central内(要ユーザ登録)のNetwork CI/CD Part1 – Building network topologies with Docker and cEOS-labに記載されているので、 そちらを見ても同じことができると思います。
手順
docker-compose.ymlの作成
起動したいcEOSの構成情報を docker-compose.yml ファイル内に定義する。 ※cEOS1とcEOS2を起動させてお互いのeth1とeth2を接続しているネットワーク構成。
version: '3' services: ceos1: hostname: ceos1 container_name: ceos1 image: "ceos:4.24.2.2F" command: /sbin/init systemd.setenv=INTFTYPE=eth systemd.setenv=ETBA=1 systemd.setenv=SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT=1 systemd.setenv=CEOS=1 systemd.setenv=EOS_PLATFORM=ceoslab syste md.setenv=container=docker privileged: true environment: INTFTYPE: eth ETBA: 1 SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT: 1 CEOS: 1 EOS_PLATFORM: ceoslab container: docker networks: default: net1: net2: ceos2: hostname: ceos2 container_name: ceos2 image: "ceos:4.24.2.2F" command: /sbin/init systemd.setenv=INTFTYPE=eth systemd.setenv=ETBA=1 systemd.setenv=SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT=1 systemd.setenv=CEOS=1 systemd.setenv=EOS_PLATFORM=ceoslab syste md.setenv=container=docker privileged: true environment: INTFTYPE: eth ETBA: 1 SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT: 1 CEOS: 1 EOS_PLATFORM: ceoslab container: docker networks: default: net1: net2: networks: net1: net2:
起動と確認
コンテナを起動、そして確認。
docker-compose up -d Creating network "docker-compose-test_default" with the default driver Creating network "docker-compose-test_net1" with the default driver Creating network "docker-compose-test_net2" with the default driver Creating ceos1 ... done Creating ceos2 ... done docker-compose ps Name Command State Ports ------------------------------------------------------ ceos1 /sbin/init systemd.setenv= ... Up ceos2 /sbin/init systemd.setenv= ... Up docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 11fb4380119d ceos:4.24.2.2F "/sbin/init systemd.…" 12 minutes ago Up 12 minutes ceos2 d578a8077d37 ceos:4.24.2.2F "/sbin/init systemd.…" 12 minutes ago Up 12 minutes ceos1 docker network ls NETWORK ID NAME DRIVER SCOPE b61604aed6bf bridge bridge local f2cb0b079080 docker-compose-test_default bridge local dab572f8e996 docker-compose-test_net1 bridge local 9e5f6c73dafc docker-compose-test_net2 bridge local ec472d1f98ef host host local ad77eaaccb62 none null local
停止
コンテナの削除は以下のコマンドを使う。
docker-compose down Stopping ceos2 ... done Stopping ceos1 ... done Removing ceos2 ... done Removing ceos1 ... done Removing network docker-compose-test_default Removing network docker-compose-test_net1 Removing network docker-compose-test_net2
cEOS-labの設定
設定はdocker-composeで起動させてから以下のコマンドを使う。
docker-compose exec ceos1 Cli docker-compose exec ceos2 Cli
上記コマンドで入った後は物理のAristaスイッチを触っていくのと同じ感覚で設定できると思います。
ceos1>enable ※ログインのタイミングでホスト名がceos1とすでに設定されているケースとlocalhostと初期設定のままのケースがあってenableコマンドを 投入するとlocalhostにホスト名が戻る事象が発生。原因が良くわかっていない・・・。 localhost# localhost# localhost# localhost#show running-config ! Command: show running-config ! device: localhost (cEOSLab, EOS-4.24.2.2F-18884008.42422F (engineering build)) ! transceiver qsfp default-mode 4x10G ! service routing protocols model ribd ! agent Bfd shutdown agent PowerManager shutdown agent LedPolicy shutdown agent Thermostat shutdown agent PowerFuse shutdown agent StandbyCpld shutdown agent LicenseManager shutdown ! spanning-tree mode mstp ! no aaa root ! interface Ethernet1 ! interface Ethernet2 ! no ip routing ! end
まとめ
試験構成パターンがあらかじめ決まっているようであればcEOS-labを単体で起動させるのではなく、 docker-composeを使うのが便利だと感じた。業務でも応用できればと考えている。 また、辛い部分としてはトラブル発生時はcEOS-labの切り分けは自力でなんとかしないといけないため、 ケースバイケースでうまく利用していくのとdocker自体の習熟等の地力をつけていかなくてはならないなあと思った。
同じ内容の記事をqiitaにも投稿してます。