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

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

ただいまの
回答率

87.34%

qiita記事を参考にalpineを使用したrails6.0の開発環境構築でのdocker-compose.ymlのservicesの種類の違いについて

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 437

score 9

教えていただきたいこと

  1. 二つの記事のdocker-compose.ymlのservecesの種類がqiita記事1ではdbとwebだけなに対し、qiita記事2ではdb,app,webpackerと違うのはなぜか。
  2. dockerのプロセスとは何か

現在のdocker知識レベル
・入門dockerを一通り学習
・Udemyでdockerの講座を一つ受けた

現状
dockerでrails6.0の環境構築をしようと思い,alpineを使い環境構築を行っているこちらのqiita記事1をコピペして環境構築をしました。
違うqiita記事2も参考にしようと思い見てみると、docker-compose.ymlでのservicesの種類に違いがありどう違うのかわかりませんでした。

servicesの種類が違う理由(仮説)
・下のdocker-compse.ymlでは上のファイルでのwebをappとwebpackerという二つのプロセスに分けてる。

version: '3'

services:
  db:
    image: postgres:12.0-alpine
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
    environment:
      - TZ=Asia/Tokyo

  web:
    build: .
    command: ash -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
version: "3.8"

services:
  db:
    image: postgres:11.0-alpine
    volumes:
      - postgres:/var/lib/postgresql/data:cached
    ports:
      - "5432:5432"
    environment:
      PGDATA: /var/lib/postgresql/data/pgdata
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --locale=ja_JP.UTF-8"
      TZ: Asia/Tokyo
  app:
    build: .
    command: ash -c "rm -f tmp/pids/server.pid && ./bin/rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp:cached
      - rails_cache:/myapp/tmp/cache
      - node_modules:/myapp/node_modules:cached
      - bundle:/bundle:cached
    tmpfs:
      - /tmp
    tty: true
    stdin_open: true
    ports:
      - "3000:3000"
    environment:
      RAILS_ENV: development
      NODE_ENV: development
      DATABASE_HOST: db
      DATABASE_PORT: 5432
      DATABASE_USER: postgres
      DATABASE_PASSWORD: password
      WEBPACKER_DEV_SERVER_HOST: webpacker
    depends_on:
      - db
      - webpacker

  webpacker:
    build: .
    command: ./bin/webpack-dev-server
    volumes:
      - .:/myapp:cached
      - node_modules:/myapp/node_modules:cached
    environment:
      RAILS_ENV: development
      NODE_ENV: development
      WEBPACKER_DEV_SERVER_HOST: 0.0.0.0
    tty: false
    stdin_open: false
    ports:
      - "3035:3035"

volumes:
  rails_cache:
  node_modules:
  postgres:
  bundle:
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

「services」の種類(サービス名)が違う理由は、直接的にはサービスごと(この例ではコンテナごとと考えて頂いて構いません)に別々の Dockerfile (Dockerイメージ)を使い、それぞれのコンテナ実行時の名前空間(プロセスやファイルシステムなど)を分ける方法が違ったからでしょう。

これは docker-compose.yml を書く方が、どのようにしてサービス(Docker コンテナ)を実行させたいかに依存します。ですから、記事によって作者なり動かしたいものが違えば、その意図によってコンテナ(イメージ)を分けたと考えられます。

「docker のプロセスとは何か」とのご質問については、「webをappとwebpackerという二つのプロセスに分けてる」との記述から、正確には「Docker Compose におけるサービスとは何か」というご質問とお見受けいたします。

Docker Compose では、「app」や「webpacker」など書かれている部分を「サービス」と呼びます。実態としては「Docker コンテナ」であり、仰るとおり「プロセス」と考えていただいてもほぼ間違いではありません。しかしながら、一般的にコンテナは複数のプロセスをまとめて動かしている(正確には同じPID名前空間内で動かしている)ため、必ずしも「1サービス」=「1コンテナ」とは限りません。

以上のような意味あいから、今回の2つの例におけるプロセス(Docker Compose における、「サービス」)とは何かを考えますと、1つの「Dockerイメージ」が扱う範囲を区切ったもの、とも考えられます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 87.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • トップ
  • Dockerに関する質問
  • qiita記事を参考にalpineを使用したrails6.0の開発環境構築でのdocker-compose.ymlのservicesの種類の違いについて