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

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

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

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

Docker

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

Q&A

解決済

2回答

1171閲覧

Dockerfileと、docker-compose.ymlの関係と役割を知りたいです。

jpj

総合スコア27

docker-compose

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

Docker

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

0グッド

0クリップ

投稿2020/09/14 15:24

FROM ruby:2.7.1-buster RUN gem install rails RUN apt-get update && apt-get install -y nodejs npm RUN npm install -g yarn RUN ["apt-get", "install", "-y", "vim"]
version: '3.1' services: mysql: image: mysql:8.0.21 command: --default-authentication-plugin=mysql_native_password volumes: - "./mysql-data:/var/lib/mysql" environment: MYSQL_ROOT_PASSWORD: root app: build: . volumes: - ".:/app" ports: - "3000:3000" tty: true depends_on: - mysql

例えば、FROM ruby:2.7.1-busterというdockerイメージがありますが、
docker-compose.ymlには、image: mysql:8.0.21というdockerイメージもあります。
なぜFROM ruby:2.7.1-busterをdocker-compose.ymlに書かないのでしょうか?

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

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

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

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

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

guest

回答2

0

app サービスは build が指定されています
image
build が指定されない場合は、そのイメージを使ってコンテナーを起動しますが、
build と同時に指定した場合は、ビルドを行ったイメージに付加するタグの指定となります

参考:

なぜ build が指定されているかは、
「なぜ既存のイメージをそのまま利用できないのか」
ということになります

この意図は次のいずれかの方法で調べます

  • コードやバージョン管理システムのログ等から予測
  • docker-compose.yml と Dockerfile を作成した人に確認

投稿2020/09/14 23:26

y_shinoda

総合スコア3272

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

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

jpj

2020/09/18 06:31

そうだったのですね。 ご回答頂きありがとうございました!
guest

0

ベストアンサー

mysqlコンテナは,mysql:8.0.21というimageをpullしてくるだけでそのまま利用しようとしています.
しかしappコンテナは,この例では,ruby:2.7.1-busterというイメージをもとに,rails, node, vimをインストールした新しいimageを作成して,その作られた新しいimageを利用してコンテナを立てています.
このようにdocker hubなどですでに作られているimageをそのまま利用してコンテナを作成する場合には,image: mysql:8.0.21というような指定をします.
また,docker hubなどですでに作られているimageを加工する必要がある場合は,Dockerfileにその加工方法を追記して,それをもとにコンテナを作成するというbuild: .という指定をしています.
もし,あなたが,mysql:8.0.21のイメージを自分のために加工したくなった場合は,rubyと同じように,

Dockerfile

1FROM mysql:8.0.21 2# 新しいイメージを作成するためのあれこれ

というDockerfileを任意の場所に作成し,

yml

1version: '3.1' 2services: 3 mysql: 4 build: 5 dockerfile: <Mysql用に作成したDockerfileのパス指定> 6 command: --default-authentication-plugin=mysql_native_password 7 volumes: 8 - "./mysql-data:/var/lib/mysql" 9 environment: 10 MYSQL_ROOT_PASSWORD: root 11 app: 12 build: 13 dockerfile: <app用に作成していたDockerfileのパス指定> 14 volumes: 15 - ".:/app" 16 ports: 17 - "3000:3000" 18 tty: true 19 depends_on: 20 - mysql

というような記述をdocker-compose.yml
にしてあげることで新しく作成した自分用のMysqlイメージを使ってコンテナを作ることができます.

このように,すでにどこかで作られているイメージを使うか,自分で構成したDockerfileを利用して作成したイメージを使うかで記述が変わってきます.
つたない文章ですいません.

投稿2020/09/14 15:48

kmdkuk

総合スコア141

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

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

jpj

2020/09/18 06:30

つたない文章だなんてとんでもない。 とても分かりやすくてやっと理解できました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問