Docker用に必要な Linuxカーネルのオプション

Linux

LXCと Dockerを動かすための Linuxカーネルを自分でビルドする DIYな人のために構成情報を記すなど

Dockerとは

Dockerは、構成済みの Linux環境を最小の手順でダウンロードして稼働させたりそれらをメンテナンスするためのツールで、バックエンドとしては LXC(Linux Containers)を使用している。本記事では、Dockerと LXCを動かすのに必要なカーネルコンフィグについて述べる。

Dockerについての参考記事

LXCとは

LXCはいわば軽量の仮想マシンで、Dockerはこれを使って仮想環境を生成する。物理ハードウェアを完全にエミュレーションする VirtualBoxや、ハイパーバイザに調停された仮想のハードウェア上で OSを動作させるKVM/Xenと違い、ひとつの Linux環境を分割することで見かけ上複数化するLXCのアーキテクチャは OpenVZや FreeBSDの jailに近く、実際 OpenVZの開発成果もLXCに多く貢献している。

Linuxカーネルのバージョン

DockerはLinux 2.6の最後の方のバージョンでも一応動作するようだが、Linux 3.8以上が推奨されている。カーネルのバージョンを確認するには、コマンドラインから uname -r と入力する。

なお Dockerは 32bitには非対応であることに注意されたい。コマンドラインから uname -m と入力して x86_64と表示されれば 64bit、i686と表示された場合は残念ながら 32bitである。

必要なカーネルオプション

下記が Docker(およびLXC)を使用するため主に必要な Linuxカーネルのオプションとなる(Linux 3.10で確認)。厳密に確認したわけではないので、漏れがあれば容赦願いたい。

Dockerを使用するには aufsが必要(無くても動作するが実用的でない動きになるとのこと)なため、カーネルに aufs対応のパッチを適用するか、モジュールを別にビルドして動的にロードする必要がある。Gentoo Linuxの場合は aufs-sourcesというカーネルが用意されているのでそれを使うと簡単である。

CONFIG_CGROUPS
CONFIG_CGROUP_FREEZER  # 2014-07-04追記
CONFIG_CGROUP_DEVICE
CONFIG_CGROUP_SCHED
CONFIG_CGROUP_CPUACCT
CONFIG_MEMCG
CONFIG_MEMCG_SWAP
CONFIG_RESOURCE_COUNTERS
CONFIG_NAMESPACES
CONFIG_UTS_NS
CONFIG_IPC_NS
CONFIG_PID_NS
CONFIG_NET_NS
CONFIG_IP_NF_TARGET_MASQUERADE
CONFIG_NF_NAT
CONFIG_NF_NAT_NEEDED
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE
CONFIG_VETH
CONFIG_VLAN_8021Q
CONFIG_MACVLAN
CONFIG_DM_THIN_PROVISIONING
CONFIG_DEVPTS_MULTIPLE_INSTANCES
CONFIG_AUFS_FS  # aufsをカーネルに組み込んだ場合
CONFIG_MAGIC_SYSRQ   # 2014-07-08追記

ツールによるチェック(LXC)

今現在動作しているカーネルが LXCの動作要件を満たしているかどうかは、lxc-checkconfig コマンドで確認することができる(これからビルドしようとしているカーネルについても、configファイルを指定してやることでチェック可能)。但し、Linuxカーネルのバージョンが異なるとオプション名が変わることがあるので必要なオプションが全て組み込まれていてもいくつかの missing表示が出力される場合がある。

2014-03-12追記: Docker 0.9からは LXCに依存しなくなった(利用することは可能)

grepでのチェック

現在動作しているカーネルのオプションをチェックするもっと原始的な方法としては、grepを使うというのがある。現在動作しているカーネルのコンフィグは /proc/config.gz から得られるので、それに grepをかける。

gunzip -c /proc/config.gz | grep CONFIG_CGROUPS

もっとも、ひとつひとつ実行する必要があるため効率的な方法ではない。

参考記事

GentooにDockerを導入するまで - Qiita [キータ]

追記

本家に同じ趣旨の情報が掲載されており、そちらのほうが正確なのでそちらも参照のこと。

同じカテゴリの記事

glibcのgethostbyname関数に存在するCVE-2015-0235(GHOST)脆弱性について 2015年1月28日
DFSがどうこうと言われて Sambaの共有にアクセスできなくなった時の対処 2015年1月21日
Linuxをクラッシュさせられるバグが権限昇格のバグに進化した件 2014年12月18日
Linux 3.18リリース 2014年12月8日
BASHの脆弱性でCGIスクリプトにアレさせてみました 2014年9月25日

お勧めカテゴリ

英語でアニメ観ようず
なじみ深い日本製アニメの英語版DVDで、字幕と音声から英語を学びましょうという趣旨のシリーズ記事です。
ScalaのようでJavaだけど少しScalaなJSON API
Scalaと Spring Frameworkを使って REST的なJSON APIを実装してみましょう。
ドクジリアン柔術少女 すから☆ぱいそん
代表 嶋田大貴のブログです。写真は神仏に見せ金をはたらく罰当たりの図