Docker化Riak Service

本例子的目标是为了显示你怎样构建使用预安装Riak的Docker镜像。

创建Dockefile

创建一个空文件Dockerfile:

  1. $ touch Dockerfile

接下来,定义继承镜像。我们将使用在Docker Hub上有效的Ubuntu(tag:latest)。

  1. # Riak
  2. #
  3. # VERSION 0.1.0
  4. # Use the Ubuntu base image provided by dotCloud
  5. FROM ubuntu:latest
  6. MAINTAINER HectorCastro hector@basho.com

稍后,我们安装并配置一些依赖项:

curl 被用来下载Basho’s APT repository key

lsb-release 帮助我们得到Ubuntu版本代号

openssh-server允许我们远程登录容器同时加入Riak 结点以形成集群

supervisor被使用来管理OpenSSH 和Riak进程

  1. # Install and setup project dependencies
  2. RUN apt-get update && apt-get install -y curl lsb-release supervisor openssh-server
  3. RUN mkdir -p /var/run/sshd
  4. RUN mkdir -p /var/log/supervisor
  5. RUN locale-gen en_US en_US.UTF-8
  6. COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
  7. RUN echo 'root:basho'| chpasswd

接下来,我们添加Basho’s APT repository:

  1. RUN curl -sSL http://apt.basho.com/gpg/basho.apt.key | apt-key add --
  2. RUN echo "deb http://apt.basho.com $(lsb_release -cs) main">/etc/apt/sources.list.d/basho.list

稍后,我们安装Riak,修改一些默认配置:

  1. # Install Riak and prepare it to run
  2. RUN apt-get update && apt-get install -y riak
  3. RUN sed -i.bak 's/127.0.0.1/0.0.0.0/'/etc/riak/app.config
  4. RUN echo "ulimit -n 4096">>/etc/default/riak

然后,我们暴露 Riak Protocol Buffers和HTTP接口(携带SSH):

  1. # Expose Riak Protocol Buffers and HTTP interfaces, along with SSH
  2. EXPOSE 8087 8098 22

最后,运行supervisord 以此让Riak和OpenSSH被启动。

  1. CMD ["/usr/bin/supervisord"]

创建一个supervisord 配置文件

创建一个空文件supervisord.conf。确保它和dockerfile在相同目录下:

  1. touch supervisord.conf

写入如下程序定义:

  1. [supervisord]
  2. nodaemon=true
  3. [program:sshd]
  4. command=/usr/sbin/sshd -D
  5. stdout_logfile=/var/log/supervisor/%(program_name)s.log
  6. stderr_logfile=/var/log/supervisor/%(program_name)s.log
  7. autorestart=true
  8. [program:riak]
  9. command=bash -c ". /etc/default/riak && /usr/sbin/riak console"
  10. pidfile=/var/log/riak/riak.pid
  11. stdout_logfile=/var/log/supervisor/%(program_name)s.log
  12. stderr_logfile=/var/log/supervisor/%(program_name)s.log

构建Riak镜像

现在你需要构建Riak镜像:

  1. $ sudo docker build -t "<yourname>/riak".

接下来

Riak 是一个分布式数据库。许多生产部署存在至少五个结点。查看 docker-riak项目关于怎样部署Riak集群使用Docker和Pipework的详细内容。