让我们大致地用Docker Compose将Sinatra和Redis连接起来试试看
上一篇文章
有关Docker的事项。
这篇文章的目的是什么?
- docker-composeで二つのDocker Containerを繋がって起動させる方法
这篇文章没有涉及的内容。
- Docker-composeの歴史
议程
-
- 作りたいものの全体像
-
- ファイル構造
-
- 実行コマンド
-
- ざっくりした説明
- 呟き
想要创造的事物的整体图景
将Sinatra服务器容器和Redis容器进行连接,以从Redis中提取存储的数据。
文件结构
工作空间
ㄴ app.rb
ㄴ Gemfile
ㄴ Dockerfile
ㄴ docker-compose.yml
app.rb 是一个Ruby程序文件。
#!/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 -> Gem文件
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
命令
在放置上面的文件的目录中执行以下命令。
使用docker-compose build指令来构建docker-compose.yml文件中的各个services。
docker-compose up -d
→依次启动构建好的服务。
→-d选项以后台模式启动。
→ 停止正在运行的 Docker Compose 服务。
大致解释
让我们通过查看上面的docker-compose.yml文件来了解docker-compose.yml的基本结构。
在docker-compose.yml文件中指定版本,使用”version”字段。
在services目录下,包含了关于每个将要执行的容器的规范。这里打算启动redis和webContainer。
在Dockerfile中,redis的image和port与命令相同,用于指定要使用的Docker镜像和开放的端口号。
通过在docker-compose.yml中设置web下的depends_on,可以设置与该容器的依赖关系。通过指定这一条件,web可以通过主机名redis与redisContainer进行通信。
咕哝声
-
- 大体Dockerfileのコマンドと意味が似っているので、dockerを理解していれば、そこまで嵌らないとおもう。
-
- 現状docker-composeのlinksは使われない。(docker offical documentから)
- → 代わりにdepends_onを使おう。