0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ざっくりdocker-composeでsinatraとredisを連動させてみよう

Posted at

前回の記事

dockerについて

この記事で得られるもの(目的)

  • 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の基本構造を見てみよう。

versiondocker-compose.ymlのversionを指定する。

servicesの配下には実行される各Containerについての仕様が書いてある。
ここではrediswebContainerを起動するつもりだ。

redis配下のimageportDockerfileのコマンドと同じ意味でどういうDockerイメージを使うかと開放するportは何番にするかについて書く。

web配下のdepends_onはこのdocker-compose.ymlの内のContainerとの依存性を設定することで、これを指定することによってwebからredisというHost名でredisContainerへのアクセスができることになる。

#呟き

  • 大体Dockerfileのコマンドと意味が似っているので、dockerを理解していれば、そこまで嵌らないとおもう。
  • 現状docker-composeのlinksは使われない。(docker offical documentから)
     → 代わりにdepends_onを使おう。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?