6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Dockerコンテナ稼働時におけるホストのCPU・メモリの消費について

Last updated at Posted at 2024-02-15

動機

コンテナの状態がホスト側にも影響するか確認したかった為、GUI上でコンテナ管理できるPortainerを使用しました。
コンテナにstressコマンドで負荷を掛けた場合、コンテナとリソースを共有しているホストOSにも影響が生じると考えました。

結論

コンテナに負荷を掛けた場合、ホスト側にも負荷が掛かっていることが確認できた。
またコンテナのリソース管理はPortainerが便利であった。

環境

Proxmox上にUbuntuを用意。
Ubuntuの上に各種コンテナをデプロイしている状態。
⇩私の理解
image.png

事前知識

  • Portainerについて
    GUI上でコンテナ管理ができるぐらいの知識。(具体的に何を確認できるのかまでは理解できていない。)
  • Proxmoxについて
    物理的なサーバー上で複数の仮想サーバーを動作可能なハイパーバイザー型の仮想化技術。
    Dockerを学習する上で現在Proxmox上にUbuntuホストを用意している。

確認方法

  1. Portainerコンテナの構築
  2. Portainerにログイン
  3. PortainerからNextCloudコンテナのリソースを確認
  4. NextCloudコンテナへログイン
  5. NextCloudコンテナでstressコマンドの実行
  6. Portainerからコンテナの状態確認
  7. Proxmox上からホストの状態確認

1. Portainerコンテナの構築

手順1:ボリュームの作成

docker volume create portainer_data

手順2:コンテナの作成

docker run -d \
  -p 9000:9000 \
  -p 8000:8000 \
  --name=portainer \
  --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer

※補足
「docker run -d \」…バックグラウンドでコンテナ作成&実行
「-p 9000:9000」…ホストのポートとコンテナのポートを紐づけ。
「-p 8000:8000」…portainerコンテナ以外のDockerホストとの通信用に設定。
「--name=portainer \」…コンテナに「portainer」という名前を設定。
「--restart=always \」…システム再起動後、自動的に起動するよう設定。
「-v /var/run/docker.sock:/var/run/docker.sock \」…Dockerデーモンとの通信のためにDockerソケットをマウントするよう設定。
「-v portainer_data:/data \」…手順1で作成した「portainer_data」(ボリューム)を/dataにマウントするよう設定。(Portainerのデータはこのボリュームに保存される。)

2. Portainerコンテナにログイン

パスワードは12文字以上、3種類以上の文字種を使用しないといけなかった
Untitled.png

3. PortainerからNextCloudコンテナのリソースを確認

  • ダッシュボードから
    以下項目が確認できるみたい…パッと理解できるのはContainersやImagesぐらい。
    とりあえずContainersへ進む
    ・stack
    ・images
    ・Networks
    ・Containers
    ・Volumes
    ・CPUs
    Untitled.png

  • 「Stats」ボタンからメモリとCPUの使用率がリアルタイムで表示されるみたい。
    …ということはコンテナにも仮想的にCPU、メモリなどのリソースが割り振られているってこと?
    Untitled.png

4. NextCloudコンテナへログイン

docker exec -it  nextcloud /bin/bash

5. NextCloudコンテナでstressコマンドの実行

stress --cpu 2 --vm 2 --vm-bytes 1G

補足
2つのCPUコアに対して負荷をかけ、同時に2つの仮想メモリプロセスを生成し
それぞれに1GBのメモリを使用します。

6. Portainerからコンテナの状態確認

  • stressコマンド実行前
    image.png

  • stressコマンド実行後
    image.png

7. Proxmox上からホストの状態確認

  • stressコマンド実行前
    image.png

  • stressコマンド実行後
    image.png

まとめ

コンテナ上で負荷を掛けた状態では、ホスト側にも負荷が生じた。
stressコマンドでは各種リソースにどの程度負荷をかけるか調整可能なため、
例えばメモリに対して1GBの負荷をかけた場合、どの程度コンテナ側とホスト側でリソース状態が変化するのか見てみる…などもありだと思う。
今回の場合、「stress --cpu 2 --vm 2 --vm-bytes 1G」を実施した場合、
CPU…0.22%→99.95%
メモリ…75.39%→91.05%
まで上昇したことが分かる。

6
6
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
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?