
今回も前回の続きをしていきます。
以下の環境を構築することを目的としています。
- DockerでRuby on Rails環境を構築
- RailsはAPIモード
- フロント側にはReact
前回は、「Dockerのインストール」、「docker-compose.ymlの書き方」という部分まで紹介しています。今回は2番目の「Dockerfile・Gemfileの準備」という部分の解説記事となっています。
この記事を書いた人
特別何か持っているわけではない普通の人が未経験からエンジニアに転職し、10年以上経験を積みフリーランスエンジニアになり、単価80万〜140万の案件に参画し稼げるように。プログラミングを始めた頃は、「プログラミング向いていないかも」、「自分のスキルレベル低い」と感じ悩んだ経験がある。
- 元プログラミングスクール運営企業の社員のためプログラミングの学習に詳しい
- 自分と同じように悩んでいる初心者へのアドバイスが得意。
DockerやDockerfileについて
Dockerは、前回の記事で少し触れましたが、アプリケーションの実行環境で、Vagrant、VirtualBox、VM Ware、XAMPP/MAMPなどと同様に開発現場で使われてきました。
Dockerfileを触るまえに、コンテナやDockerfileが何か説明しておきます。
Dockerのコンテナとは
Dockerには、コンテナと呼ばれるものがあり、ライブラリを集めたものとイメージしてもらうといいと思います。VirtualBoxなどの仮想化ソフトとは構成が異なっています。
Dockerfileとは
Dockerfileは、コンテナの内容を記述し、設定するファイルということになります。
この後、Dockerfileの書き方や説明をしていきます。もちろん開発で何を使うかによってDockerfileに記述する内容も変わってくるので、自分にあった環境を作る必要があります。
Dockerfileの書き方について
今回の環境ではapi側とfront側それぞれにDockerfileを準備します。
Api側のDockerfileの設定
api
- Dockerfile
- Gemfile
- Gemfile.lock
- entrypoint.sh
front
- Dockerfile
docker-compose.yml
api直下に置くDockerfileです。ハイライトされている部分ですね。
FROM ruby:2.7.1 RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs yarn RUN mkdir /myapi WORKDIR /myapi COPY Gemfile /myapi/Gemfile COPY Gemfile.lock /myapi/Gemfile.lock RUN bundle install COPY . /myapi COPY entrypoint.sh /usr/bin/ RUN chmod +x /usr/bin/entrypoint.sh ENTRYPOINT ["entrypoint.sh"] EXPOSE 3000 CMD ["rails", "server", "-b", "0.0.0.0"]
FROM | コンテナを生成するイメージを記述 |
RUN | 実行するコマンドを記述。細かいコマンドの説明はここでは省きますが、yarnやnode.jsをインストールしています。 例えば、 apt-get update(パッケージリストの更新) apt-get install -y(パッケージをインストール。-yで問い合わせに対してはyes) |
WORKDIR | コンテナ作業パスを記述 |
COPY | ローカルのファイルをイメージにコピーする。パスを記述 |
ENTRYPOINT | docker-compose upなどで初回起動時に実行したい処理を記述 |
entrypoint.shの設定
api
- Dockerfile
- Gemfile
- Gemfile.lock
- entrypoint.sh
front
- Dockerfile
docker-compose.yml
api側のDockerfileの中に「entrypoint.sh」の記述があるので、こちらから説明。
docker-compose upなどで初回起動時に実行したい処理を書く場合にentrypoint.shというスクリプトを呼び出しています。
不要なファイルを削除している。なければ無視。
#!/bin/bash set -e # Remove a potentially pre-existing server.pid for Rails. rm -f /myapi/tmp/pids/server.pid # Then exec the container's main process (what's set as CMD in the Dockerfile). exec "$@"
front側のDockerfileの設定
api
- Dockerfile
- Gemfile
- Gemfile.lock
- entrypoint.sh
front
- Dockerfile
docker-compose.yml
front側はこれだけです。nodeのイメージはalpineという軽量のものを使用しました。
FROM node:14.15.4-alpine WORKDIR /usr/src/app
Gemfileの書き方について
Gemfileはrailsアプリで利用するgemを管理するファイルですね。
Gemfileの設定
api
- Dockerfile
- Gemfile
- Gemfile.lock
- entrypoint.sh
front
- Dockerfile
docker-compose.yml
source 'https://rubygems.org' gem "rails", "6.0.2.1"
必要なgemは、後から追加すればいいので一旦これだけ記述しておきます。
Gemfile.lockの準備
api
- Dockerfile
- Gemfile
- Gemfile.lock
- entrypoint.sh
front
- Dockerfile
docker-compose.yml
空のファイルを準備します。Gemfileをもとにインストールされたgemのバージョンが記述されています。このファイルは自動で書き込みしてくれるので、特に触ることはないと思います。
まとめ
第2回が終わりました。ここまできたら設定はほぼ完了です。あとはコマンド打ってデータベースの設定を書くだけです。
第3回も続けて環境構築完了してみてください。
コピペで環境作ってもいいですが、何でどうしてって疑問を感じた時は調べてスキルアップしましょう(自分に言っている笑)
どうしても独学は学習の難易度が上がります。プログラミングスクール否定派もいますが、効率良く学ぶ上で僕はありだと思っています。
お金より時間の方がもったいないからです。Railsは多くのプログラミングスクールで教えています。僕が調べた感じでいくと以下の3校がおすすめです。
Ruby on Railsを学習するのであれば、以下のプログラミングスクールがおすすめです。理由は運営者が自社開発をすすめている点。卒業生が転職できるレベルのスキルが身についている点です。
- 気になったプログラミングスクールを3-4校くらいはピックアップする
- ピックアップしたプログラミングスクールの無料体験を受け比較する(最低3校)
- その中から自分に合ったプログラミングスクールを選ぶ