dockerでRENATコンテナ作成

ネットワーク検証の自動化のためにrenatをdockerで構築する。

### 環境
仮想化：VMware Workstation-playre15
ホスト：Windows10
ゲスト：ubuntu22.04.3TLS

### コンテナ起動とApacheの設定
**Dockerコンテナの起動**:
RENATのDockerイメージ `bachng/renat:latest` を使用してコンテナを起動する。ポート8185と10022をホストとマッピングし、`/opt/renat` をボリュームとしてマウント。

``` sh:RENATコンテナ起動
miwapinn@VM1:~$ docker run --rm -d --privileged -v /opt/renat:/opt/renat -p 8185:80 -p 10022:22 --name renat bachng/renat:latest
48022bfb1ceb143618122cdd80f76487775583bba82267561393c6d697443769
miwapinn@VM1:~$ 
```
``` sh:RENATコンテナプロセス確認
miwapinn@VM1:~$ docker ps -a
CONTAINER ID   IMAGE                               COMMAND                   CREATED         STATUS                     PORTS                                                                          NAME
S
48022bfb1ceb   bachng/renat:latest                 "/entrypoint.sh"          About an hour ago   Up About an hour           0.0.0.0:8185->80/tcp, :::8185->80/tcp, 0.0.0.0:10022->22/tcp, :::10022->22/tcp     renat
```
``` sh:コンテナのシェルに入ってユーザ設定(rootで)
miwapinn@VM1:~$ sudo docker exec -it --user root renat /bin/bash
[sudo] miwapinn のパスワード: 
bash-4.2# 
bash-4.2# groupadd robot
bash-4.2# 
bash-4.2# usermod -a -G robot robot
bash-4.2# 
bash-4.2# chown -R robot:robot /home/robot/
```


``` sh:Apacheの設定変更
bash-4.2# vi /etc/httpd/conf/httpd.conf
```
※以下のパラメータを変更
ServerName <ホストのIPアドレス>
DocumentRoot "/var/www/html/renat-doc"

``` sh:httpdランタイムディレクトリ作成
bash-4.2# cd 
bash-4.2# cd /run/
bash-4.2# mkdir -p /run/httpd
bash-4.2# chmod 755 /run/httpd
```

``` sh:Apacheの起動と確認
bash-4.2# httpd -k start

bash-4.2# ps aux | grep httpd
```

``` sh:rootでコンテナログアウト
bash-4.2$ exit
```

``` sh:robotユーザでコンテナログイン
miwapinn@VM1:~$ docker exec -it --user robot renat /bin/bash --login
```

``` sh:cd
bash-4.2$ cd /home/robot/work/
```
### RENATサンプルプロジェクト実行
``` sh:サンプルプロジェクトの作成
bash-4.2$ /home/robot/work/renat/tools/project.sh renat-sample
created test project:  renat-sample
use item.sh to create test case
```
``` sh:cd
bash-4.2$ cd renat-sample
```
``` sh:プロジェクト内でテストアイテムを作成
bash-4.2$ /home/robot/work/renat/tools/item.sh test01
Create local configuration file (local.yaml) or not [yes,no=default]:yes
Use node list (comma separated) [ex:vmx11]:
Use tester [ex:ixnet03_8009]:
Use tester config file [ex:traffic.ixncfg]:
Use web app list (comma separated)[ex:samurai1]:
Use hypervisor list (comma separated)[ex:esxi-3-15]:


=== Created `test01` test item ===
Case scenario:     /home/robot/work/renat/tools/test01/main.robot
Case run file:     /home/robot/work/renat/tools/test01/run.sh
Local config file: /home/robot/work/renat/tools/test01/config/local.yaml
Tester config file:/home/robot/work/renat/tools/test01/config/
Check and change the `local.yaml` local config file if necessary
bash-4.2$ 
```
``` sh:cd
bash-4.2$ cd test01
```
``` sh:テストの実行と実行時のログ
bash-4.2$ ./run.sh
Current time:       Sat Mar 30 07:53:50 UTC 2024
Current RENAT path: /home/robot/work/renat

### Current folder is /home/robot/renat-sample/test01 ###
Run only once

Run: 001
Current local.yaml: /home/robot/renat-sample/test01/config/local.yaml
Loaded extra library `WebApp`
Loaded extra library `Hypervisor`
==============================================================================
test01 :: This is a sample test item                                          
==============================================================================
RENAT Ver:: RENAT 0.1.17
------------------------------------------------------------------------------
README:
<Write you readme file here>

------------------------------------------------------------------------------
00. Lab Setup
------------------------------------------------------------------------------
01. Cabling                                                           | PASS |
------------------------------------------------------------------------------
02. Load router config                                                | PASS |
------------------------------------------------------------------------------
03. Start traffic                                                     | PASS |
------------------------------------------------------------------------------
04. Run test                                                          | PASS |
------------------------------------------------------------------------------
05. Collect information                                               | PASS |
------------------------------------------------------------------------------
99. Lab Teardown
------------------------------------------------------------------------------
test01 :: This is a sample test item                                  | PASS |
5 critical tests, 5 passed, 0 failed
5 tests total, 5 passed, 0 failed
==============================================================================
Debug:   /home/robot/renat-sample/test01/result/.txt
Output:  /home/robot/renat-sample/test01/result/output.xml
Log:     /home/robot/renat-sample/test01/result/log.html
Report:  /home/robot/renat-sample/test01/result/report.html

bash-4.2$ 
```

### 結果レポート確認
■ブラウザで結果レポートを確認
http://<ホストのIPアドレス>:8185/~robot/renat-sample/test01/result/report.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/340841/74bf6444-2d99-2e1c-e4e1-9426ba77e51e.png)





■コンテナ上のRENATドキュメント確認
http://<ホストのIPアドレス>:8185/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/340841/301311ff-3ec6-5b36-f395-840205761d1c.png)


#### (参考メモ)コンテナのシェルからホストにファイルをコピーする方法
``` sh:docker cp <コンテナ名>:<コンテナ内のファイルパス> <ホスト上のパス>
miwapinn@VM1:~$ pwd
/home/miwapinn
miwapinn@VM1:~$ docker cp renat:/home/robot/renat-sample/test01/result/report.html /home/miwapinn
Successfully copied 231kB to /home/miwapinn
miwapinn@VM1:~$ 
```
#### (参考メモ)ホストからコンテナのシェルにファイルをコピーする方法
``` sh:docker cp <ホスト上のファイルパス> <コンテナ名>:<コンテナ内のパス>
miwapinn@VM1:~$ docker cp /home/miwapinn@/report.html renat:/home/robot/
Successfully copied 231kB to renat:/home/robot/
miwapinn@@VM1:~$ 
miwapinn@VM1:~$ 
```


### 参考にしたオフィシャルページ
https://github.com/bachng2017/RENAT