「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>Docker]]

*目次 [#l3c5bf46]
#contents

*概要 [#c05ae463]
-複数コンテナの一括管理ができる機能。
-Docker Composeファイル(docker-compose.yml)に定義する。
-既存の[[Dockerイメージ>Docker#vee01503]]や[[Dockerファイル]]をインテグレーションする感じ。

*ファイル [#l4bc9a24]

**docker-compose.yml [#z3a1b9a9]

***概要 [#m0fe40d1]
-基本的に、servicesに書くservices(コンテナ)を書く。
-buildには、[[Dockerファイル]]を指定する。
-imageには、[[Dockerイメージ>Docker#vee01503]]を指定する。
-その他は、≒ [[docker container runコマンド>Dockerコマンド#tfd54e44]] のオプション

***機能 [#v9a6fab6]
-バージョン
|Compose|Engine|h
|Compose 仕様|19.03.0|
|3.8|19.03.0|
|3.7|18.06.0|
|3.6|18.02.0|
|3.5|17.12.0|
|3.4|17.09.0|
|3.3|17.06.0|
|3.2|17.04.0|
|3.1|1.13.1|
|3.0|1.13.0|
|2.3|17.06.0|
|2.2|1.13.0|
|2.1|1.12.0|
|2.0|1.10.0|
|1.0|1.9.1|

-機能
--[[Dockerファイル]]によるイメージのビルド(build)
--[[Dockerイメージ>Docker#vee01503]]の指定(image)
--コンテナ内で動かすコマンドの指定(command/entrypoint)
--コンテナ環境変数の指定(environment/env_file)
--コンテナの情報設定(container_name/labels)

--入出力

---コンテナ間の通信(ports/expose)~
・portsは、ポートをホスト・マシンに公開する。基本的にはホスト側:コンテナ側と書く。~
・exposeは、ポートを仮想ブリッジ(docker0)に公開する。コンテナのポートのみを書く。~

---コンテナのデータ設定(volumes/volumes_from)~
・volumesは、ホスト・マシンのボリュームをマウントする。基本的にはホスト側:コンテナ側と書く。~
・volumes_fromは、V3 で 削除されたが、[[networks>Dockerのネットワーク設定#k76b1473]]のように、volumesが使える。~

--[[ネットワーク>Dockerのネットワーク設定]]
---コンテナ間の依存関係([[depends_on>Dockerのネットワーク設定#jf024355]])
---コンテナ間での連携([[links>Dockerのネットワーク設定#b82a9aee]])~
昨今、非推奨。[[networks>Dockerのネットワーク設定#k76b1473]]を使用する。

***例 [#v0f4a4c6]
https://github.com/daisukenishino2/EvaluateAspNetCoreOnDocker/blob/master/WebApplication1/docker-compose.yml

**docker-compose.override.yml [#rc0fc233]

***概要 [#fafc6ee2]
-上書き用ファイルで、ローカル・デバックに必要な情報を集約するなどの用途で利用する。
-K8sサービス用のイメージを作成する場合は、以下の様に明示して除外する。
 >docker-compose -f docker-compose.yml build

***例 [#y19d33d9]
https://github.com/daisukenishino2/EvaluateAspNetCoreOnDocker/blob/master/WebApplication1/docker-compose.override.yml

**その他のファイル [#v9694085]

***docker-compose.dcproj [#wc75c473]
-概要
--Docker用のファイルではなく、Visual Studio の Docker Composeプロジェクトのファイル
--ブラウザ起動の設定などが含まれるらしいが、細かい所はMSらしく、仕様が明記されていない。

-例
--https://github.com/daisukenishino2/EvaluateAspNetCoreOnDocker/blob/master/WebApplication1/docker-compose.dcproj

***, etc. [#xf7b07af]

**[[リファレンス>#bdfb82de]] [#z4047ee9]

***build [#z8a48d9a]
https://docs.docker.jp/compose/compose-file.html#build
-https://docs.docker.jp/compose/compose-file.html#context
-https://docs.docker.jp/compose/compose-file.html#dockerfile
-https://docs.docker.jp/compose/compose-file.html#args

***image [#aa6da4c2]
https://docs.docker.jp/compose/compose-file.html#image

***command/entrypoint [#d66afc1b]
-https://docs.docker.jp/compose/compose-file.html#command
-https://docs.docker.jp/compose/compose-file.html#entrypoint

***environment/env_file [#ke4e5549]
-https://docs.docker.jp/compose/compose-file.html#environment
-https://docs.docker.jp/compose/compose-file.html#env-file

***container_name/labels [#i6d3b574]
-https://docs.docker.jp/compose/compose-file.html#container-name
-https://docs.docker.jp/compose/compose-file.html#labels

***ports/expose [#c5970dcf]
-https://docs.docker.jp/compose/compose-file.html#ports

>「ホスト側:コンテナ側」と書けば安定。

-https://docs.docker.jp/compose/compose-file.html#expose

>「コンテナ側」と書く。

***volumes/volumes_from [#tfc111ad]
-https://docs.docker.jp/compose/compose-file.html#volumes-volume-driver

>「ホスト側:コンテナ側」と書けば安定。~
-ホスト側を「.」とすると、docker-compose.ymlの位置にマウントされる。
-コンテナ側のみ書くと、ホスト側のdocker-compose.ymlのサブ・ディレクトリの位置にマウントされる。
-なので、「./data:/data」などと書くと、解り易いと思われる。

-https://docs.docker.jp/compose/compose-file.html#volumes-from

***links/depends_on [#ub93df35]
-https://docs.docker.jp/compose/compose-file.html#links
-https://docs.docker.jp/compose/compose-file.html#depends-on

*コマンド [#ad911976]
-[[前述>#fafc6ee2]]のように、基本は、カレントの、~
docker-composeファイルに記述の範囲のサービスに作用する。

-カレント・ディレクトリの以下のdocker-composeファイルが対象
--docker-compose.yml
--docker-compose.yaml
--docker-compose.override.yml
--docker-compose.override.yaml

-コマンドに
--「-f」を付与し、ファイルを明示することも可能。
-- 「--remove-orphans」を付与し、ファイルで定義されていないサービスを対象にする。


**基本コマンド [#ga0cd21b]

***バージョン確認 [#s2a731d9]
 >C:\Users\nishi>docker-compose -v
 docker-compose version 1.24.1, build 4667896b

***確認 [#vfcc0ce5]

-ps
 >docker-compose ps -q

--構文
 docker-compose ps [Option] [ServiceName...]

--オプション
--- -q : ID のみ表示

-logs
 >docker-compose logs

--構文
 docker-compose logs [Option] [ServiceName...]

--オプション
--- --no-color : 白黒で画面に出力
--- --follow(-f) : ログの出力をフォロー(表示しつづける)
--- --timestamps(-t) : タイムスタンプの表示
--- --tail : 各コンテナのログの最終行から遡った行を表示

***開始 [#r9c0d903]
 >docker-compose up -d

>※ &color(red){-dを付与しない場合は、フォアグラウンドで動くので出力からデバッグなどが可能。};

-構文
 docker-compose up [Option] [ServiceName...]

-オプション
--実行(二者択一)
--- -d : バックグラウンドでコンテナを実行
--- --abort-on-container-exit : コンテナが1つでも停止したら全てのコンテナを停止
--再作成(二者択一)
--- --force-recreate : 変更がなくても、コンテナを再作成する
--- --no-recreate : コンテナが既に存在していれば、再作成しない
--その他
--- --no-color : 白黒で画面に表示
--- --no-deps : リンクしたサービスを表示しない
--- --no-build : イメージが見つからなくてもbuild しない
--- --timeout(-t) TIMEOUT : 停止する時のタイムアウト秒数を指定 (デフォルト:10)
--- --remove-orphans : ファイルで定義されていないサービス用

***停止 [#y7b7bb10]
-通常の停止
 >docker-compose stop

--構文
 docker-compose stop [Option] [ServiceName...]

--オプション
---timeout(-t) TIMEOUT : 停止する時のタイムアウト秒数を指定 (デフォルト:10)

-強制の停止
 >docker-compose kill -s SIGINT

--構文
 docker-compose kill [Option] [ServiceName...]

--オプション
--- -s : コンテナに送信するシグナル。デフォルトのシグナルは SIGKILL

***再開 [#af93fad0]
 >docker-compose start

--構文
 docker-compose start [ServiceName...]

--オプション~
なし

***再起動 [#zbd59ec6]
 >docker-compose restart

--構文
 docker-compose restart [Option] [ServiceName...]

--オプション
---timeout(-t) TIMEOUT : 停止する時のタイムアウト秒数を指定 (デフォルト:10)

***中断・再開 [#u5906005]
-中断
 >docker-compose pause

--構文
 docker-compose pause [ServiceName...]

--オプション~
なし

-再開
 >docker-compose unpause

--構文
 docker-compose unpause [ServiceName...]

--オプション~
なし

***削除 [#e47323a2]
-個別削除
 >docker-compose rm

--構文
 docker-compose [Option] [ServiceName...]

--オプション
--- --force(-f) : 確認なく削除する
--- -v : アタッチしたアノニマス・ボリュームも削除
--- --all(-a) : docker-compose run で作成した一度だけのコンテナを全て削除

-全削除
 >docker-compose down

--構文
 docker-compose down [Option]

--オプション
--- --rmi type : イメージの削除。type は'all' or 'local'
--- --volumes(-v) : 名前付きボリューム、アタッチしたアノニマス・ボリュームを削除
--- --remove-orphans : ファイルで定義していないサービス用のコンテナも削除

**個別のコンテナ操作 [#ud870602]

***コンテナ操作 [#g967375c]
 >docker-compose run webapplication1 /bin/bash
 root@041a67b9c5dc:/#

***コンテナ構成の確認 [#cd50bd7d]
-公開ポートの確認
 >docker-compose port webapplication1 80

--構文
 docker-compose port [Option] ServiceName Private_Port

--オプション
--- --protocol=proto : tcp or udp [Default : tcp]
--- --index=index : コンテナのインデックス数 [Default : 1]

-構成の確認
 >docker-compose config 

--構文
 docker-compose config [Option]

--オプション
--- --quiet(-q) : 認証設定以外のメッセージを表示しない
--- --services : サービス名を1行で表示

***コンテナのスケールアウト [#j786b0e3]
 >docker-compose up --scale webapplication1=3

-構文
 docker-compose up --scale [ServiceNameA=n...]

-オプション~
なし

**その他のコマンド [#m542fbf2]

***イメージのビルド [#h9fa64cd]
 >docker-compose up --build

**[[リファレンス>#q28bc59d]] [#gd28212b]

*用例 [#b2715a38]
以下が参考になる。

**各種サービス [#yf5e8328]
各種XXXXをDockerコンポーズ化する。

***[[各種NoSQL編>各種NoSQLをDockerコンポーズ化する。]] [#s63c2379]
***[[各種RDBMS編>各種RDBMSをDockerコンポーズ化する。]] [#mddbb4d2]
***参考 [#o5730b3f]
-docker-composeでデータベースコンテナを立てるときのTips~
https://muunyblue.github.io/9f067d8d6df2d4b8c64fb4c084d6c208.html


**[[K8s>Kubernetes]]連携 [#l96b05d0]

***[[Kompose]] [#h876e9dd]

***[[Compose on Kubernetes]] [#l5119673]

**マイクロソフト系技術情報 Wiki [#h39b8c85]

***[[Docker for Windows>https://techinfoofmicrosofttech.osscons.jp/index.php?Docker%20for%20Windows]] [#u6b0ed7d]

***[[Visual Studio Tools for Docker>https://techinfoofmicrosofttech.osscons.jp/index.php?Visual%20Studio%20Tools%20for%20Docker]] [#s7587e8f]
***[[Visual Studio Kubernetes Tools>https://techinfoofmicrosofttech.osscons.jp/index.php?Visual%20Studio%20Kubernetes%20Tools]] [#pddd612d]

*参考 [#gd128c02]

**docker.com [#y7bdd83a]

***Compose [#k61ad89b]
-https://docs.docker.com/compose/
-https://docs.docker.jp/compose/

***Compose file [#bdfb82de]
-https://docs.docker.com/compose/compose-file/
-https://docs.docker.jp/compose/compose-file.html

***Compose command [#q28bc59d]
-https://docs.docker.com/compose/reference/
-http://docs.docker.jp/compose/reference/
--https://docs.docker.jp/compose/reference/toc.html
--https://docs.docker.jp/compose/reference/index.html

**Qiita [#o4e38f73]
-Docker Compose - docker-compose.yml リファレンス~
https://qiita.com/zembutsu/items/9e9d80e05e36e882caaa

-docker-compose コマンドまとめ~
https://qiita.com/wasanx25/items/d47caf37b79e855af95f

-丁寧すぎるDocker-composeによる~
rails5 + MySQL on Dockerの環境構築(Docker for Mac)~
https://qiita.com/azul915/items/5b7063cbc80192343fc0

**さくらのナレッジ [#bf428c8f]
-連載:Docker Compose入門
--(1) ~アプリケーションをコンテナで簡単に扱うためのツール~~
https://knowledge.sakura.ad.jp/21387/
--(2) ~ウェブサーバの開発環境を作るための準備~~
https://knowledge.sakura.ad.jp/23632/
--(3) ~ネットワークの理解を深める~~
https://knowledge.sakura.ad.jp/23899/
--(4) ~ネットワークの活用とボリューム~~
https://knowledge.sakura.ad.jp/26522/

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS