前回の記事
この記事で得られるもの(目的)
- docker-composeで二つのDocker Containerを繋がって起動させる方法
この記事で扱わないこと
- Docker-composeの歴史
Agenda
- 作りたいものの全体像
- ファイル構造
- 実行コマンド
- ざっくりした説明
- 呟き
作りたいものの全体像
SinatraサーバーContainerとRedis Containerを連動させて、Redisに保存されてるデーターを引っ張ってくるもの。
ファイル構造
workspace
ㄴ app.rb
ㄴ Gemfile
ㄴ Dockerfile
ㄴ docker-compose.yml
##app.rb
#!/usr/bin/env ruby
#
require 'sinatra'
require 'redis'
require 'json'
r = Redis.new host: ENV["REDIS_HOST"], port:"6379"
get '/create_dummy_data' do
{
'test1': 'this is test 1',
'test2': 'this is test 2',
'test3': 'this is test 3',
'test4': 'this is test 4'
}.each do |key, value|
r.set key, value
end
'create successfully dummy data'
end
get '/fetch/:key' do
data = r.get params[:key]
return 'empty data' if data.nil?
data
end
##Gemfile
source 'https://rubygems.org'
gem 'sinatra', '2.0.8'
gem "redis"
##Dockerfile
FROM ruby:2.6.5
MAINTAINER jinument@gmail.com
ENV WORKSPACE /app
ADD ./Gemfile* $WORKSPACE/
WORKDIR $WORKSPACE
RUN bundle install
ADD . $WORKSPACE
##docker-compose.yml
version: "3"
services:
redis:
image: redis
ports:
- "6379"
web:
build: .
command: bundle exec ruby app.rb -o 0.0.0.0
volumes:
- .:/myapp
ports:
- "4567:4567"
depends_on:
- redis
environment:
- REDIS_HOST=redis
#コマンド
上のファイルを置いたDirectoryで以下のコマンドを実行する。
docker-compose build
→ docker-compose.ymlファイルの各servicesをbuildする。
docker-compose up -d
→buildされてるservicesたちを順に合わせて起動させる。
→ -d
はdaemonモードで起動させるOption。
docker-compose down
→ 起動されてるdocker-composeのservicesを停止させる。
#ざっくりした説明
上のdocker-compose.yml
ファイルを見ながらdocker-compose.yml
の基本構造を見てみよう。
version
でdocker-compose.yml
のversionを指定する。
services
の配下には実行される各Containerについての仕様が書いてある。
ここではredis
とweb
Containerを起動するつもりだ。
redis
配下のimage
とport
はDockerfileのコマンドと同じ意味でどういうDockerイメージを使うかと開放するportは何番にするかについて書く。
web
配下のdepends_on
はこのdocker-compose.yml
の内のContainerとの依存性を設定することで、これを指定することによってweb
からredis
というHost名でredis
Containerへのアクセスができることになる。
#呟き
- 大体
Dockerfile
のコマンドと意味が似っているので、dockerを理解していれば、そこまで嵌らないとおもう。 - 現状docker-composeの
links
は使われない。(docker offical documentから)
→ 代わりにdepends_on
を使おう。