ことさら−古都プログラマーの更級日記

京都でお寺を回りながら御朱印集めをしていたり、LoLをしたり試合を見に行ったりしているエンジニアのブログです。技術的なはなしとか日常的なはなし、カメラやLoLや競馬の話も書きます。右メニューに検索やらカテゴリーやらがあるので、見たい記事だけ見てね!

指定したバージョンのRubyとRailsが動くDocker環境を用意してsshできるようになるまで

もくじ

f:id:yoshiki_utakata:20180314164418j:plain

Rubyが動くDockerを作りたい理由

Rubyのバージョンをいじるためにrbenvとか使っている人も多いかと思いますが、そういうめんどくさいことを考えたくない。docker上で動かせばマシン自体の環境がどうだとかを意識する必要がない。

dockerのインストール

OSによって違います。僕の環境はMacなのでDocker for Mac的なやつをインストールしました。

今回利用したOSやDockerのバージョン

  • macOS Sierra 10.12.6
  • dockerのバージョンは以下
$ docker --version
Docker version 17.12.0-ce, build c97c6d6

dockerイメージをダウンロード

Ruby 2.5.0 がインストールされているイメージをダウンロードして、そこにRailsを入れていくという方法にします。

# イメージのダウンロード
$ docker pull ruby:2.5.0
2.5.0: Pulling from library/ruby
3e731ddb7fc9: Pull complete
47cafa6a79d0: Pull complete
79fcf5a213c7: Pull complete
68e99216b7ad: Pull complete
4822563608bb: Pull complete
9d614f26bec1: Pull complete
1c758cfc0888: Pull complete
8a4fbc3666ca: Pull complete
Digest: sha256:ed5fc221d5d03d89e1f8c1f7780b98bc708e68b4d8dba73594d017e999156619
Status: Downloaded newer image for ruby:2.5.0

# ダウンロードできたか確認
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ruby                2.5.0               bae0455cb2b9        3 weeks ago         869MB

DockerfileとDockerイメージの作成

FROM ruby:2.5.0
ENV LANG C.UTF-8
RUN apt-get update -qq
RUN apt-get install -y build-essential libpq-dev nodejs
RUN gem install bundler
RUN gem install rails -v 5.1.5
  • ruby:2.5.0 のイメージを使って
  • aptのアップデートと必要なライブラリのインストールをして
  • bundlerとrailsのインストールをする

といったところまでとりあえず記述。 このDockerfileをもとにdockerイメージを作成します。

$ docker build -t rails-515 .
(略)
Successfully built b70378b4f736
Successfully tagged rails-515:latest

docker build -t rails-515 . これでdockerイメージができます。イメージの名前は rails-515 で、.なのでカレントディレクトリの Dockerfile をもとにdockerイメージが作成されます。イメージができたかどうか確認してみます。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
rails-515           latest              b70378b4f736        9 minutes ago       960MB
ruby                2.5.0               bae0455cb2b9        3 weeks ago         869MB

ということでdockerイメージができました。

Dockerイメージから起動

dockerイメージから起動してみます。

$ docker run -i -t rails-515 /bin/bash
root@c1de73391dab:/#

docker run でイメージから起動します。 -t rails-515rails-515 のイメージから起動。 -i をつけた上で、 /bin/bash を指定すると、イメージが起動したら docker に接続して bash は起動します。

rubyrailsのバージョンを確認してみます。

root@c1de73391dab:/# ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]

root@c1de73391dab:/# rails -v
Rails 5.1.5

Rubyは2.5.0、Railsは5.1.5がインストールされています。

ssh したい場合

このイメージを起動したあとsshします。

Dockerを起動します。

$ docker run -d -p -t rails-515
d523ccec7be43b815f590b1f4180f0c53001320305c79498dbaabf75ae1eec70

こんどは-i じゃなくて -d で起動します。これでdaemonとして起動します。

デーモンとして起動していることを確認します

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
d523ccec7be4        rails-515           "irb"               4 seconds ago       Up 7 seconds

ssh的に接続してみます。

$ docker exec -it a3bb697d197341f23ff3 /bin/bash
root@a3bb697d1973:/#

これは、 a3bb697d197341f23ff3... のdockerでbashを起動しますという意味です。これでsshのような形になります。

停止方法

$ docker stop d523ccec7be43b815f590b1f4180f0c53001320305c79498dbaabf75ae1eec70
d523ccec7be43b815f590b1f4180f0c53001320305c79498dbaabf75ae1eec70

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

次回

次回はこの環境を使ってRailsアプリケーションを作っていくことを考えたいと思います。