dockerコンテナでcgroupを使ったときにホスト側はどこでその設定を見れるかめも

たとえば、docker-compose.ymlでmem_limitを使ったらcgroupでメモリの最大使用量を設定してますが、それはホスト側ではどこで設定されてるかの確認です。確認に使った環境はfedora 28です。dockerはsystemdで起動してます。

こんな感じでapp1は15MB、app2は20MBとしてメモリの上限をセットします。

```yaml
version: '2'

services:
  app1:
    build:
      context: .
      dockerfile: Dockerfile
    cap_add:
      - IPC_LOCK
    mem_limit: 15m

  app2:
    build:
      context: .
      dockerfile: Dockerfile
    cap_add:
      - IPC_LOCK
    mem_limit: 20m
```

そうするとコンテナ内はこんなふうに設定が見えます。想定通りですね。

app1のcgroup設定状況

```
masami@fedora:~/mem-limit-test$ sudo docker-compose run app1 /bin/bash                                                                                                                                             
[root@fe7c57f1de53 /]# cat /sys/fs/cgroup/memory/tasks
1
15
[root@fe7c57f1de53 /]# cat /sys/fs/cgroup/memory/memory.limit_in_bytes
15728640
[root@fe7c57f1de53 /]#
```

app2のcgroup設定状況

```
masami@fedora:~/mem-limit-test$ sudo docker-compose run app2 /bin/bash
[root@e7b9f2845ed8 /]# cat /sys/fs/cgroup/memory/tasks
1
14
[root@e7b9f2845ed8 /]# cat /sys/fs/cgroup/memory/memory.limit_in_bytes
20971520
[root@e7b9f2845ed8 /]#
```

ホスト側では/sys/fs/cgroup/memory/system.sliceにdockerコンテナのディレクトリがあります。これの
.scopeで終わっているのが起動してるdockerコンテナのディレクトリです。

```
 docker-containerd.service                                                       NetworkManager.service
 docker-e7b9f2845ed8c361f8166b9890121538b2c46a8ca54c6f30fb6922b96fde1b11.scope   notify_on_release
 docker-fe7c57f1de535c56204625d860fb7648ad3d2f9f1d5a9922afa10c1c658e2f64.scope   polkit.service
````

app1のmemory.limit_in_bytes。

```
[root@fedora docker-fe7c57f1de535c56204625d860fb7648ad3d2f9f1d5a9922afa10c1c658e2f64.scope]# cat tasks 
13636
[root@fedora docker-fe7c57f1de535c56204625d860fb7648ad3d2f9f1d5a9922afa10c1c658e2f64.scope]# cat memory.limit_in_bytes 
15728640
```

app2のmemory.limit_in_bytes。

```
[root@fedora docker-e7b9f2845ed8c361f8166b9890121538b2c46a8ca54c6f30fb6922b96fde1b11.scope]# cat tasks 
13930
[root@fedora docker-e7b9f2845ed8c361f8166b9890121538b2c46a8ca54c6f30fb6922b96fde1b11.scope]# cat memory.limit_in_bytes 
20971520
```

このようにホスト側ではsystemc.sliceディレクトリの下にあるdockerコンテナのcgroupのディレクトリで設定内容を確認できます。

dockerコンテナのプロセスツリーを確認した様子。

```
  ├─sshd,668 -D -oCiphers=aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc-oMACs=hma
  │   ├─sshd,1220                                                                                                                                         ...
  │   │   └─sshd,1227                                                                                                                                     ...
  │   │       └─bash,1228
  │   │           └─sudo,13884 docker-compose run app2 /bin/bash
  │   │               └─docker-compose,13888 /usr/bin/docker-compose run app2 /bin/bash
  │   │                   └─docker-current,13892 start --attach --interactive e7b9f2845ed8c361f8166b9890121538b2c46a8ca54c6f30fb6922b96fde1b11
  │   │                       ├─{docker-current},13894
  │   │                       ├─{docker-current},13895
  │   │                       ├─{docker-current},13896
  │   │                       ├─{docker-current},13897
  │   │                       ├─{docker-current},13901
  │   │                       ├─{docker-current},13902
  │   │                       ├─{docker-current},13903
  │   │                       ├─{docker-current},17062
  │   │                       └─{docker-current},17063
  │   ├─sshd,2988                                                                                                                                         ...
  │   │   └─sshd,2991                                                                                                                                     ...
  │   │       └─bash,2992
  │   │           └─pstree,3150 -ap
  │   ├─sshd,12209                                                                                                                                        ...
  │   │   └─sshd,12219                                                                                                                                    ...
  │   │       └─bash,12220
  │   ├─sshd,12874                                                                                                                                        ...
  │   │   └─sshd,12877                                                                                                                                    ...
  │   │       └─bash,12878
  │   │           └─sudo,13586 docker-compose run app1 /bin/bash
  │   │               └─docker-compose,13591 /usr/bin/docker-compose run app1 /bin/bash
  │   │                   └─docker-current,13605 start --attach --interactive fe7c57f1de535c56204625d860fb7648ad3d2f9f1d5a9922afa10c1c658e2f64
  │   │                       ├─{docker-current},13606
  │   │                       ├─{docker-current},13607
  │   │                       ├─{docker-current},13608
  │   │                       ├─{docker-current},13609
  │   │                       ├─{docker-current},13610
  │   │                       ├─{docker-current},13611
  │   │                       ├─{docker-current},13616
  │   │                       ├─{docker-current},25177
  │   │                       └─{docker-current},25178
```

.scopeファイルの名前にあるhash値はpstreeとかpsでプロセスの情報を見たときに確認できます。

```
masami@fedora:~$ ps -p 13605 -w 300
  PID TTY      STAT   TIME COMMAND
13605 pts/6    Sl+    0:00 /usr/bin/docker-current start --attach --interactive fe7c57f1de535c56204625d860fb7648ad3d2f9f1d5a9922afa10c1c658e2f64
```