docker composeのlinksの値をアプリケーションコードで使用する
はじめに
前回の記事では コマンドライン上から使ってみた。 ただ、実際はアプリケーションのコード側で使いたい場合が多い。
なので、そうするにはどうしたらいいのか調べてみた。
準備
まずは実行するための環境を作ります。
アプリを実行するコンテナを作ります
# Dockerfile FROM ruby:latest CMD mkdir app ADD ./app app/ WORKDIR /app RUN bundle install CMD bundle exec ruby app.rb
必要なgemのインストールためのGemfile
# Gemfile source :rubygems gem 'redis'
( 1個しか書かないGemfileは初めてかいたかも
アプリケーションコード
# app.rb require 'redis' redis = Redis.new( :host => ENV['SERVER_PORT_6379_TCP_ADDR'], :port => 6379, ) redis.set("docker", "coooool") value = redis.get("docker") puts value
redisに値をセットしてから取り出して表示する。 簡単なコードですね。
重要な部分は ENV['SERVER_PORT_6379_TCP_ADDR’],
です。
Environment variables referenceに命名規則が定義されてます。
今回は
name_PORT_num_protocol_ADDR
の
name
は link で渡ってきているSERVER
num
にはEXPOSE
されている値が入ってくる
そのため SERVER_PORT_6379_TCP_ADDR
となります。
実行してみる
あとは docker-compose.yml
を設定して実行するだけです
# docker-compose.yml server: command: redis-server image: redis:2.8 app: build: . links: - server
$ docker-compose up Recreating dockercomposesample_server_1... Recreating dockercomposesample_app_1... Attaching to dockercomposesample_server_1, dockercomposesample_app_1 server_1 | [1] 20 May 12:10:21.287 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf server_1 | _._ server_1 | _.-``__ ''-._ server_1 | _.-`` `. `_. ''-._ Redis 2.8.20 (00000000/0) 64 bit server_1 | .-`` .-```. ```\/ _.,_ ''-._ server_1 | ( ' , .-` | `, ) Running in stand alone mode server_1 | |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 server_1 | | `-._ `._ / _.-' | PID: 1 server_1 | `-._ `-._ `-./ _.-' _.-' server_1 | |`-._`-._ `-.__.-' _.-'_.-'| server_1 | | `-._`-._ _.-'_.-' | http://redis.io server_1 | `-._ `-._`-.__.-'_.-' _.-' server_1 | |`-._`-._ `-.__.-' _.-'_.-'| server_1 | | `-._`-._ _.-'_.-' | server_1 | `-._ `-._`-.__.-'_.-' _.-' server_1 | `-._ `-.__.-' _.-' server_1 | `-._ _.-' server_1 | `-.__.-' server_1 | server_1 | [1] 20 May 12:10:21.288 # Server started, Redis version 2.8.20 server_1 | [1] 20 May 12:10:21.290 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. server_1 | [1] 20 May 12:10:21.290 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. server_1 | [1] 20 May 12:10:21.290 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. server_1 | [1] 20 May 12:10:21.359 * DB loaded from disk: 0.069 seconds server_1 | [1] 20 May 12:10:21.360 * The server is now ready to accept connections on port 6379 app_1 | coooool dockercomposesample_app_1 exited with code 0 Gracefully stopping... (press Ctrl+C again to force) Stopping dockercomposesample_server_1...
ちゃんと coooool
が表示されています
最後に
docker-compose で使っているimage
を作り直すときはimageを削除してから docker-compose build
して検証していたのだけれどもっと良い方法あるのかな。