Dockerで React on Ruby on Railsをするための最適なDocker Imageを作った
こんにちは。
最近はDockerを使ってReact on Ruby on Railsの環境を扱うプロジェクトが増えてきました。
今まではRubyのオフィシャルのDockerイメージをベースに各プロジェクトごとのカスタマイズをするDockerfileを作って、その中でnodeもインストールしていました。
そうすると、ちょっとしたことではありますが
デプロイ時のビルドが時間がかかるようになってて、Docker Imageもサイズが大きくなるという問題がありまして
ベースにするイメージとしてRubyとNodeだけが普通に入ったDocker Imageが欲しくなりました。
ですので、なるべくステップ数を減らすのと同時に、ビルド時間も省きたいということで
ビルド済みのオフィシャルのDocker Imageからモジュールをコピーしてくるようにしてみました。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ruby 2.6.1-stretch ae96a4ad4f3f 2 weeks ago 868MB ruby 2.6.1-alpine3.8 54be3a03b2ce 3 weeks ago 40MB node 10.15.1-stretch 8fc2110c6978 2 weeks ago 897MB node 10.15.1-alpine fe6ff768f798 3 weeks ago 70.7MB gendosu/ruby-node ruby-2.6.1-node-10.15.1-alpine 3587a2208693 2 hours ago 350MB gendosu/ruby-node ruby-2.6.1-node-10.15.1 abb6858a8103 2 hours ago 929MB old_image ruby-2.3.7-node-8.11.3 f62c2628dc94 6 months ago 2.67GB
結果、RubyとNodeを使える状態で、通常のDocker Imageだと1GBを切るサイズになりました。
Ruby on Rails関連でGemを追加していったら、1GBは超えるかもしれませんが
以前作成したDocker Imageからはかなりダイエット出来ました。
https://cloud.docker.com/repository/docker/gendosu/ruby-node
使い方は
とりあえずコンテナとして起動してみたい場合は
docker run –rm -it gendosu/ruby-node:ruby-2.6.1-node-10.15.1 bash
DockerfileでFROMに書く場合は
FROM gendosu/ruby-node:ruby-2.6.1-node-10.15.1
と書いてください。
gendosu/ruby-nodeについては、ロケールを変える等の操作はまったくしておらず、純粋にRubyモジュールとNodeモジュールを両方含んだDocker Imageという位置づけで作成しましたので、ロケールを変える、フォントファイルを追加する等は各自Dockerfileで行ってください。
そのうち、gendosu/ruby-node-jpを作成予定です。