Docker:コンテナのCPU割当時間の割合を変更する方法

スポンサーリンク

コンテナのCPU割当時間の割合を変更する方法

コンテナのCPU割当時間の割合を変更するには--cpu-sharesオプションを指定してdocker container runコマンド実行します。

 

オプションの説明(抜粋)

$ docker container run --help

Usage:  docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]

Run a command in a new container

Options:
  -c, --cpu-shares int                 CPU shares (relative weight)
      --cpuset-cpus string             CPUs in which to allow execution (0-3, 0,1)
  -d, --detach                         Run container in background and print container ID
  -i, --interactive                    Keep STDIN open even if not attached
      --name string                    Assign a name to the container
  -t, --tty                            Allocate a pseudo-TTY

 

オプションの説明

  • --cpu-sharesオプション:CPU割当時間の相対値(デフォルトは1024)
  • --cpuset-cpusオプション:ホストOS側のCPUコアの番号を指定する
  • -dオプション:Dockerコンテナをバックグラウンドで起動する
  • -iオプション:Dockerコンテナ起動時に、標準入力(STDIN)を受け付ける
  • -tオプション:仮想端末(pseudo-TTY)をコンテナに割り当てる
  • --nameオプション:作成するコンテナに名前を付ける
  • -i -t -dを同時に使用する場合は、-itdオプションを使用できます

 

実行例

$ docker container run -itd --name test01 --cpu-shares=1024 --cpuset-cpus=0 centos:7.7.1908 dd if=/dev/zero of=/dev/null
1306bcb2c14af21c0f19acb6ae9dcdceade3caab97565e758cee3b650963d55f
$ docker container run -itd --name test02 --cpu-shares=1024 --cpuset-cpus=0 centos:7.7.1908 dd if=/dev/zero of=/dev/null
080dde7a0a3d9ec3e345fb4fc03f940388fe9d78b94acb5bf216c6fddc58c1c6
$ docker container run -itd --name test03 --cpu-shares=1024 --cpuset-cpus=0 centos:7.7.1908 dd if=/dev/zero of=/dev/null
77552cd3cc9b69a6d99bfa822b79df4a72ddc5012088f7e7ac9a86a12e8b8dc6

$ top -c  # 3つとも1024なので%CPUは約33%になる
...
  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
31986 root      20   0    4408    356    280 R 33.1  0.0   0:44.08 dd if=/dev/zero of=/dev/null
32093 root      20   0    4408    356    280 R 33.1  0.0   0:38.16 dd if=/dev/zero of=/dev/null
32201 root      20   0    4408    352    280 R 33.1  0.0   0:36.35 dd if=/dev/zero of=/dev/null
...


$ docker container run -itd --name test01 --cpu-shares=1024 --cpuset-cpus=0 centos:7.7.1908 dd if=/dev/zero of=/dev/null
aa7424c53afb2e461b3691ef1a660b9abfd0c5ecce7c11130823c55c4822beda
$ docker container run -itd --name test02 --cpu-shares=512 --cpuset-cpus=0 centos:7.7.1908 dd if=/dev/zero of=/dev/null
0a6a41e4228964867b60d2a9764c27337304ace1f307ced001aefffc6fb11024
$ docker container run -itd --name test03 --cpu-shares=512 --cpuset-cpus=0 centos:7.7.1908 dd if=/dev/zero of=/dev/null
d5cfe69b502315184a43024e083b979162b1d77c612d1843403a09a686e20205

$ top -c  # test01はtest02, test03の2倍の割当なので%CPUは約50%になる(test02, test03は約25%)
...
  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 1033 root      20   0    4408    352    280 R 49.5  0.0   0:32.79 dd if=/dev/zero of=/dev/null
 1143 root      20   0    4408    352    280 R 24.9  0.0   0:12.27 dd if=/dev/zero of=/dev/null
 1255 root      20   0    4408    356    280 R 24.9  0.0   0:10.69 dd if=/dev/zero of=/dev/null
...