iOSS

オープンソースをもっと身近なものに

Posted on by hagix9


Dockerの最新バージョンが0.6.7になりましたのでCentOSで使ってたものもバージョンアップしてみました。
すぐに0.7が出そうなきもしますけど。

https://github.com/sciurus/docker-rhel-rpm

のものを利用してますがそのままの手順だと無理ですので若干変更しています。
Githubにバイナリを上げてるのでダウンロードしてインストールすればすぐにDocker0.6.7が利用できます。

①SELinuxの無効化

sed -i.bak "s/\(^SELINUX=\).*/\1disabled/" /etc/selinux/config

②IPforwardの設定

sed -i.bak "s/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/" /etc/sysctl.conf

③-1(ダウンロード版)Docker,LXC,AUFS対応カーネルのインストール
RPMをチェックアウトしてインストールします。

yum install git -y
git clone git@github.com:hagix9/docker-centos-rpm.git
cd docker-centos-rpm
yum localinstall --nogpgcheck kernel-ml-aufs-3.10.11-1.el6.x86_64.rpm lxc-0.8.0-3.el6.x86_64.rpm lxc-libs-0.8.0-3.el6.x86_64.rpm lxc-docker-0.6.7-1.el6.x86_64.rpm -y

③-2(コンパイル版)Docker,LXC,AUFS対応カーネルのインストール
ダウンロードしてインストールするだけの場合はこの手順は必要ありません。

③-2-1リポジトリの追加

rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm 

③-2-2 ビルドツールのインストール

yum install spectool git mock -y

③-2-3 ビルド用ユーザの追加

adduser -m -G mock build

③-2-4 ビルド用ユーザにスイッチ

su - build

③-2-5 コンパイル用ツールをチェックアウト

git clone https://github.com/sciurus/docker-rhel-rpm.git

③-2-6 Docker0.6.7のコンパイル及びRPMの作成

cd docker-rhel-rpm
cp -a lxc-docker/lxc-docker.spec lxc-docker/lxc-docker.spec_bak
spectool -g -C lxc-docker lxc-docker/lxc-docker.spec
mock -r epel-6-x86_64 --buildsrpm --spec lxc-docker/lxc-docker.spec --sources lxc-docker --resultdir output
mock -r epel-6-x86_64 --rebuild --resultdir output output/lxc-docker-0.6.7-1.el6.src.rpm

③-2-7 LXC-0.8.0-3のコンパイル及びRPMの作成

spectool -g -C lxc lxc/lxc.spec
mock -r epel-6-x86_64 --buildsrpm --spec lxc/lxc.spec --sources lxc --resultdir output
mock -r epel-6-x86_64 --rebuild --resultdir output output/lxc-0.8.0-3.el6.src.rpm

③-2-7 AUFS対応カーネルのコンパイル及びRPMの作成

###ワークアラウンド###
そのままだとスペックファイルに問題がありますので修正します。
ただツールの問題ではないみたいなのでそのうち直ったら必要なくなるはずです。

cp -a kernel-ml-aufs/kernel-ml-aufs-3.10.spec kernel-ml-aufs/kernel-ml-aufs-3.10.spec_bak
sed -i '/include\/linux\/aufs_type.h/d' kernel-ml-aufs/kernel-ml-aufs-3.10.spec
sed -i '/aufs3-proc_map.patch/d' kernel-ml-aufs/kernel-ml-aufs-3.10.spec
sed -i '319a patch -p 1 < ../%{AUFSver}/aufs3-mmap.patch' kernel-ml-aufs/kernel-ml-aufs-3.10.spec
[/bash]
###

AUFS対応カーネルパッチのダウンロード
[bash]
spectool -g -C kernel-ml-aufs kernel-ml-aufs/kernel-ml-aufs-3.10.spec
git clone git://git.code.sf.net/p/aufs/aufs3-standalone -b aufs3.10
[/bash]

