使用Docker容器化Rails (Step1)

--

努力學習Docker觀念和操作,把Rails7.0.8版本,Ruby2.7.2容器化,這只是Step1,後面還有更多需要強化的地方,持續走向有別於過去不同的部署專案方式,進入容器化、微服務的程式世界。

使用版本:

主流版本:Ruby 2.7.2, rails7.0.8

容器化:Docker版本(Docker version 24.0.6, build ed223bc)

資料庫:postgresql & mysql

1.在專案目錄下建立 Dockerfile 檔案:

FROM ruby:2.7.2
MAINTAINER andy <xxx@xxx.xx>
RUN apt-get update && apt-get install -y build-essential libpq-dev nodejs vim postgis imagemagick default-libmysqlclient-dev
RUN mkdir /app
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN gem install bundler:2.4.13
RUN gem install rake:13.0.6
#補充:如果使用sqlite3, pg, mysql2可以先不用裝
#RUN gem install sqlite3
RUN gem install pg
RUN gem install mysql2
RUN gem install nokogiri --platform=ruby
RUN apt-get update && apt-get install -y libsqlite3-dev
RUN bundle config set force_ruby_platform true
RUN bundle install

ENV SECRET_KEY_BASE=secret_key_base
# secret_key_base => ruby -rsecurerandom -e 'puts SecureRandom.hex(64)'
# 補充:這個key可以寫在環境變數檔案裡, 取變數較安全處理.

COPY . /app
CMD rake db:migrate assets:precompile && puma -C config/puma.rb

ENV RAILS_ENV production
ENV RAILS_SERVE_STATIC_FILES yes
ENV RAILS_LOG_TO_STDOUT yes

CMD ["bundle", "exec", "rails", "server"]

以上只是僅把此版本的Rails跑出來,自定義的gem和開發過程那個開發中再加入,接著就可以開始開發了。

下一階段是Nginx (web server)與Docker-compose的應用!

--

--