2014年8月5日火曜日

centos6.5のdocker v1.0でnsinitを使う

突然ですが放置していたこのブログの過去記事を削除して、技術ブログとしてリニューアルすることにしました。

さて、centos6.5のyum installではdockerがv1.0になってしまうため、 nsinitのインストールに苦労するみたいです。 (*
docker v1.0用のパッチを当てたnsinit(libcontainer)を本家からforkして作った(*)のでインストールの手順をまとめておきます。

 1.yum update

[root@localhost ~]# yum update -y

 2.golangのインストール

[root@localhost ~]# yum install --enablerepo=epel -y golang

 3.GOROOT,GOPATHの設定

GOROOTとGOPATHを設定して反映します。ちなみにubuntuの場合は、「GOROOT=/usr/lib/go」、「GOPATH=/usr/share/go」です。
[root@localhost ~]# echo 'export GOROOT=/usr/lib/golang' > /etc/profile.d/golang.sh
[root@localhost ~]# echo 'export GOPATH=/usr/share/gocode' >> /etc/profile.d/golang.sh 
[root@localhost ~]# echo 'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' >> /etc/profile.d/golang.sh 
[root@localhost ~]# bash

 4.docker/libcontainer/nsinitのダウンロード

go get でオプション-dを付けるとダウンロードまででインストールされません。
[root@localhost ~]# /usr/bin/go get -d github.com/docker/libcontainer/nsinit

 5.dotcloudのシンボリックリンクを設定

dockerの社名がdotcloudだった名残りで、シンボリックリンクを張らないとインストール時にコケます。
[root@localhost ~]# cd /usr/share/gocode/src/github.com/
[root@localhost github.com]# ln -s /usr/share/gocode/src/github.com/docker dotcloud
[root@localhost github.com]# ls -l
合計 20
drwxr-xr-x 3 root root 4096  8月  5 14:17 2014 codegangsta
drwxr-xr-x 3 root root 4096  8月  5 14:17 2014 coreos
drwxr-xr-x 4 root root 4096  8月  5 14:17 2014 docker
lrwxrwxrwx 1 root root   39  8月  5 14:18 2014 dotcloud -> /usr/share/gocode/src/github.com/docker
drwxr-xr-x 3 root root 4096  8月  5 14:17 2014 godbus
drwxr-xr-x 3 root root 4096  8月  5 14:17 2014 syndtr

 6.docker v1.0.1のチェックアウト

/usr/share/gocode/src/github.com/docker/docker の方は本家にtagがあるのでそちらに切り替えます。
[root@localhost github.com]# cd /usr/share/gocode/src/github.com/docker/docker/
[root@localhost docker]# git checkout -b v1.0.1 refs/tags/v1.0.1
Switched to a new branch 'v1.0.1'
[root@localhost docker]# git branch
  master
* v1.0.1

 7.docker/libcontainerの差し替え

 docker/libcontainer の方はソースを一旦削除し、forkしてきたレポジトリをcloneします。
[root@localhost docker]# cd /usr/share/gocode/src/github.com/docker/
[root@localhost docker]# ls
docker  libcontainer
[root@localhost docker]# rm -rf libcontainer/
[root@localhost docker]# git clone https://github.com/horidaisuke/libcontainer.git
Initialized empty Git repository in /usr/share/gocode/src/github.com/docker/libcontainer/.git/
remote: Counting objects: 1803, done.
remote: Compressing objects: 100% (590/590), done.
remote: Total 1803 (delta 1149), reused 1796 (delta 1145)
Receiving objects: 100% (1803/1803), 358.86 KiB | 199 KiB/s, done.
Resolving deltas: 100% (1149/1149), done.
[root@localhost docker]# ls
docker  libcontainer

 8.docker/libcontainer/nsinitのインストール

go installでインストールします。
[root@localhost docker]# go install github.com/docker/libcontainer/nsinit

 9.実行スクリプトの作成

最後に実行スクリプトを/etc/profile.d/nsinit.sh作って終了です。
[root@localhost ~]# cd /etc/profile.d/
[root@localhost profile.d]# vi nsinit.sh
[root@localhost profile.d]# bash
中身はこんな感じ。
docked() {
    declare container_id=$1
    if [ -z "$container_id" ]; then
        echo "Usage: docked <container_id> <command> [[args]...]" >&2
        return 1
    fi

    shift

    declare full_container_id=$(docker inspect --format '{{.Id}}' $container_id)
    (cd /var/lib/docker/execdriver/native/$full_container_id && /usr/share/gocode/bin/nsinit $*)
}
「docked コンテナID exec bash」でコンテナの中に入れます。
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES
58b072b50812        supervisor:latest   /usr/bin/supervisord   8 seconds ago       Up 7 seconds                            goofy_franklin      
[root@localhost ~]# docked 58b072b50812 exec bash
bash-4.2# 

0 件のコメント:

コメントを投稿