Redis サービスの Docker 化

非常にシンプルで飾り気のない Redis サービスを、リンク機能を使ってウェブ・アプリケーションにアタッチします。

Redis 用の Docker コンテナを作成

まず、新しい Redis イメージ用の Dockerfile を作成します。

FROM ubuntu:14.04
RUN apt-get update && apt-get install -y redis-server
EXPOSE 6379ENTRYPOINT ["/usr/bin/redis-server"]

次に、 Dockerfile からイメージを構築します。 <自分のユーザ前> の場所は、自分自身のリポジトリ名に置き換えてください。

$ docker build -t <自分のユーザ名>/redis .

サービスの実行

先ほど作成したイメージを使い、コンテナ名を redis とします。

コンテナに -d を付けて実行すると、デタッチド・モードとして実行され、コンテナはバックグラウンドで動作します。

重要なのは、コンテナ内のポートを全く公開していない点です。そのかわり、Redis データベースに接続するには、コンテナに対するリンク機能を使います。

$ docker run --name redis -d <自分の名前>/redis

ウェブ・アプリケーションのコンテナを作成

次にアプリケーションのコンテナを作成します。 --link フラグを使い、 redis コンテナに対するリンクを作成します。ここでは db というエイリアス(別名)で作成します。これにより、 redis コンテナと安全なトンネルが作成されます。Redis インスタンスが公開しているコンテナ内のポートには、ここで指定したコンテナだけ接続できるようになります。

$ docker run --link redis:db -i -t ubuntu:14.04 /bin/bash

新しく作成したコンテナの中では、接続をテストするために redis-cli バイナリの取得・インストールが必要です。

$ sudo apt-get update
$ sudo apt-get install redis-server
$ sudo service redis-server stop

それから --linkredis:db オプションを使い、Docker がウェブ・アプリケーションのコンテナ内で利用可能な環境変数を作成します。

$ env | grep DB_# Should return something similar to this with your valuesDB_NAME=/violet_wolf/dbDB_PORT_6379_TCP_PORT=6379DB_PORT=tcp://172.17.0.33:6379DB_PORT_6379_TCP=tcp://172.17.0.33:6379DB_PORT_6379_TCP_ADDR=172.17.0.33DB_PORT_6379_TCP_PROTO=tcp

ここでは DB が接頭語となっている複数の環境変数が見えます。 DB とはコンテナ起動時に指定した、リンクのエイリアスです。 DB_PORT_6379_TCP_ADDR を使って Redis コンテナに接続してみましょう。

$ redis-cli -h $DB_PORT_6379_TCP_ADDR$ redis 172.17.0.33:6379>
$ redis 172.17.0.33:6379> set docker awesome
OK
$ redis 172.17.0.33:6379> get docker"awesome"$ redis 172.17.0.33:6379> exit

ウェブ・アプリケーションが redis コンテナに接続するために、この環境変数や他の環境変数を利用できます。