概要
Docker0.7からGentooでもDockerを利用できるようになりました.パッケージのインストール自体はemergeで簡単に行えますが,kernelの色々なオプションをオンにしたり,依存パッケージの設定をしたりと言った細々としたところを私の記憶の範囲でメモしておきます.
USEフラグの設定
以下の内容を/etc/portage/package.use
へ追記する.
#dockerがaufsを利用するようにする
app-emulation/docker aufs
#Kernelソースへパッチをあてる
sys-fs/aufs3 kernel-patch
app-emulation/docker aufs
を指定すると,Dockerがaufsを使用してコンテナの管理を行うようになります.
恐らく他のLinuxでのDockerはこの状態が標準となっており,このUSEフラグをオンにしないとコンテナ上でコマンドを実行するのに(docker run hoge echo hello
とかですら)20秒とかかかるようになるので気をつけましょう.
sys-fs/aufs3 kernel-patch
は上記aufsを使用するために,Gentoo Linuxが使用するカーネルのソースコード(gentoo-sources
)にパッチを適用するためのフラグです.
このフラグを使用せずにaufsを有効にする方法もあるようですが個人的にはこの手段が一番楽だったのでこの方法を使用しました.
#Dockerのインストール
USEフラグを設定したらいよいよDockerのインストールです.
$emerge app-emulation/docker
ここでの注意点としては,docker
という名前のパッケージは他にもPortage上に存在するようで,きちんとapp-emulation/docker
と指定しないとPortageに怒られます.
事前に設定していない場合はここで追加のKeywordやUSEフラグの情報が表示されるのでそれぞれ/etc/portage/pakcage.keyword
と/etc/portage/package.use
に追記(というかコピペ)しましょう.
その後再度emerge
し,全てのパッケージのインストールが完了すればDockerのインストールはほぼ完了です.
最後にもう一度カーネルをコンパイルしてください.
$cd /usr/src/linux
$sudo make && make modules_install
$mount /boot #私の環境の場合
$cp arch/x86_64/boot/bzImage /boot/gentoo-3.xx.x #私の環境の場合
トラブルシューティング
パッケージの衝突が起きてDockerのインストールができない
恐らくあなたの使用しているシステムのバージョンが古いのが原因です.一度emerge --deep --newuse world
をするなどしてシステムをアップデートしましょう.etc-update
も忘れずに.
aufs3のemerge時になんか言われて落ちる
恐らくあなたの使用しているLinuxカーネルのバージョンが古いのが原因です.
一度最新版のカーネルを構築し,そのカーネルを使用している状態でもう一度emerge
を試みましょう
#Dockerの起動
Dockerの起動は以下のコマンドでできます.
$/etc/init.d/docker start
起動したらきちんとDockerが動作しているかを確認しましょう.
$docker pull centos
$docker images
無事ビルドが完了している場合はpullしてきたCentOSコンテナの情報が表示されているはずです.
起動時にDockerが立ち上がるようにする
$rc-update add docker default
トラブルシューティング
Dockerの起動に失敗しているような気がする
/var/log/docker.log
を確認してみましょう.恐らく問題解決に有用な情報が書かれているはずです.
iptablesがなんかエラーを吐いている.
恐らくiptables用のカーネルモジュールが組み込まれていないことが原因です.
NETFILTER_XT_MATCH_ADDRTYPEというカーネルモジュールを追加でコンパイルしてみましょう.
#カーネルの設定
DockerはLXCを利用しているのでLXC関連のカーネルオプションは内蔵するかモジュール化しておくのが無難です.
どのカーネルオプションを設定すればいいのか分からない人はこの辺を参考にしてみては如何でしょうか.
私は何も責任を持ちませんが,私が私的に使用しているDockerを動かす為だけにビルドしたGentooのKernel設定を置いておきます.
https://gist.github.com/niyaton/138821cb519a2f59116a
check-config.sh
2014年1月から contrib/check-config.sh
なるファイルが追加されたようです.
このスクリプトを実行すると必要なカーネル設定が行われているかどうかを自動でチェックしてくれるようなので,上手く動作しない方は一度使ってみてはいかがでしょうか.
なお,GentooにDockerをインストールした後は /usr/share/docker/contrib/check-config.sh
にあります.