2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Docker Swarm modeで動作しているコンテナのカーネルパラメータを変更する

Posted at

この記事でわかること

swarm modeで動作しているコンテナのカーネルパラメータを変更する方法

目的

Docker swarm modeで動作hしているコンテナのカーネルパラメータ
(具体的にはnet.core.somaxconn)の変更方法を整理する。

なぜこの記事を書いたか

swarm-modeがsysctlオプションに対応していない

Docker 1.12以降で、非swarm modeの場合は--sysctlオプションにより
カーネルパラメータをコンテナ毎に設定することが可能であるが、
swarm modeでは同等のオプションが設定されていない(ように見える)から。

コンテナ起動後は/proc配下を書き換えできない

コンテナ起動後は/proc配下の(擬似?)ファイル群はread onlyでマウント
されており変更を受け付けないため。

手順

ここでは例としてnginxをあげている。
端的に述べると1.11以前の方法を用いることでコンテナ起動後にカーネルパラメータを
変更することが可能です。

コンテナの起動

起動時にコンテナに/proc以下の適当なボリュームをマウントする。

起動
docker service create --volume type=bind,source=/proc/sys/net/core/somaxconn,destination=/somaxconn --replicas 1 nginx

ポイントは
/proc/sys/net/core/somaxconnを/somaxconnにマウント
しているところです。

コンテナでコマンドを実行

コンテナのターミナルにはいる
sudo docker exec -it コンテナID/名前 /bin/bash
somaxconnの値を確認
sysctl -a | grep "somaxconn"
 中略
net.core.somaxconn = 128
somaxconnの値の書き換えと確認
echo "512" > /somaxconn
sysctl -a | grep "somaxconn"
 中略
net.core.somaxconn = 512

これで変更できた。

補足

このようにしてしまえば/wproc/sys配下のファイルに値を書き込むことで
様々なカーネルパラメータをもりもり変更できるようになる。
試行錯誤するぶんには良いかもしれない。

まとめてマウント
docker service create --name nginx -p 80:80 --replicas 1 --mount type=bind,source=/proc/sys,destination=/wproc/sys nginx:latest

注意

仕組みとしてはnamespace周りが云々とのことだけれども、
そのあたりはあまり詳しくないので詳細には説明できない。

docker inspactから個別コンテナに与たカーネルパラメータの値を取得できるため、
非swarm mode(docker runで起動)コンテナの場合はsysctlオプションを使ったほうがよい。

参考文献

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?