Rhythm & Biology

Engineering, Science, et al.

さくらVPS(CentOS6.4)でDockerを使う

Docker 0.7からaufs以外のstorage driverがサポートされてCentOSでもDockerが使えるようになりました。
aufsがサポートされていなければ、起動時にdevicemapperを利用してくれるとのことです。devicemapperもサポートされていなければvfsを利用。

CentOSにはepel使って簡単にインストールできるようになったので、さくらVPSで使ってみました。

# CentOSのバージョンは6.4
$ cat /etc/redhat-release
CentOS release 6.4 (Final)

インストール・起動

epelリポジトリが登録されていればyum一発で入ります。

$ sudo yum -y install docker-io
$ sudo service docker start

centosイメージを取得

$ sudo docker pull centos
$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              6.4                 539c0211cd76        8 months ago        300.6 MB (virtual 300.6 MB)
centos              latest              539c0211cd76        8 months ago        300.6 MB (virtual 300.6 MB)

mysql-serverをインストール(失敗)

Dockerfileを書いてmysql-serverをインストールしてみます。

$ cat Dockerfile
FROM centos
RUN yum -y install mysql-server
$ sudo docker build -t mysql-server .
...(省略)...
Error: Cannot retrieve repository metadata (repomd.xml) for repository: base. Please verify its path and try again
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os error was
14: PYCURL ERROR 6 - "Couldn't resolve host 'mirrorlist.centos.org'"
Error build: The command [/bin/sh -c yum -y install mysql-server] returned a non-zero code: 1

エラー・・・

コンテナが参照するDNSを変更

上記エラーについて深く追ってはいないのですが、DNSを変更すればうまく動きました。
考えられるやり方は2つ。

  • /etc/resolv.confを書き換えたイメージ作成してそれを利用
  • dockerサービス起動時のオプションでDNS指定

今回は後者でいきます。

# 起動時オプションを指定
$ cat /etc/sysconfig/docker
other_args="-dns 8.8.8.8"
# dockerサービス再起動
$ sudo service docker restart

mysql-serverをインストール(成功)

Dockerfileは全くいじる必要ありません。

$ sudo docker build -t mysql-server .
...(省略)...
Loaded plugins: fastestmirror
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package mysql-server.x86_64 0:5.1.71-1.el6 will be installed
...(省略)...
Complete!
 ---> 2e4d9c9867c3
Successfully built 2e4d9c9867c3

補足

Dockerfileで構築する場合("docker build"でやる場合)には、dockerサービスの起動時オプションでDNSを指定する必要があります。
"docker run"の場合は引数でDNSを指定できます。

$ sudo docker run -dns 8.8.8.8 -t centos ping -c 3 yahoo.co.jp

感想

VPSが貧弱だからか、それともaufsが使えないからなのか分からないのですが、コンテナ起動に時間がかかります・・・。

CentOS6.4ではstorage driverにvfsを使うようです。

$ sudo docker info
Containers: 1
Images: 2
Driver: vfs