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

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

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

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

Docker

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

Q&A

1回答

2662閲覧

Dockerfileとdocker-compose.ymlの関係について

xxyyxx

総合スコア40

docker-compose

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

Docker

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

0グッド

0クリップ

投稿2018/11/05 12:04

Dockerfileとdocker-compose.ymlの関係について、主に2点質問があります。

以下の記事にある、Go言語でのDocker化を試してしました。

https://qiita.com/po3rin/items/9acd41ef428436335c97

試している時、疑問が湧きました。
以前、 docker-compose up での起動の際、docker-compose.ymlのcommandが実行されると聞いたようなきがします。

上記の記事の記述ですと、最終的にDockerfileのCMD["fresh"]で終わっています。
この場合、
docker-compose.ymlのcommandが優先され、DockerfileのCMDが次に優先されると考えていいのでしょうか? (質問①)

また、docker-compose upで起動することが想定されている場合、Dockerfileは不要でもいいのでしょうか?
例えば、docker imageがすでに存在していれば、上記のDocker化でいうと、

version: '3' services: fresh: image: fresh:latest app: image: golang:1.9.3 build: . command: fresh volumes: - ./:/go/src/<project_name> ports: - "8080:8080" environment: GO111MODULE: on

これのdocker-compose.ymlだけで問題ないということでしょうか?(質問②)

そもそもDockerについての根本的な知識が不足しているかもしれませんが、
どなたかご教授よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

回答ではなく私の考え方なので参考程度に...

docker-composeのcommandコマンドは使ったことないのですが

dockerは1コンテナ1サービスが基本です。つまりDockerfileにサービスを実行するためのCMDコマンドは必ず書かれている状態です。例えばWEBサービス(httpdやnginxd)やDatabase(mysqld)などが該当します。
※バッチ系のコンテナの場合はシェルなどを呼び処理が終了すると終了させますが(日時や月次処理など)

つまり、dockerコンテナを立てあげる=サービスを立ち上げるため、docker-composeファイルにはcommandを書く必要性がないため使ったことがありません。

DockerfileのCMDを削除し、docker-composeのcommandに移行できたとしてもDockerfileの独立性が失われるため私はそのような記載方法はしないです。
(流用するときにDockerfile+docker-compose.ymlファイルの2ファイルの修正が必要になる)

質問①②を私なりの回答としてはDockerfileにCMDを書き、docker-composeのcommandを使用しないです。

私も独学なので実際のところ、どのように書くのがベストプラクティスなのか皆さんの意見を聞きたいです。

投稿2018/11/05 14:21

編集2018/11/05 14:23
mosapride

総合スコア1480

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

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

xxyyxx

2018/11/06 00:07

回答ありがとうございます! 私も質問してから少し調べまして、 Dockerfileを基に、docker-compose.ymlを記述がいいのでしょうか? docker-compose.ymlの各サービスで指定できるbuildがあると思うのですが、buildは指定されたディレクトリのDockerfileを見てビルドされる。 なのでコマンドは基本的にDockerfileに記述が良さそうですね! (なので質問②のDockerfile不要説のbuildって意味ないことになりますかね笑)
mosapride

2018/11/06 08:10 編集

DockerfileのVOLUMEは永続化・ホストOSと共有したい場合などに書きます。 DockerfileのEXPOSEは、そのサービスの使用ポートを示します。 DockerfileにVOLUMEがあれば、ホストと共有できることがわかり、EXPOSEがあればPORTを開かないと行けないことがわかるので、それをdocker-compose.ymlに記述する感じで私は作成してますね。 参考にしているQiitaではDockerfileが1つなので、どのような恩恵があるか理解しにくいと思いますが、複数のコンテナを立ち当たりするとdocker-composeの便利さがわかると思います。 (例:databaseコンテナ・Webアプリコンテナ・バッチコンテナなどで複数コンテナがdocker-compose up -dコマンドで全部動く!!)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問