phoenix-powerDockerを使った経緯です。予想したとおり、Docker辺りのツールは、セキュリティ的な問題が来てます。

CoreOS

CoreOSについて書かれた記事です。Dockerについて言及されています。

Dockerのforkとしなかった理由については、「全てが中央のデーモン(プロセス)を通じて実行されるDockerの処理モデルには、セキュリティと再利用性において根本的な欠陥がある。こうした問題に対応しないまま、Dockerの破綻したセキュリティモデルをサポートし続けることはできない」と言い切っている。

http://www.atmarkit.co.jp/ait/articles/1412/02/news108.html

ということで、Vagrant上のCoreOSRocketを使ってみました。

簡単に説明すると、VagrantVirtualBoxを簡単に扱うものです。ラッパーという短縮スクリプトという感じのツールという印象です。Dockerに似てる感じはするのですが、バージョン管理的な機能は、Dockerが必要なのかもですね。

CoreOSは、コンテナという概念を用いて運用するOSのことです。コンテナは、使い捨てと独立という要素を意味する感じです。OS自体は、Gentoo Linuxのような必要最小限の構成と、独自の安全なセキュリティアップデートを採用している感じですね。

Rocketは、Dockerの代わりに採用されたものという感じでしょうか。仮想環境の構築運用支援ツール。

ここで、これからやる図、目標としては、以下のような感じになると思います。仮想環境に仮想環境を作るという感じですね。

[Mac-Vagrant]-[CoreOS-Rocket]-[http-server]

vagrant

Vagrantは、homebrew-caskを使うことでもCUIでのインストールは可能です。

自分で用意してもいいし、他人が作ったのを使ってもいいです。ただし、メンテされてないなどから危険も伴うので、気をつけてくださいと思います。

Mac
1
2
3
4
5
$ brew tap phinze/homebrew-cask

$ brew install brew-cask

$ brew cask install vagrant
1
2
3
4
5
6
7
$ git clone https://github.com/coreos/coreos-vagrant/

$ cd coreos-vagrant

$ vagrant up

$ vagrant ssh

rocket(rkt)

CoreOS
1
2
3
4
5
$ wget https://github.com/coreos/rocket/releases/download/v0.2.0/rocket-v0.2.0.tar.gz

$ tar xzvf rocket-v0.2.0.tar.gz

$ ./rocket-v0.2.0/rkt help

appc-spec(actool)

CoreOS
1
2
3
$ wget https://github.com/appc/spec/releases/download/v0.1.1/appc-spec-v0.1.1.tar.gz

$ tar zxf appc-spec-v0.1.1.tar.gz

golang(go)

CoreOS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ wget https://storage.googleapis.com/golang/go1.3.3.linux-amd64.tar.gz

$ sudo mkdir /opt

$ sudo tar zxf go1.3.3.linux-amd64.tar.gz -C /opt/

$ cat << EOF >> ~/.bash_profile
export GOROOT=/opt/go
export GOPATH=~/go
export PATH=$GOROOT/bin:$GOPATH/bin:$PATH
EOF

$ mkdir ~/go

$ exec $SHELL -l

$ go version

http-server

CoreOS
1
2
3
4
5
6
7
8
9
10
11
12
13
# actoolでコンテナを作ります
$ git clone https://github.com/syui/hello-aci

$ CGO_ENABLED=0 GOOS=linux go build -a -tags netgo -ldflags '-w' hello-aci/rootfs/bin/hello.go

$ mv hello hello-aci/rootfs/bin/

$ rm -rf hello-aci/.git

$  ./appc-spec-v0.1.1/actool build hello-aci/ hello.aci

# rktでコンテナを起動します
$ sudo ./rocket-v0.1.1/rkt --debug run hello.aci

コンテナを落としたいときは、C-]を3回押します。

試しにアクセスしてみましょう。アクセスログが表示されると思います。

Mac
1
2
3
$ vagrant ssh

$ curl 127.0.0.1:5000

参考:

http://blog.takady.net/blog/2015/01/13/coreos-rocket/