やわらかDocker
コンテナ/仮想化/サーバー/インフラについて、知っている単語を集めて見ましょう
(ジャンルがジャンルなので、本家RailsGirlsのBentoboxのようにうまくできないところもあるでしょう...)
# Gemfile
gem "sinatra"
# app.rb
require "sinatra"
get "/" do
"Hello, from Docker. My Ruby version is: #{RUBY_VERSION}"
end
これを立ち上げて「手元で」確認する
$ bundle install --path vendor/bundle
$ bundle exec ruby app.rb
# Dockerfile.step1
FROM ruby:2.5.1
CMD ["ruby", "--version"]
$ docker build -t fjord-bootcamp:sample1 -f Dockerfile.step1 .
$ docker run -t fjord-bootcamp:sample1
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
$ docker run -ti fjord-bootcamp:sample1 irb
irb(main):001:0> system 'pwd'
/
=> true
irb(main):002:0> exit
# Dockerfile.step2
FROM ruby:2.5.1
EXPOSE 8080
CMD ["ruby", "-run", "-e", "httpd"]
$ docker build -t fjord-bootcamp:sample2 -f Dockerfile.step2 .
$ docker run -d -p8080:8080 fjord-bootcamp:sample2
28db047f8dc29979b1d8876211fb9e2db841f1c211e73e4fdbad8ce011e0eaff
## ブラウザで localhost:8080 にアクセスする
## マシンには、「Rubyのプロセスがいない」ことも確認してみる
$ docker logs 28db047
[2018-12-02 12:15:30] INFO WEBrick 1.4.2
[2018-12-02 12:15:30] INFO ruby 2.5.1 (2018-03-29) [x86_64-linux]
[2018-12-02 12:15:30] INFO WEBrick::HTTPServer#start: pid=1 port=8080
172.17.0.1 - - [02/Dec/2018:12:15:37 UTC] "GET / HTTP/1.1" 200 3269
- -> /
[2018-12-02 12:15:37] ERROR `/favicon.ico' not found.
172.17.0.1 - - [02/Dec/2018:12:15:37 UTC] "GET /favicon.ico HTTP/1.1" 404 281
- -> /favicon.ico
172.17.0.1 - - [02/Dec/2018:12:15:46 UTC] "GET / HTTP/1.1" 200 3269
- -> /
[2018-12-02 12:15:46] ERROR `/favicon.ico' not found.
172.17.0.1 - - [02/Dec/2018:12:15:46 UTC] "GET /favicon.ico HTTP/1.1" 404 281
http://localhost:8080/ -> /favicon.ico
## 止めるには
$ docker stop 28db047
$ docker rm 28db047
Tips: .dockerignore というファイルで、イメージに送らないパスを指定できる。キャッシュのようなものは除外するのが吉
Dockerfile*
vendor/*
# Dockerfile.step3
FROM ruby:2.5.1
RUN mkdir /app
ADD . /app
WORKDIR /app
RUN gem install bundler
RUN bundle install --deployment --path vender/bundle
EXPOSE 4567
# "-o0.0.0.0" の謎については発展課題で...
CMD ["bundle", "exec", "ruby", "app.rb", "-o0.0.0.0"]
$ docker build -t fjord-bootcamp:sample3 -f Dockerfile.step3 .
$ docker run -d -p4567:4567 fjord-bootcamp:sample3
fc37f85c62e4ba9c61d9b710ea8694830aca51c0e0fe2046e02c6b9f0480b15e
## ブラウザで localhost:4567 にアクセスしよう
## アクセスログを確認
$ docker logs fc37f85
[2018-12-02 12:27:44] INFO WEBrick 1.4.2
[2018-12-02 12:27:44] INFO ruby 2.5.1 (2018-03-29) [x86_64-linux]
== Sinatra (v2.0.4) has taken the stage on 4567 for development with backup from WEBrick
[2018-12-02 12:27:44] INFO WEBrick::HTTPServer#start: pid=1 port=4567
172.17.0.1 - - [02/Dec/2018:12:27:47 +0000] "GET / HTTP/1.1" 200 45 0.0045
172.17.0.1 - - [02/Dec/2018:12:27:47 UTC] "GET / HTTP/1.1" 200 45
- -> /
172.17.0.1 - - [02/Dec/2018:12:27:47 +0000] "GET /favicon.ico HTTP/1.1" 404 469 0.0017
172.17.0.1 - - [02/Dec/2018:12:27:47 UTC] "GET /favicon.ico HTTP/1.1" 404 469
- -> /favicon.ico
require "sinatra"
get "/" do
"Hello, from Docker. My Ruby version is: #{RUBY_VERSION}"
end
get "/hello" do
"This is a new contents."
end
$ docker build -t fjord-bootcamp:sample3 -f Dockerfile.step3 .
...
brew install screen
screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
ps auxf
(CTRL-A + CTRL-\ to quit)
ps auxf
apt-get
でOSライブラリを入れるdocker-compose.yml
の例を示します。web:
build: lita
command: bundle exec lita
ports:
- 80:10080
links:
- redis
environment:
- REDIS_HOST=redis
- REDIS_PORT=6379
redis:
image: redis:5.0.2