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

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

新規登録して質問してみよう
ただいま回答率
85.50%
docker-compose

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

Ruby on Rails 6

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

Docker

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

Q&A

解決済

1回答

688閲覧

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

koma_05

総合スコア11

docker-compose

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

Ruby on Rails 6

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

Docker

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

0グッド

0クリップ

投稿2020/11/03 10:35

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

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

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

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

qiita1

1version: '3' 2 3services: 4 db: 5 image: postgres:12.0-alpine 6 volumes: 7 - ./tmp/db:/var/lib/postgresql/data 8 environment: 9 - TZ=Asia/Tokyo 10 11 web: 12 build: . 13 command: ash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" 14 volumes: 15 - .:/myapp 16 ports: 17 - "3000:3000" 18 depends_on: 19 - db

qiita2

1version: "3.8" 2 3services: 4 db: 5 image: postgres:11.0-alpine 6 volumes: 7 - postgres:/var/lib/postgresql/data:cached 8 ports: 9 - "5432:5432" 10 environment: 11 PGDATA: /var/lib/postgresql/data/pgdata 12 POSTGRES_USER: postgres 13 POSTGRES_PASSWORD: password 14 POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --locale=ja_JP.UTF-8" 15 TZ: Asia/Tokyo 16 app: 17 build: . 18 command: ash -c "rm -f tmp/pids/server.pid && ./bin/rails s -p 3000 -b '0.0.0.0'" 19 volumes: 20 - .:/myapp:cached 21 - rails_cache:/myapp/tmp/cache 22 - node_modules:/myapp/node_modules:cached 23 - bundle:/bundle:cached 24 tmpfs: 25 - /tmp 26 tty: true 27 stdin_open: true 28 ports: 29 - "3000:3000" 30 environment: 31 RAILS_ENV: development 32 NODE_ENV: development 33 DATABASE_HOST: db 34 DATABASE_PORT: 5432 35 DATABASE_USER: postgres 36 DATABASE_PASSWORD: password 37 WEBPACKER_DEV_SERVER_HOST: webpacker 38 depends_on: 39 - db 40 - webpacker 41 42 webpacker: 43 build: . 44 command: ./bin/webpack-dev-server 45 volumes: 46 - .:/myapp:cached 47 - node_modules:/myapp/node_modules:cached 48 environment: 49 RAILS_ENV: development 50 NODE_ENV: development 51 WEBPACKER_DEV_SERVER_HOST: 0.0.0.0 52 tty: false 53 stdin_open: false 54 ports: 55 - "3035:3035" 56 57volumes: 58 rails_cache: 59 node_modules: 60 postgres: 61 bundle:

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

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イメージ」が扱う範囲を区切ったもの、とも考えられます。

投稿2021/04/10 06:24

zembutsu

総合スコア1584

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問