docker-composeを使ってAristaNetworksのcEOS-labを複数動かす

## はじめに

AristaNetworksのcEOS-labについて以前[ここ](https://qiita.com/h9803660/items/2d9ab958e93a361cff71)に記載していたのだが、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自体の習熟等の地力をつけていかなくてはならないなあと思った。