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

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

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

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

Docker

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

Q&A

解決済

1回答

6717閲覧

docker-composeでのrunとupの違いについて

kazshi

総合スコア17

docker-compose

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

Docker

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

0グッド

0クリップ

投稿2021/05/02 23:19

昨日からdockerの勉強を始めました

docker-compose runではコンテナを作成してサービスに引数付けて実行ですが、今回runを行った際に
イメージから作成されているのですが。runの動きとしてイメージの作成も行っている認識で大丈夫でしょうか?
upではイメージの作成からコンテナの作成
runではイメージの作成からコンテナを作成してサービスに対して命令を与える事が出来る

こちらの認識であってますでしょうか?

何卒宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

まず、 docker-compose updocker-compose run は、どちらもコマンド実行時に Docker イメージが存在していなければ、Docker イメージを作ります。

これは Docker Compose でのはたらきというより、Docker Engine 側(docker run など )とも共通する動作です。

ですので「イメージの作成も行っている認識で大丈夫でしょうか?」については「その通りです」という答えです。

次に、 docker-compose updocker-compose run の違いです。

通常は、 docker-compose up を使い、docker-compose.yaml ファイルで定義した通り、常に同じような環境で実行したい場合に使います。ほぼデフォルトで使うコマンドです(ただし、 docker container run とは少し意味合いが違い、あくまで Docker Compose はサービス単位で操作します)。

そして docker-compose run は、その対象サービスで1度だけコマンドを実行する目的に使います。よくあるのは、環境の初期化コマンドの実行だったり、データベースの初期設定用コマンドを実行するようなものです。

参考:

投稿2021/05/03 01:36

zembutsu

総合スコア1584

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

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

kazshi

2021/05/03 02:55

親切なご回答ありがとうございます、docker-compose run初期化の際にサービスに対して命令を与えて(例えばDBのテストデータを入れるなど)を行いイメージからコンテナを作成してくれるのですね、 例えばrunの際に、実行したコマンドで作成されたデータはイメージに入り、再度コンテナ作成される認識であってますでしょうか?また、buildをした場合はコンテナをイメージする流れであってますでしょうか? お忙しいところ恐縮ですが、教えていただけると嬉しいです 何卒宜しくお願い致します。
zembutsu

2021/05/03 03:01 編集

少し Docker 独特の考えが必要となります。たとえばコンテナ実行後の変更というのは、元のイメージを変更するのではありません。あくまでも作成したコンテナに対する変更であり、元々のイメージはそのまま残り続ける仕組みです。 これを踏まえまして、「run」は作成済みのイメージを元にした、コンテナ用のファイルシステム上への記録です。そのため、元々(docker-compose buildなどで)構築したイメージそのものには変更してくれません。もし、常に同じような変更を加えた Docker イメージを使うのであれば、 Dockerfile などでコマンドを入れ込むほうが適切と考えられます。 (例外として、 docker commit コマンドを使い、コンテナ用のイメージレイヤを Docker イメージに変更する方法もあります。ですが一般的ではなく、かなり特殊な事情を求められる場合でしょう。通常は Dockerifle の中などイメージの自動構築時に処理されるほうが、後々の使い勝手があがります) そして、 docker-compose buildは、コンテナをイメージに変換するような考え方に違いのですが、正確には、Docker イメージを自動構築するためのコマンドです。docker-compose runで実行した(コンテナ用ファイルシステムへの変更)内容は、あくまで、対象となるコンテナだけに摘要されるものでして、元々の Docker イメージには手を加えません。
kazshi

2021/05/03 03:31

早速のご回答ありがとうございます、runの命令はコンテナ作成時のみに適用されるのと、runでイメージを作成したい場合にはymlや、ドッカーファイルに入れればイメージ化ができるんですね。 そうすると、コンテナに対してデータ(DBでインサートなど)してもcommitなどを使用しなければイメージ化が出来ず、イメージ化したい場合にはビルド時にドッカーファイルなどにDBデータを追加するスクリプトを埋め込んだり、マウントフォルダにhtmlなど本番環境で使うデータなどを入れてからビルドを行行えば、それらを含めてイメージ化でき、AWSなどのコンテナサービスなどにデプロイの流れで考えがあってますでしょうか?何度も申し訳ございません。
zembutsu

2021/05/03 04:09

最終的に別の場所で動かすための、元になる Docker イメージ、という意味であればお考えの通りです。 別の環境に動かす場合は、状況による、となりますが、毎回変更が発生しない作業であれば Docker イメージのなかに入れておく方が楽でしょう。
kazshi

2021/05/03 04:23

お忙しいところありがとうございました、不明点が解消されました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問