「[[.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/