質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

1回答

952閲覧

アプリの変更の度にDockerビルドするのをやめたい

terumin

総合スコア17

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

1クリップ

投稿2021/07/01 08:50

DockerでRubyOnRailsの開発をしており、リリースの度にDockerをビルドする必要があるのですが、

無駄に毎回、
・Ruby
・Node
・Bundler
などの全ビルドが走るので、かなり時間がかかっています。
このDockerビルドの時間を短縮できないか?というご相談です。

Dockerfileは以下です。

Dockerfile

1# chromeのイメージに、Ruby環境をインストールしていく 2FROM selenium/standalone-chrome-debug:3.141.59 3 4 5# rootユーザー -------------- 6USER root 7 8# デフォルトのログインユーザーにroot権限を付与 9RUN sudo gpasswd -a seluser sudo 10RUN apt-get update -y 11RUN apt-get update -qq && apt-get install -y mariadb-client git vim gcc make libssl-dev libreadline-dev zlib1g-dev 12RUN apt-get install -y build-essential g++ 13RUN apt-get install -y libmariadbd-dev 14RUN apt-get install -y pkg-config 15RUN apt-get install -y libmagickwand-dev 16 17RUN chmod -R 777 /var 18 19# 公式のインストール方法を参考に安定版で最新のyarnをインストールする 20RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - 21RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list 22RUN apt-get update && apt-get install -y yarn 23 24 25# Node.jsをインストール 26RUN curl -sL https://deb.nodesource.com/setup_14.x | sudo bash - && \ 27 apt-get install -y nodejs 28 29# デフォルトのログインユーザー -------------- 30USER seluser 31 32# Ruby 33RUN git clone https://github.com/rbenv/rbenv.git ~/.rbenv 34RUN git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build 35RUN echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc 36RUN echo 'eval "$(rbenv init -)"' >> ~/.bashrc 37RUN exec $SHELL 38RUN . ~/.bashrc 39 40RUN ~/.rbenv/bin/rbenv install -l 41RUN ~/.rbenv/bin/rbenv install 2.7.2 42RUN ~/.rbenv/bin/rbenv global 2.7.2 43 44 45# Rails 46ENV APP_ROOT /var/www 47 48RUN mkdir $APP_ROOT 49WORKDIR $APP_ROOT 50 51RUN mkdir $APP_ROOT/log 52RUN chmod 777 $APP_ROOT/log 53 54# ホスト側(ローカル)のGemfileをゲスト側にコピー 55COPY Gemfile $APP_ROOT/Gemfile 56COPY Gemfile.lock $APP_ROOT/Gemfile.lock 57COPY . $APP_ROOT 58 59RUN sudo chmod -R 777 $APP_ROOT 60 61USER seluser 62RUN /home/seluser/.rbenv/shims/gem update 63RUN /home/seluser/.rbenv/shims/gem install bundler 64RUN /home/seluser/.rbenv/shims/bundle install --path vendor/bundle 65RUN /home/seluser/.rbenv/shims/bundle 66 67USER root 68RUN mkdir -p $APP_ROOT/tmp/cache 69RUN chmod -R 777 $APP_ROOT/tmp/cache 70 71USER seluser 72# rubyのPATHを通す 73ENV PATH $HOME/.rbenv/bin:$PATH 74RUN eval "$(rbenv init -)" 75 76WORKDIR $APP_ROOT 77 78 79RUN sudo /home/seluser/.rbenv/shims/bundle install 80RUN sudo /home/seluser/.rbenv/shims/gem uninstall fileutils 81RUN sudo /home/seluser/.rbenv/shims/gem update --default 82RUN sudo /home/seluser/.rbenv/shims/bundle exec rails db:create || echo "db created" 83RUN sudo /home/seluser/.rbenv/shims/bundle exec rails db:migrate || echo "db migrated" 84RUN sudo chmod -R 777 $APP_ROOT 85RUN sudo rm /var/www/tmp/pids/server.pid || echo "removed running rails" 86RUN yarn install 87RUN yarn install --check-files 88CMD echo "server start.." 89CMD echo $RAILS_ENV 90CMD sudo chmod -R 777 $APP_ROOT && \ 91 sudo /home/seluser/.rbenv/shims/bundle install && \ 92 sudo /home/seluser/.rbenv/shims/gem uninstall fileutils && \ 93 {sudo rm /var/www/tmp/pids/server.pid || echo "there is no running rails"} && \ 94 sudo /home/seluser/.rbenv/shims/bundle exec rails s -b '0.0.0.0' -p 80

docker

1# docker-compose.yml 2version: '2.0' 3services: 4 mysql: # 【注意】caching_sha2_passwordエラーで接続できない時は、これをやる必要がある https://blog.toshimaru.net/rails-on-docker-compose/#error-caching_sha2_password-could-not-be-loaded 5 build: 6 context: . 7 dockerfile: DockerfileMySQL 8 environment: 9 MYSQL_ROOT_PASSWORD: password #rootユーザのパスワード 10 TZ: "Asia/Tokyo" 11 command: mysqld --sql_mode="" 12 volumes: 13 - ./mysql/data:/var/lib/mysql 14 - ./mysql/sql:/docker-entrypoint-initdb.d 15 web: 16 ports: 17 - 3000:3000 18 - 81:80 19 depends_on: 20 - mysql 21 build: . 22 environment: 23 TZ: "Asia/Tokyo" 24 env_file: 25 - .env 26 27 volumes: 28 - .:/var/www 29 - /dev/shm:/dev/shm # chromeがメモリ食うので、ホストの/dev/shm (RAM) をマウントすることでゲストのメモリ枯渇を防いでいる 30 depends_on: 31 - mysql 32 tty: true 33 stdin_open: true

アプリの変更後、
・Ruby
・Node
・Bundler
などの基盤部分は、なるべく毎回ビルドせずに高速化できる手段はありませんでしょうか?

どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ざっとあげられる高速化できそうなトピックになります。

  • マルチステージングビルドの活用
  • キャッシュの効きをよくするために、RUNをまとめたり、実行順序(よく変更する箇所を後に)を変更する。
  • 開発コード部分はマウントする

投稿2021/07/01 13:27

comefigo

総合スコア1045

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問