LoginSignup
0
0

More than 3 years have passed since last update.

今更 Docker - Rails アプリケーションを作りたかった

Last updated at Posted at 2020-11-30

大人気 Docker を使ってのアプリケーション開発が活発化している(根拠なし)今日このごろ、実務で使っていても 実のところ細かいことについては一切何もわかっていない という体たらくに終止符を打つべくして、 Rails の開発環境を定義してみよう、というのが本日の題である。

先ずはとりあえず実行したい

ということで正しい経路かどうかはわからんが、 Docker のドキュメント あたりを読み進めていく。重要そうなことが書いてある気がするのを全力で読み飛ばしつつ、まずは取り敢えず対話側での実行をしたい。

docker run -it ruby:2.6.6 bin/bash

2.6.6-alpine 使いたかったけど Rails のインストール時にコンパイルエラー食らったから一旦諦める
オプションについては

  • -t: コンテナの中に擬似ターミナル(pseudo-tty)を割り当てる
  • -i: コンテナの標準出力(STDIN)を取得する

ということらしく、つまり この指定がないと対話型で使うことはできん ようだ。

Rails のアプリを発生させるぞ

コンテナに入ってさえしまえば、あとは単に rails new をするだけなので

gem install rails -v 6.0.3
rails new myapp

このままだと Node.js not installed. のエラーが出てたりとか、細かくは色々あるようだが、何にせよこれで開発に使えるアプリケーションソースが出来る… 訳がない のである。

ホスト側にファイルを置きたいんだけど

知っての通り(?)、コンテナ内のファイルはそのコンテナ内にあるものであって、そのままではホスト側から識別可能なものにならないため、開発に着手するには更に一手必要になる。
これの実現には Docker Volume の活用が必要で、コンテナの作成時に -v のオプションを与えると良いらしい。

# まぁ「今いるところ」なら pwd でいいかなというアレ
docker run -it -v `pwd`:/webapp ruby:2.6.6 bin/bash

これにより、ホスト側のカレントディレクトリがコンテナ側の /webapp ディレクトリにマウントされる(= ファイルを突っ込んだ場合はホスト側に配置される)ようになる。ホスト側の任意のディレクトリをマウントしたい場合は 左側も絶対パス指定じゃないと駄目 らしい点には留意が要る。 相対パスでも構わん、と書いてあるのは多分これ別の文脈の説明だな?

さておき、この状況であれば /webapp にさえ配置してやれば rails new の生成物がホスト側でも確認できるので、

rails new webapp/myapp

とすることで、手元に直接的に Ruby の実行環境を持っていなくても Rails のアプリケーションが作れる。

ひとまずはここまで。実用的な開発環境の定義には Dockerfile や docker-compose の活用が前提だと思うので、遠からずそちらも書き散らしていくとしたい。

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