質問編集履歴

1 書式の改善

pepperoni

pepperoni score 15

2021/01/13 12:23  投稿

dockerを使ってrails環境構築をしたい。
ある記事を参考に、dockerを使ってrails6の環境構築をしています。
ただ、その記事を見ていて疑問が湧き上がってきています。疑問点は記事内のDockerfileの記述①、②、③そしてdocker-compose.ymlの記述④の部分です。
Dockerfile
```ここに言語を入力
FROM ruby:2.7.1
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client ①
## nodejsとyarnはwebpackをインストールする際に必要
# yarnパッケージ管理ツールをインストール
RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
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 && \
apt-get update && apt-get install -y yarn
# Node.jsをインストール
RUN curl -sL https://deb.nodesource.com/setup_7.x | bash - && \
apt-get install nodejs                    ①'
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile ②
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp ③
# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]  
```
ここまでが疑問点①〜③
そして疑問点④です。
docker-compose.yml
```ここに言語を入力
version: '3'
services:
db:
image: postgres
volumes:
- ./tmp/db:/var/lib/postgresql/data
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"  ④
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
```
### ①に関して
①、①'でnodejsをinstallしています。わざわざ①と①'、二回やる必要はあるのですか?
### ②に関して
```ここに言語を入力
COPY Gemfile /myapp/
COPY Gemfile.lock /myapp/
```
という書き方ではいけないのでしょうか?
わざわざ
```ここに言語を入力
COPY Gemfile /myapp/「Gemfile」
COPY Gemfile.lock /myapp/「Gemfile.lock」
```
と書かかれている理由は何ですか?
### ③に関して
```ここに言語を入力
COPY . /myapp
```
この行の記述の意味は何ですか?また
```ここに言語を入力
COPY . /myapp/
```
とどのような違いがありますか?
また、そもそも③の記述は本質的に必要ですか?
実際、docker-compose.ymlファイルではカレンとディレクトリ(build context)をマウントするようにvolumes指定で記述します。③一行の意味、必要性が理解できません。
### ④に関して
Dockerfile内で
```ここに言語を入力
CMD ["rails", "server", "-b", "0.0.0.0"]
```
と書いておきながら、④で
```ここに言語を入力
...&& bundle exec rails s -p 3000 -b '0.0.0.0
```
と再度同じコマンドを実行するように記述しているのはなぜですか?というか必要ですか、これ?
  • Docker

    3309 questions

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

  • Ruby on Rails 6

    2317 questions

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

  • Ruby

    17642 questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • docker-compose

    1131 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る