Docker を Scientific Linux 6 で動かす

面倒でした。特別な理由 (勉強目的、興味本意、何が何でもSL6が使いたい ) がないなら Ubuntu で動かしたら良いと思います ...

用意するもの

Docker を SL6 で動かすに当たっていろいろ自分で用意しないといけません

  • Aufs 付きカーネル
  • iptables で足らないモジュールを追加
  • go
  • LXC
  • Cgroup
  • Docker

以下手順をずらっと書いておきます。more better なやり方がありましたらブコメ等でご指摘ください :)

カーネルをビルドできるように丸っと入れる

sudo yum groupinstall 'Development Tools'

aufs のパッチが当たったカーネルをビルド

git clone git://github.com/sfjro/aufs3-linux.git
git checkout aufs3.9
make oldconfig
make menuconfig

menuconfig で以下のオプションを有効にする必要があります

 Symbol: AUFS_FS [=y]                                                                       
 Type  : boolean                                                                            
 Prompt: Aufs (Advanced multi layered unification filesystem) support                       
   Defined at fs/aufs/Kconfig:1                                                             
   Depends on: MISC_FILESYSTEMS [=y]                                                        
   Location:                                                                                
     -> File systems                                                                        
 (6)   -> Miscellaneous filesystems (MISC_FILESYSTEMS [=y])                                 
                                                                                            
Symbol: NETFILTER_XT_MATCH_ADDRTYPE [=n] 
 Type  : tristate
 Prompt: "addrtype" address type match support
   Defined at net/netfilter/Kconfig:798
   Depends on: NET [=y] && INET [=y] && NETFILTER [=y] && NETFILTER_XTABLES [=y] && NETFILTER_ADVANCED [=y]
   Location:
     -> Networking support (NET [=y])
       -> Networking options
         -> Network packet filtering framework (Netfilter) (NETFILTER [=y])
           -> Core Netfilter Configuration
 (1)         -> Netfilter Xtables support (required for ip_tables) (NETFILTER_XTABLES [=y])


 Symbol: NF_NAT_IPV4 [=m]
 Type  : tristate
 Prompt: IPv4 NAT
   Defined at net/ipv4/netfilter/Kconfig:133
   Depends on: NET [=y] && INET [=y] && NETFILTER [=y] && IP_NF_IPTABLES [=m] && NF_CONNTRACK_IPV4 [=m]
   Location:
     -> Networking support (NET [=y])
       -> Networking options
         -> Network packet filtering framework (Netfilter) (NETFILTER [=y])
           -> IP: Netfilter Configuration
 (2)         -> IP tables support (required for filtering/masq/NAT) (IP_NF_IPTABLES [=m])
   Selects: NF_NAT [=m]

                                                                  
 Symbol: MEMCG [=y]                                               
 Type  : boolean                                                  
 Prompt: Memory Resource Controller for Control Groups            
   Defined at init/Kconfig:825                                    
   Depends on: CGROUPS [=y] && RESOURCE_COUNTERS [=y]             
   Location:                                                      
     -> General setup                                             
       -> Control Group support (CGROUPS [=y])                    
 (3)     -> Resource counters (RESOURCE_COUNTERS [=y])            
   Selects: MM_OWNER [=y]                                         

ビルドしましょう

# ccache とか 並列度とかは適当に
make 
sudo make modules_install
sudo make install

# 後は grub を設定して再起動してね

go は バイナリを置く

wget http://go.googlecode.com/files/go1.1.1.linux-amd64.tar.gz
tar xvfz go1.1.1.linux-amd64.tar.gz
sudo mv go /usr/local
sudo ln -sv /usr/local/go/bin/go  /usr/local/bin

LXC は RPM としてビルドして入れる

wget http://lxc.sourceforge.net/download/lxc/lxc-0.9.0.tar.gz
rpmbuild -ta lxc-0.9.0.tar.gz
sudo rpm -ivh ~/rpmbuild/RPMS/x86_64/lxc-0.9.0-1.el6.x86_64.rpm ~/rpmbuild/RPMS/x86_64/lxc-libs-0.9.0-1.el6.x86_64.rpm

Docker のインストール

curl get.docker.io | sudo sh -x
sudo ln -sv /usr/local/bin/docker /usr/bin

ip_foward しないと ホストOS とコンテナ間でパケットが転送されない

sudo sysctl -w net.ipv4.ip_forward=1 

Cgroup も マウント ...

sudo mount -t cgroup cgroup /cgroup

いでよ Docker !

sudo /usr/bin/docker -d 
docker run base /bin/echo hello

enjoy !!!