13
13

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.

GentooにDockerを導入するまで

Last updated at Posted at 2013-12-14

概要

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 にあります.

13
13
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
13
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?