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
パラメータを設定するとエラーになります