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
して検証していたのだけれどもっと良い方法あるのかな。
docker compose を使ってみた
はじめに
実際に docker-compose を使ってみた。
今回はsampleとしてredis-serverのコンテナとredis-clientのコンテナをそれぞれたて、 client側からserverへベンチをかけてみる。
設定
# docker-compose.yml server: command: redis-server image: redis:2.8 client: image: redis:2.8 command: redis-benchmark -h server -t set -n 10000 -r 100000 links: - server
結果
$ docker-compose up Creating dockercomposesample_server_1... Pulling image redis:2.8... Pulling repository redis 03887134769f: Download complete 21e4345e9035: Download complete b3d362b23ec1: Download complete 29809ed33dfd: Download complete b720af9a6508: Download complete c215cb712b89: Download complete 8d9a45a71a91: Download complete 8da9d27ff257: Download complete 8bd3343cbfc6: Download complete 37f5dcde0b92: Download complete 50c44c3f8567: Download complete 6286474082db: Download complete 4d2be13a8d7c: Download complete 41bec594de38: Download complete c95d0010b5d8: Download complete 5a0b2bd2db6b: Download complete 5992cb8c188e: Download complete Status: Downloaded newer image for redis:2.8 Creating dockercomposesample_client_1... Attaching to dockercomposesample_server_1, dockercomposesample_client_1 server_1 | [1] 20 May 09:25:26.467 # 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 09:25:26.472 # Server started, Redis version 2.8.20 server_1 | [1] 20 May 09:25:26.472 # 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 t his to take effect. server_1 | [1] 20 May 09:25:26.472 # 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' a s 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 09:25:26.472 # 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 09:25:26.472 * The server is now ready to accept connections on port 6379 ====== SET ======1856.68 client_1 | 10000 requests completed in 0.69 seconds [26/2270] client_1 | 50 parallel clients client_1 | 3 bytes payload client_1 | keep alive: 1 client_1 | client_1 | 46.05% <= 1 milliseconds … < 省略> … client_1 | 99.85% <= 88 milliseconds client_1 | 100.00% <= 136 milliseconds client_1 | 14409.22 requests per second client_1 | client_1 | dockercomposesample_client_1 exited with code 0 Gracefully stopping... (press Ctrl+C again to force) Stopping dockercomposesample_server_1... Exception in thread Thread-1 (most likely raised during interpreter shutdown): Traceback (most recent call last): File "/compose/build/docker-compose/out00-PYZ.pyz/threading", line 810, in __bootstrap_inner File "/compose/build/docker-compose/out00-PYZ.pyz/threading", line 763, in run File "/compose/build/docker-compose/out00-PYZ.pyz/compose.cli.multiplexer", line 41, in _enqueue_output File "/compose/build/docker-compose/out00-PYZ.pyz/compose.cli.log_printer", line 62, in _make_log_generator File "/compose/build/docker-compose/out00-PYZ.pyz/compose.container", line 140, in wait File "/compose/build/docker-compose/out00-PYZ.pyz/docker.client", line 918, in wait File "/compose/build/docker-compose/out00-PYZ.pyz/docker.client", line 79, in _post File "/compose/build/docker-compose/out00-PYZ.pyz/requests.sessions", line 425, in post File "/compose/build/docker-compose/out00-PYZ.pyz/requests.sessions", line 383, in request File "/compose/build/docker-compose/out00-PYZ.pyz/requests.sessions", line 486, in send%
こんな感じで client側からserverに接続できた。
なんで redis-benchmark -h server
で接続できるのか
というとclient側の/etc/hosts
に
172.17.1.11 b799fcf887da 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.1.9 dockercomposesample_server_1 f27c07cbc850 172.17.1.9 server f27c07cbc850 dockercomposesample_server_1 172.17.1.9 server_1 f27c07cbc850 dockercomposesample_server_1
が設定されているので server
という値で接続できるようになっている。
figあらためdocker-composeのインストール
はじめに
figに関しては下記の記事が参考になると思います
ただfigは昨年、docker社が買収し 、現在は Docker Compose となった模様です
ということで figあらためdocker-compose をインストールしてみたのでそれのメモです
インストール
公式サイト にインストール方法が書かれているのでそれに沿ってインストールしてみます
現在の最新版は 1.2.0
が最新の用です
公式では /usr/local/bin/
以下にダウンロードしていますが、今回は ~/bin/
以下にダウンロードしてみます。
$ curl -L https://github.com/docker/compose/releases/download/1.2.0/docker-compose-`uname -s`-`uname -m` > ~/bin/docker-compose $ chmod +x ~/bin/docker-compose
$ docker-compose —version docker-compose 1.2.0
特に問題なくインストールできました
boot2docker の https での通信をoff にする
はじめに
dockerをdockerコマンドではなくライブラリを使って接続しようとしたときにhttpsの認証周りが上手くできなかったので色々やってみました。
前提条件
- boo2docker, docker は
homebrew
を使ってインストールしています - dockerコマンド経由だったらhttpsでも特に問題なかったです
$ boot2docker version Boot2Docker-cli version: v1.6.1 Git commit: 076b58d $ docker version Client version: 1.6.1 Client API version: 1.18 Go version (client): go1.4.2 Git commit (client): 97cd073 OS/Arch (client): darwin/amd64
設定
結論から言うとboot2dockerで起動されたubuntu内の設定ファイルに追記してあげればhttpで通信できました。
設定ファイルを更新
boot2docker ssh sudo su - vi /var/lib/boot2docker/profile
# pofile DOCKER_TLS=no
を追記して から boot2docker restart
することで httpで通信できました
ただ、それまで問題なく動いていたdocker コマンドの挙動がおかしくなったのであまりオススメはできません。
他にもやり方があったら教えて欲しいです。
若手Webエンジニア交流会 #9 で発表しました #wakateweb
はじめに
運営していただいた方々、非常に楽しい時間を過ごせました!
そして、会場提供していただいた、SmartNewsさんありがとうございました。 オフィス見学もさせていただき非常に綺麗なオフィスで羨ましかったです!!
発表資料
こちら発表になります
サンプルのレポジトリはこちらになります。
Konboi/docker-practice · GitHub
発表の補足
現在のチームではdevサーバーのDB ServerにRDSを使用していています。
新しいbranchで開発環境を立てるときはstg環境からdbをdumpして新規DB作ってmaster branch に merge されたら該当のDBを削除するというような運用をしています。
その他必要なことも docker_run.sh でごにょごにょやっています。
まとめ
docker x mirage で快適な開発環境を導入してみてはいかがでしょうか?
発表はどっかんどっかんしませんでしたが、 docker x mirage は便利なので是非お試しあれ!! #wakateweb
— こんぼい。 (@Konboi) March 6, 2015
旅する勉強会 #0 運用x効率化の話をしました
はじめに
旅する勉強会ってなんぞやという方はこちらの記事をご覧ください
旅する勉強会 - tech.kayac meetup #0 を開催します
発表資料
資料です
感想
当日は社外で発表するという経験がないので緊張し早口になってしまい、聞きづらい発表になってしまったかと思います。 すいませんm( )m
運用してると不具合は出てしまうものですが、不具合が出るとチームの雰囲気も良くはなくなるし、補填処理とか色々とやらないといけない作業が発生してしまうので少なくなるにこしたことはありません。
運用してた経験からどうやって防いできたかというのが伝わってくれれば幸いです。
〇〇はどうしてる?? 等々聞きたい事あれば勉強会などで声をかけていただければと思います。