###ワークアラウンド
ソースコードが最近マージされて修正が必要みたいなので修正しておきます。
これももしかしたらそのうち修正されるのかもしれません。
[bash]
cp -a aufs3-standalone aufs3-standalone_5f8ee4
cd aufs3-standalone_5f8ee4
git checkout 5f8ee4
cp -a Documentation ../aufs3-standalone
cp -a fs/aufs/* ../aufs3-standalone/fs/aufs/
cp -a include/linux/ ../aufs3-standalone/include/
cd ..
################

コンパイルしてAUFS対応カーネルRPMの作成
[bash]
pushd aufs3-standalone
git archive aufs3.10 > ../kernel-ml-aufs/aufs3-standalone.tar
popd
mock -r epel-6-x86_64 --buildsrpm --spec kernel-ml-aufs/kernel-ml-aufs-3.10.spec --sources kernel-ml-aufs --resultdir output
mock -r epel-6-x86_64 --rebuild --resultdir output output/kernel-ml-aufs-3.10.11-1.el6.src.rpm
exit

③-2-9(コンパイル版)Docker,LXC,AUFS対応カーネルのインストール

cd /home/build/docker-rhel-rpm/output
yum localinstall --nogpgcheck kernel-ml-aufs-3.10.11-1.el6.x86_64.rpm lxc-0.8.0-3.el6.x86_64.rpm lxc-libs-0.8.0-3.el6.x86_64.rpm lxc-docker-0.6.7-1.el6.x86_64.rpm -y

④Cgroupの設定
cgconfigが動作しているのであれば停止します。

chkconfig cgconfig off

cgroupのマウント設定を行います。

cp -a /etc/fstab /etc/fstab_bak
echo "none                    /sys/fs/cgroup          cgroup  defaults        0 0" >> /etc/fstab

⑤GRUBの設定
AUFS対応カーネルで起動するよう変更します。

sed -i 's/default=1/default=0/' /boot/grub/grub.conf

⑦iptablesの設定
これは人によって違うためそれぞれ設定してください。
CentOSなどのインストール時に何も変更していないのであればそのままで問題ないかもしれません。

cp -a /etc/sysconfig/iptables /etc/sysconfig/iptables_bak
cat << 'EOF' > /etc/sysconfig/iptables
*nat
:PREROUTING ACCEPT [3:156]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:DOCKER - [0:0]
[0:0] -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
[0:0] -A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
[0:0] -A POSTROUTING -s 172.17.0.0/16 ! -d 172.17.0.0/16 -j MASQUERADE
COMMIT
#*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i docker0 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -i docker0 -j ACCEPT
#-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
EOF

OS起動時にiptablesが起動するようにしておきます。
NATは必要ですので起動しておく必要があります。

chkconfig iptables on

0.6.7から起動スクリプトが若干変わったのですが反映されていないみたいなの反映させます。

cat << 'EOF' > /etc/init/docker.conf
description "Docker daemon"

#start on filesystem and started lxc-net
start on filesystem or runlevel [2345]
stop on runlevel [!2345]

respawn

script
        DOCKER=/usr/bin/$UPSTART_JOB
        DOCKER_OPTS=
        if [ -f /etc/default/$UPSTART_JOB ]; then
                . /etc/default/$UPSTART_JOB
        fi
        "$DOCKER" -d $DOCKER_OPTS
end script
EOF

cat << 'EOF' > /etc/default/docker
DOCKER_OPTS="-H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock"
EOF

AUFS対応カーネルで起動します。

reboot

インストールは終わりですのであとはDockerを利用してみましょう。
デフォルトパスワードはubuntuです。

docker run -i -t -d -p 11111:22 --name ubuntu01 hagix9/ubuntu1310 /sbin/init
ssh ubuntu@localhost -p 11111

一般ユーザでDockerを利用する場合はDockerグループにユーザを追加しておきましょう。

usermod -G docker user

Posted on by hagix9 | Posted in 未分類


コメントを残す

メールアドレスが公開されることはありません。