表題の通り。Dockerをいい加減に手を付けなければならないか、、と思いやってみる事にした。とりあえず簡単な入門はCoreOSを使ってやってみたので、今回はCentOS環境にDockerを入れて同じようにやってみる。
■ 環境
- Mac OSX (10.9.5)
- CentOS 6.6
- Docker 1.5.0
- Vagrant 1.7.2
■ CentOS on Vagrant
DockerはLinuxでしか動かないようなので、VagrantでCentOSの環境を用意する事にした。
Mac > Vagrant > CentOS > Docker > Container(CentOS)
仮想化が随分と階層化されていてどことなく気持ち悪い。。というのがそもそもDockerになかなか手を付けなかった理由でもあるのだが。
CentOSのBoxを下記で探すと、いくつか検索に引っ掛かるが、今回は『chef/centos-6.6』を利用させて頂く。
https://atlas.hashicorp.com/chef/boxes/centos-6.6
$ vagrant box add chef/centos-6.6
途中でproviderを問われるが、自身の環境ではVirtualBoxなのでそれを選択した。
$ mkdir docker
$ cd docker
$ vagrant init chef/centos-6.6
$ vagrant up
■ Docker install (docker-engine)
下記を参考に、Dockerをインストールする。
http://docs.docker.com/installation/centos/
$ sudo yum update -y
$ curl -O -sSL https://get.docker.com/rpm/1.7.0/centos-6/RPMS/x86_64/docker-engine-1.7.0-1.el6.x86_64.rpm
$ sudo yum localinstall docker-engine-1.7.0-1.el6.x86_64.rpm
順調に行っていたのだが、、この後の動作確認で失敗となった。
$ sudo service docker start
Starting cgconfig service: [ OK ]
Starting docker: [ OK ]
$ sudo docker run hello-world
Cannot connect to the Docker daemon. Is 'docker -d' running on this host?
$
serviceコマンドは正常に終了しているものの、dockerデーモンプロセスが動いていないようである。initスクリプトを確認して、どんなコマンドを実行しているのかを見てみると、下記コマンドを実行しているようであったので個別に実行してみる。
$ sudo /usr/bin/unshare -m -- /usr/bin/docker -d
INFO[0000] Listening for HTTP on unix (/var/run/docker.sock)
WARN[0000] You are running linux kernel version 2.6.32-504.el6.x86_64, which might be unstable running docker. Please upgrade your kernel to 3.10.0.
INFO[0000] [graphdriver] using prior storage driver "devicemapper"
WARN[0000] Running modprobe bridge nf_nat failed with message: , error: exit status 1
FATA[0000] Error starting daemon: Error initializing network controller: Error creating default "bridge" network: operation not supported
$
WARNログではkernelを上げろ、というような事は書いてあるが、あくまでWARNなので問題は無いはず。原因がよくわからないので調べていると下記に辿り着く。
https://github.com/docker/docker/issues/14024
読んでいると、docker-engineとdocker-ioと別々のものがあるようだ。違いは何なのかよくわからなかったが、とりあえずdocker-ioを入れ直してみる事にする。
※ 2015/07/23 追記
1.7.1では正常に稼動したのかもしれない。(CentOSにdocker-engineをインストール)
不要となったdocker-engineを削除しておく。
$ sudo yum erase docker-engine
■ Docker install (docker-io)
docker-ioはEPELレポジトリにあるようなので、EPELレポジトリを使えるようにする。
$ sudo yum install epel-release
続いてdocker-ioをインストール。
$ sudo yum install docker-io
後はDockerのドキュメントに記載されていたものと同様に実行。
$ sudo service docker start
$ sudo docker run hello-world
正常に動作している事を確認できた。
$ docker images
FATA[0000] Get http:///var/run/docker.sock/v1.17/images/json: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?
$ docker ps -a
FATA[0000] Get http:///var/run/docker.sock/v1.17/containers/json?all=1: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?
$
vagrantユーザではdockerへのアクセスが許可されていないようなので、これもDockerのドキュメントに記載されている通り実行した。
$ sudo usermod -aG docker vagrant
ログインし直してdockerコマンドが使えるかを確認する。
$ docker ps -a
$ docker images
これらが正常に動作しているようなのでOKとする。
以上。