もくじ
Dockerを使ってRuby on Railsの開発を進められる環境を整えたいと思います。
ディレクトリを共有
hostのmacとdockerでディレクトリを共有して、mac上でコードを変更したらdockerにすぐに反映されて動作確認できるようにしたい。
アプリケーションを動かすユーザーを作成
ユーザーはなんでもいいです。Dockerfileに以下を追記
RUN apt-get -y install sudo RUN useradd -m -d /home/insta -s /bin/bash insta
instaユーザーが作成されます。sudoも同時にインストールしないとinstaユーザーにsudo su -できません。
いつも通り docker build -t insta .
とかでイメージを作成します。
ファイルを同期してみる
以下のコマンドでdocker runをします。
docker run -d -p 3000:3000 -v /Users/yoshiki-utakata/ruby/instagramapp/app:/home/insta/app -t insta
-p 3000:3000
でhostのポート3000をdockerのポート3000にフォワーディングさせます。(Rails用)- さらに
-v xxx:yyy
でhostのxxxファイルをdockerのyyyファイルに同期できます。
確認してみます。
$ docker exec -it 52dbd3862f91ccf6f9b3328de0d86012ca0e3cd53586e59a40460b46e7a29fd6 /bin/bash root@52dbd3862f91:/# sudo su - insta insta@52dbd3862f91:~$ ls app insta@52dbd3862f91:~$ cd app insta@52dbd3862f91:~/app$ ls insta@52dbd3862f91:~/app$
instaユーザーになれてlsするとappディレクトリができているはずです。
rails new してみる。
これで環境はだいたい整ったといえます。ゲストの方でrails newすればhostの方でも同じディレクトリができるはず...!
insta@52dbd3862f91:~/app$ rails -v -su: rails: command not found
instaユーザーだとpathが通ってなくてrailsコマンドが実行できませんでした...
ということで、adduserしたあとUSERコマンドでinstaユーザーに変わって(ついでにWORKDIRも/home/instaにして)railsのインストールをするようにDockerfileを変更。
RUN useradd -m -d /home/insta -s /bin/bash insta USER insta WORKDIR /home/insta RUN gem install bundler RUN gem install rails -v 5.1.5
この状態でdocker execするとinstaユーザーで/home/instaディレクトリから始まるようになり、rubyもrailsもコマンドが使えるように。
$ docker exec -it 15361f80b1e2ed951af0f98fbfe7138ad136bdc052a6486c119a0f03d967d4eb /bin/bash insta@15361f80b1e2:~$ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux] insta@15361f80b1e2:~$ rails -v Rails 5.1.5 ```` # Railsプロジェクトを作成してみる あくまでも手元のMacにrubyを入れたくないということでdocker上で実行してみます。
insta@15361f80b1e2:~$ cd app insta@15361f80b1e2:~$ rails new insta (略) Bundle complete! 16 Gemfile dependencies, 70 gems now installed. ...
ということで手元のMacの方のディレクトリを見てみると、こちらにもちゃんとapp/instaディレクトリができていることがわかります。 # Rails serverを動かしてみる Rails serverを動かしてみて、アクセスできるか試してみます。
insta@15361f80b1e2:~/app$ cd insta
insta@15361f80b1e2:~/app/insta$ bundle install
insta@15361f80b1e2:~/app/insta$ rails server
=> Booting Puma
=> Rails 5.1.5 application starting in development
=> Run rails server -h
for more startup options
Puma starting in single mode...
* Version 3.11.3 (ruby 2.5.0-p0), codename: Love Song
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
ということで、Macのポート3000がdockerのポート3000につながる設定にしていたので、つなげてみましょう。 http://localhost:3000/ つながりました。