Docker Compose でカーネルパラメータを設定する

2016年7月にリリースされた Docker 1.12.0 から docker run --sysctl net.core.somaxconn=65535 などとすることによって, コンテナ内のカーネルパラメータを調整できるようになりました. Docker Composeではこのオプションに対応する設定がありませんでしたが, 2017年1月にリリースされた Docker Compose 1.10.0 からカーネルパラメータを設定できるようになったので, 簡単に紹介します.

経緯

Docker Compose からカーネルパラメータを設定できるようにする提案は2016年7月の時点で提案されていましたが, 長らくマージされない状態が続いていました. 12月になってようやくマージされ, 翌年1月の Docker Compose 1.10 のリリースに含まれました.

設定方法

Docker Compose でのカーネルパラメータの設定方法は以下のようになります:

version: '2.1'
services:
  nginx:
    image: nginx
    ports:
      - "80:80"
      - "443:443"
    sysctls:
      net.core.somaxconn: 8192
      net.ipv4.ip_local_port_range: "10000 60999"

ポイントは以下の2点です:

  • 各サービスの定義で sysctls パラメータを使ってカーネルパラメータを記述すること (末尾に s がつくことに注意)
  • Compose file のバージョンを 2.1 以降にすること
    • Compose file 2.1 は Docker 1.12 以降で対応
    • Compose file 3.0 は Docker 1.13 以降で対応
    • なお, Compose file 2.1 未満で sysctls パラメータを設定するとエラーになります

参考