Redis サービスの Docker 化¶
非常にシンプルで飾り気のない Redis サービスを、リンク機能を使ってウェブ・アプリケーションにアタッチします。
Redis 用の Docker コンテナを作成¶
まず、新しい Redis イメージ用の Dockerfile
を作成します。
FROM ubuntu:14.04
RUN apt-get update && apt-get install -y redis-server
EXPOSE 6379
ENTRYPOINT ["/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
それから --link redis:db
オプションを使い、Docker がウェブ・アプリケーションのコンテナ内で利用可能な環境変数を作成します。
$ env | grep DB_
# Should return something similar to this with your values
DB_NAME=/violet_wolf/db
DB_PORT_6379_TCP_PORT=6379
DB_PORT=tcp://172.17.0.33:6379
DB_PORT_6379_TCP=tcp://172.17.0.33:6379
DB_PORT_6379_TCP_ADDR=172.17.0.33
DB_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
コンテナに接続するために、この環境変数や他の環境変数を利用できます。
参考
- Dockerizing a Redis service
- https://docs.docker.com/engine/examples/running_redis_service/