LoginSignup
0
0

railsアプリのDocker化

Posted at

既存のRailsアプリケーションをDocker化する道のりです

rails appをひとまずビルドしてみる

まずはこちらのチュートリアルに習い、Dockerファイルを作成、起動ができるかを試してみました。

このチュートリアルでも、Railsの起動を取り扱っているので、DockerFileはこちらを真似て作成。

FROM ruby:3.2.2
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp

apt-get update -qq(なんの)アップデート可能な一覧を表示

apt-get install (引数)引数のパッケージをインストールする
-y インタラクティブ(ユーザーへの問い合わせ)に「yes」と答えます。(文言変える)
https://webkaru.net/linux/apt-get-command/

  • build-essential
  • libpq-dev
  • nodejs
    それぞれ必要なやつ

こちらを

docker run -dp 127.0.0.1:3000:3000 getting-started
うまくビルドできた!
local3000にアクセスしてみると、「データベースがない:rage:」と怒られますが、
エラーメッセージは出るので起動はしていそう。

compose upしてみる

今度はデータベースも起動するために
またまたこちらのチュートリアルに習って、ymlファイルを作成して、Compose up まで行う

docker-compose.yml
version: '3'
services:
  db:
    image: postgres
    environment:
      POSTGRES_HOST_AUTH_METHOD: 'trust' 
    volumes:
        - ./postgres/data:/var/lib/postgresql/data
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db
volumes:
  postgres_data:

POSTGRES_HOST_AUTH_METHOD: 'trust'
本来はちゃんとパスワードを設定した方がよいとのことです

参考記事

ymlファイルを作成したら、
docker compose-up

初回のみデータベースをCreateしたあと、Migrationする必要があります
別でターミナルを起動して、

docker-compose run web rake db:create

Createしただけだと「Migrateされてない!」と怒られるので、Migrateもする
docker-compose run web rake db:migrate

ローカルホストにアクセス
http://localhost:3000/

スクリーンショット 2023-10-24 23.42.24.png

できた!

docker-compose downで停止しないと、
次回の起動時に「server.pidが既にあるよ!」と怒られるので、
そのときはローカルの該当ファイルを削除してみてください。

軽量化してみる

docker imagesでImageのサイズが確認できる!
みてみたところ、今回のイメージが1.16GBも使っていたので、軽量化にもチャレンジしてみました

試したこと

1. Dockerファイルを見直す

  • RUNが続いていた場合は、&&で繋げる
  • mkdirのあとにWORKDIRしてる場合は、WORKDIRのみにする
    • ディレクトリが存在しない場合は、自動的に作成してくれます!
  • 不要なADDをしていないかみてみる

これらをやってみたところ、
1.25GBに!増えてる!!!:rage:

2. ベースイメージを変える

他に軽量化するとしたら、ベースイメージを変えるしかない?と思っていたら、
alpineという軽いベースイメージがあるらしい!ということで、
これでBuildを試してみました

DockerFileの一行目を
FROM ruby:3.2.2-alpine3.18
に変更して、そのままビルドしたところ、
「apt-getなどない」
「build-essentialなどない」

0.911 ERROR: unable to select packages:
0.911   build-essential (no such package):
0.911     required by: world[build-essential]

「tzinfo-dataがない、インストールしろ」

`rescue in create_default_data_source': tzinfo-data is not present.
Please add gem 'tzinfo-data' to your Gemfile and
run bundle install (TZInfo::DataSourceNotFound)

などの文句を言われ、泣きながらDockerファイルを修正した結果、

FROM ruby:3.2.2-alpine3.18
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN apk update && \
    apk upgrade  && \
    apk add --no-cache alpine-sdk libpq-dev nodejs tzdata && \
    bundle install

こちらのファイルでBuildして動くようになりました!

apk add ・・・apt-getの代わり
alpine-sdk ・・・build-essentialの代わりのようです

Imageサイズも469MBに:v:
ただ、実行しているアプリの立ち上げや遷移の動きが若干鈍くなったような気がします。
重くてもいいなら、ベースイメージはそのままの方が良いかなと思いました

軽量化で参考にしたページ

build-essentialがないと言われた時

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