参考にした記事
https://qiita.com/notozeki/items/ac1bf72cf44b7ed6a6ad
通常Dockerfileでは、カレントディレクトリにあるデータを「COPY」コマンドでイメージにコピーし作成しますが、githubからcloneしてサーバーを建てることで複数人で開発している場合のデプロイ作業を誰でも簡単にできるようにします。
筆者が作成したRailsアプリケーションを例にしています。適宜変更してください。
Dockerfile
FROM ruby:3.0.0-alpine
WORKDIR /app
ENV RAILS_ENV="production"
ENV NODE_ENV="production"
ENV SECRET_KEY_BASE=hogehoge
# 依存パッケージのインストール
RUN apk add --no-cache -t .build-dependencies \
build-base \
libxml2-dev\
libxslt-dev \
git \
&& apk add --no-cache \
bash \
file \
imagemagick \
libpq \
libxml2 \
libxslt \
nodejs \
sqlite-dev \
tini \
tzdata \
yarn \
&& gem install bundler:2.0.2
# これ以降はキャッシュが利用されないようにする。
ADD "https://www.random.org/cgi-bin/randbyte?nbytes=10&format=h" /dev/null
# Githubからクローン
RUN git clone https://github.com/kajikentaro/timetablemanager
# Workdirをクローンしたディレクトリに変更
WORKDIR /app/timetablemanager
# Gemfile.lockを更新するため一度bundle install
RUN bundle install
# ビルドの設定をデプロイメントに変更し、bundle install
RUN bundle config set --local deployment 'true' && bundle config set --local without 'test development' && bundle install
# ビルド時にのみ必要なパッケージをアンインストール
RUN apk del --purge .build-dependencies
RUN bundle exec rails assets:precompile \
&& yarn cache clean \
&& rm -rf node_modules tmp/cache
RUN rails db:migrate
ENV RAILS_SERVE_STATIC_FILES="true"
ENTRYPOINT ["/sbin/tini", "--"]
CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0", "-p", "3000"]
EXPOSE 3000
空ディレクトリ、もしくは適当なディレクトリにDockerfileという名前で保存した後、そのディレクトリ内で、
docker build .
とコマンドを実行。正しくできれば「Successfully built [ハッシュ値]」と出力される。
起動したいときは以下コマンド
docker run -itd -p 3000:3000 [ハッシュ値]
あとはブラウザからlocalhost:3000にアクセスすれば良い
おまけ
開発用のDockerfile。
FROM ruby:3.0.0-alpine
WORKDIR /app
# 依存パッケージのインストール
RUN apk add --no-cache -t .build-dependencies \
build-base \
libxml2-dev\
libxslt-dev \
git \
&& apk add --no-cache \
bash \
file \
imagemagick \
libpq \
libxml2 \
libxslt \
nodejs \
sqlite-dev \
tini \
tzdata \
yarn \
&& gem install bundler:2.0.2
# Githubからクローン
RUN git clone https://github.com/kajikentaro/timetablemanager
# Workdirをクローンしたディレクトリに変更
WORKDIR /app/timetablemanager
# Gemfile.lockを更新するため一度bundle install
RUN bundle install
RUN rails webpacker:install && rails db:migrate
CMD ["/bin/sh"]
EXPOSE 3000
$ docker run -it -p 3000:3000 [イメージハッシュ値] /bin/sh
# rails s -b 0.0.0.0
としてやると、localhost:3000でアクセスできる。developmentモードなので、コードを変更してもセーブすれば自動で反映する。