Moby: Compose v3 / docker stackdeployに `extends`機胜のサポヌトを远加したす

䜜成日 2017幎02月16日  Â·  165コメント  Â·  ゜ヌス: moby/moby

芋るこずができるようにhttps://github.com/docker/compose/issues/4315 、 extends䞭に存圚する機胜docker-composeその欠陥にもかかわらず、ナヌザヌの間で人気があるようです。 ただし、これたでのずころ、゚ンゞンのCompose圢匏の実装には远加されおいたせん。 これたで、v3を䜿甚する堎合は、Composeファむル構造を単玔にフラット化するようにナヌザヌにアドバむスしおきたしたが、これは長期的な解決策ですか この機胜に䟝存するようになったナヌザヌに明確なアップグレヌドパスを提䟛するにはどうすればよいですか

cc @dnephin @vdemeester

arestack kinfeature

最も参考になるコメント

これだけでなく、倉曎ログには「これは削陀されたした。詳现に぀いおは、「アップグレヌド方法」を参照しおください」ず蚘茉されおいたす。 アップグレヌド方法の詳现に぀いおは「アップグレヌド方法」を芋おおり、「詳现に぀いおは「サヌビスの拡匵」を参照しおください」ず曞かれおいたす。 「拡匵サヌビス」に移動するず、ファむルを拡匵する方法がようやくわかりたすが、「これは削陀されたした。詳现に぀いおは、倉曎ログを参照しおください」ず衚瀺されたす。

この時点で、これはドキュメント䜜成者が挔じおいる残酷な冗談のよ​​うです。

党おのコメント165件

私はいく぀かのメモを远加したしたhttps://github.com/docker/compose/issues/4315#issuecomment-280617251それがdockercomposeファむル2.1バヌゞョンたで存圚するので拡匵を戻すこずは良い考えではありたせんが䞻な機胜は私ですミスは、抜象サヌビスを宣蚀できるこずですこれは決しお実行されるべきではありたせんが、䟿宜䞊、サヌビスの共通プロパティをグルヌプ化するために䜿甚できたす。

docker / compose4315からのコメントで、 extendsは少し質玠であるこずに同意したした。

解決策はお勧めしたせんが、FWIWは、悪甚の皋床を瀺すために、䜜成ファむルの䞊郚を食る芏則を次に瀺したす。

#
# Docker Compose configuration
#
# Due to lack of "expressivity" in Compose, we define our own couple of service
# "pseudo-types":
#
#   - image-only services (name: *-image)
#
#     The only goal of these is to build images. No other services build images.
#
#     These have entrypoint overridden to exit immediately.
#
#   - base services (name: *-base)
#
#     These contain common configuration and are intended to be extended.
#
#     Their command (not entrypoint, to keep the original one) is overridden to
#     exit immediately. Service must support a command to exit immediately.
#
#   - task services (name: *-task)
#
#     These are intended for running one-off commands.
#
#     Their default command is overridden to exit immediately. Service must
#     support a command to exit immediately.
#
#   - "real" services
#
#     These are actual services that stay up and running.
#
version: '2'
services:
  ...

v2.1のように拡匵するのは良い遞択だず思いたす。 Extendsは実際には単玔で理解しやすいものです。これは、各環境にずっお、dev、prod、envの間で少し読みやすい倉換を行うにはあたりにも良い習慣です。

実際、私は持っおいたす

  • 基本ルヌルを提瀺する䞀般的なdocker-composeファむル
  • 開発Dockerは、それを拡匵し、開発者向けの機胜を備えおいたす。
  • ステヌゞングドッカヌは、この環境のための蚭備を備えた䞀般的な拡匵も構成したす
  • プロダクションDockerは、この環境の機胜、特にコンテナヌレプリケヌション、再起動に関するルヌルなどを備えた、䞀般的な拡匵機胜も備えおいたす。

これは機胜したす。なぜこのチケットで完党な曞き盎しを怜玢する必芁があるのか​​わかりたせんが、興味深い機胜を維持する必芁がありたす。 Extendsは、他の手法では簡単に解決できない特別なナヌスケヌスの良い郚分です。 私は拡匵の可胜性に満足しおいたす。

v3.x圢匏ぞのアップグレヌドもブロックしたす。

Dockerコンテナの定矩は、むンスタンスごずのフォルダレむアりトに保持されたす。各フォルダには、手元のコンテナむンスタンスの環境仕様を定矩するdocker-compose.ymlが含たれおいたす。 䞀般的なものDRYを陀倖するために、芪フォルダヌ内の基本サヌビス定矩を䜿甚し、 extendを䜿甚したす。

したがっお、特定のコンテナヌむンスタンスを管理する必芁がある堎合は、適切なフォルダヌにcdするだけで、远加の構成なしでdocker-composeコマンドを盎接実行できたすチヌムメンバヌに-fフラグは必芁ありたせんルックアップたたは知る必芁があり、そのたたで期埅どおりに機胜したす。

バヌゞョン3の䜜成ファむルの䜿甚がブロックされおいたす。

私はservices.ymlを䜿甚しおサヌビスの基本レむアりトを定矩し、それを開発環境䞻にボリュヌムの远加甚にdev.services.ymlで拡匵したすが、拡匵のDRY再利甚性が気に入っおいたす。远加した。 これは取匕を劚げるものではありたせんが、必須の機胜がない限り、バヌゞョン3に移行できなくなりたす。

しかし、私はv2.1の「拡匵」゜リュヌションをより適切なもので改善するこずに反察しおいたせん。 抜象サヌビスのようなものは、より安党に䜿甚でき、より匷力になる可胜性がありたす。

たずえば抜象的であるため抜象ベヌスサヌビスがホスト郚分を定矩せずにロヌカルマりントポむントたたはサヌビスに必芁なネットワヌクを定矩する抜象ボリュヌム/マりントポむント/ネットワヌクのサポヌトを想像できたす-぀たり、掟生サヌビスは/を定矩できたすマりント/ボリュヌムずネットワヌクのホスト郚分を、ホスト/ステヌゞ環境で適切なものにマップしたす。

これは、私が知る限り、「extends」では今はできないこずの䟋であり、いく぀かの興味深い可胜性を開くでしょう。

拡匵機胜を削陀しおも、たったく圹に立ちたせんでした。 同じボリュヌムがマップされ、環境倉数ずラベルが蚭定された状態で開始された倚くのWebサヌビスがありたす。 たた、同じヘルスチェックポリシヌがありたす。 そしお、ポヌトは蚀うたでもありたせん。 同じホストで耇数のプロゞェクトを凊理しおいる堎合、耇数の-fオプションを䜿甚しお䜜成ファむルを組み合わせるのは面倒で゚ラヌが発生しやすくなりたす。

@ shin-これは3.2スキヌマに戻されたすか

私は本圓に、本圓にextendsファむル圢匏に戻したいず思っおいたす。 私はこれを䜿甚しお、倚くのプロゞェクトの抜象サヌビスをさらに改良しおきたした。 耇数の-fオプションがほが法案に適合するこずは理解しおいたすが、垞に機胜するずは限りたせん。 たずえば、私は抜象サヌビスの名前を、目前のプロゞェクトのコンテキストでより意味のある名前に倉曎するこずがよくありたす。 これは、耇数の-fオプションで発生するオヌバヌラむドがサポヌトしおいないものです。

ただし、ファむル内の抜象サヌビスを「むンスタンス化」する他の方法である限り、正確なextends倱っおもかたいたせん。

私は共通のサヌビスファむルずそれを拡匵する䞀連のサヌビスを備えたセットアップを持っおおり、䞻にボリュヌムを倉曎しおいるので、 extends機胜に䟝存しおいるず思いたすが、セットアップを説明する他の良い方法はありたせん。

--frustrated

+1
docker-composeファむルをフラット化するずいう掚奚事項の背埌にあるロゞックはわかりたすが、開発サヌビストポロゞを定矩するコヌドを耇数のプロゞェクトに耇補するずいうアむデアは奜きではありたせん。 今のずころ、シェルスクリプトで-f回避策を䜿甚しお、開発者がどのサヌビスをどの堎合に含めるかを芚えおおく必芁がないようにしたす。

構成構造のより良いファクタリングを可胜にする満足のいく解決策がここに芋぀かるこずを願っおいたす

私のナヌスケヌスリストの䞀番䞊にあるのは、構成管理された䞀連のサヌビスをドラむアップするこずです。 v3の堎合、「extends」を利甚できるず思いたした。 v2に戻りたくありたせん...そしお-fプロセスの回避策を䜿甚しなければならない特別な堎合はしたくありたせん。

ねえ、誰かがこれに取り組み始めたしたか 远跡するPRが芋぀かりたせん。 ここでもいく぀かのこずが簡単になりたす䞊蚘のナヌスケヌスず非垞によく䌌おいたす。

バヌゞョン3がフリヌズしおいお、共通の構成を共有する方法が必芁だったので、ここで共有できるず思う小さな回避策をハッキングしたしたこれが適切な堎所かどうかはわかりたせんが、他にどこでできるか教えおくださいこの情報を共有する:)

リポゞトリにreadmeがあるので、ここでは詳しく説明したせん。
玠敵なものを持っお、みんな☮

線集

申し蚳ありたせんが、ここにリンクがありたすD

+1

+1

+1

+1をありがずう💃
その間に、別のdocker noopむメヌゞを芋぀けたした。これは、10 ^ 3倍小さくなっおいたす実際のnoopがアセンブリで曞き蟌たれおいるため。

残念ながら、そのリポゞトリにはラむセンスがありたせん。 私はすでにfacebkで所有者にメッセヌゞを曞きたしたが、圌はただ答えおいたせん。 もっず倚くの人が圌にそれに぀いお質問したら、たぶん圌はラむセンスを远加するでしょう:)

拡匵ナヌスケヌスの䞀郚単䞀ファむル内のものに圹立぀可胜性のあるものは、YAMLアンカヌのサポヌトです https 

JSONスキヌマがservice must be a mapping, not a NoneType.怜蚌に倱敗しおいる可胜性がありたす。

ねえ、 @グレヌサむド、yamlアンカヌは少なくずも私にずっおは機胜したす。 私がそれらをどのように䜿甚するかに぀いおは、䞊蚘の私のコメントを参照しおください。

わかりたしたが、noopサヌビスを䜿甚するのは悲しいこずではありたせんか

特にenv倉数の堎合、それらのenv倉数はどのような倀を凊理したすか シヌクレットに関する堎合は、スりォヌムシヌクレット機胜たたはその他のシヌクレット゜リュヌションを䜿甚したす。 蚭定に関する堎合、ほずんどの堎合、蚭定はアプリ/サヌビス固有であり、サヌビス間で共有するこずを目的ずしおいたせん。

サヌビス間で蚭定を共有する必芁がある堎合、ほずんどの堎合、同じコンテナヌむメヌゞを起動したすが、実行時の目的/タスクコンシュヌマヌ、プロデュヌサヌ、httpワヌカヌなどが異なりたす。

蚭定に関する堎合、ほずんどの堎合、蚭定はアプリ/サヌビス固有であり、サヌビス間で共有するこずを目的ずしおいたせん。

私は反察する傟向がありたす。 私が珟圚取り組んでいるプロゞェクトでは、たずえばボリュヌムに䜿甚したす。

# Volume paths
environment:
  - &volume_a        volume-a:/usr/share/my_project/volumes/volume-a
  - &volume_b        volume-b:/usr/share/my_project/volumes/volume-b
  - &volume_c        volume-c:/usr/share/my_project/volumes/volume-c
  - &volume_d        volume-d:/usr/share/my_project/volumes/volume-d

これで、次のようにこれらのボリュヌムを指定できたす。

volumes:
  - volume-a:
  - volume-b:
  - volume-c:
  - volume-d:

services:
  some-service:
    image: some-image
    volumes:
      - *volume_a
      - *volume_b

  some-other-service:
    image: some-other-image
    volumes:
      - *volume_b
      - *volume_c

  some-third-service:
    image: yet-another-image
    volumes:
      - *volume_a
      - *volume_b
      - *volume_c
      - *volume_d

これにより、どのコンテナを䜿甚しおいるかを考えるこずなく、さたざたなボリュヌムを簡単にナビゲヌトできたす。Imho、これは、Docker構成のセットアップをより䞀貫性のあるものにし、䜿甚ず保守を容易にする1぀の方法です。

はい、 @ JanNashは理解しおいたすが、以䞋の䟋では、noopサヌビスがありたせんか

しかし、倚くの堎合、アンカヌだけでは䞍十分です。

私の堎合は、同じプロゞェクトで耇数の環境をサポヌトする必芁がありたす。 ここで私たちのプロゞェクトの足堎を芋るこずができ

開発時にはdevel.yamlを䜿甚したすが、本番環境ではprod.yamlを䜿甚したす。 test.yamlたす。 それらはすべおcommon.yamlから継承し、 .envファむルからいく぀かの䞀般的な倉数を取埗したす。

それぞれに独自の特性がありたす。

  • 開発環境は開発速床を目的ずしおいるため、ビルド匕数を䜿甚しおビルドを高速化し、開発者のコ​​ンピュヌタヌからのアプリコヌドを䜿甚しおボリュヌムをマりントし、アプリを倖郚から分離するダミヌサヌビスを远加したす。
  • prodは代わりに安定性を目指しおいるため、すべおのコヌドをダりンロヌドしおコンパむルし、ボリュヌムを䜿甚する代わりにむメヌゞ自䜓にバンドルしたす。 ビルドは遅くなりたすが、より安党です。
  • testは、prodずたったく同じですが、倖郚サヌビスから分離しお、倖郚の䞖界を汚染しないようにするこずを目的ずしおいたす。

この単玔な分離により、非垞に機敏で柔軟なDevOpsパむプラむンを実珟できたす。このパむプラむンでは、䜿甚する環境に応じお少し調敎するだけで、すべおの人が異なるステヌゞ間で同じコヌドを䜿甚したす。

ファむル圢匏v3を䜜成するように移動しようずしたしたが、 extendsがサポヌトされおい.envがないためです。 SwarmずDRYのどちらを遞ぶかは、今のずころDRYを遞択したしたが、い぀かSwarmが必芁になり、䞡方の機胜が再びサポヌトされるこずを願っおいたす...☺

...たたは少なくずも、DRYフル゜リュヌションから有効なDRYレスフォヌマットを生成する方法がありたす。 docker-compose bundleはそのためだず思いたしたが、今は非掚奚になる運呜にあるようです...

...たたは、すべおを䜜成する別のツヌルがありたす ansible-containerにも

https://github.com/moby/moby/issues/31101#issuecomment -301212524のリンクには、YAMLアンカヌの実䟋を含むREADMEが含たれおい

@JanNash👍

@Yajo聞いたこずがありたすが、これは回避策であり、

〜.envサポヌトがないため、回避策もハッキングしたした私のプロゞェクトはただ本番環境にないので、話は少し安いです、私は知っおいたす:)。 さたざたな環境今のずころ、ロヌカル開発ず小さな開発サヌバヌでさたざたな環境倉数のセット䟝存関係やむメヌゞのバヌゞョン/タグなどをサポヌトするために、 local.env 2぀のファむルを䜿甚したす。 development.envで、コマンドをdocker-compose <command>だけで実行する代わりに、前にそれぞれの.envファむルをシェルに゜ヌスするか、 (. local.env && docker-compose <command>)ように実行したす。 ただハックですが、今のずころ、私はこれに非垞に満足しおいたす。〜

玠敵なものを持っおください、y'all🚶

たぶん2桁でもD

@JanNash埅っお .envは3サポヌトされなくなりたしたか

私は実際には知りたせん、私はそれがそうではなかったずいうコメントを読んだだけです。
local.envずdevelopment.envのプロシヌゞャを䜿甚しおいるのは、䞻に、実装時にautoenvに぀いお知らなかったためですD
混乱の可胜性をお詫び申し䞊げたす。

ああ、 @ Yajoはこのコメントで.envサポヌトがないこずに蚀及したした。
@Yajo、詳しく教えおいただけたすか

すみたせん、私のせいです。 動䜜しおいないわけではなく、以前のように自動怜出されるのではなく、 env_file: .envで必芁があるだけです。 元の問題に戻りたしょう。

extendsどこかに萜ずすずいう議論はありたすか かなり䜿甚されおいる機胜であるこずがよく理解されおいるず思うので、ナヌスケヌスを瀺す前にそれを読んでみたいず思いたす。

こんにちは、私は1぀の質問がありたす-い぀ですか 「拡匵」サポヌトがv3に戻るのはい぀ですか

@JanNashあなたはそれよりもはるかに小さくするこずができたす。 私はあなたのリポゞトリに察しおgithubに問題を提出したした、私は私のマシンの750kから1200バむトにnoopを取埗したした。

珟時点では、矀れの䞭でextendを䜿甚できないこずがわかりたす。
同じ公開ポヌトを䜿甚し、1぀の远加の環境倉数を持぀サヌビス䞊の1぀のコンテナヌを䜿甚しお、同じサヌビスを起動する方法に぀いおのアむデアはありたすか

スりォヌムスタックデプロむでのサポヌトを拡匵するための+1

やあ、
耇数のgitリポゞトリに分散しおいるマむクロサヌビスアプリケヌションを実行しおいたすそれぞれにdocker-composeファむルがありたす。
デプロむは、各サヌビスを拡匵する1぀の「ルヌト」docker-composeファむルによっお䞻導されたす。私たちにずっお、このextends機胜はスタックデプロむに本圓に必芁です。
したがっお、スりォヌムスタックデプロむのサポヌトを拡匵するための+1もありたす
ありがずう。

YAMLの単玔な継承 &default 、 <<: *default を䞀時的な解決策ずしお䜿甚できたす。

version: '3'
services:
  worker: &default
    build: .
    command: bundle exec rake jobs:work
    env_file:
      - .env
    volumes:
      - .:/app
    depends_on:
      - db
      - redis
    links:
      - db:postgres
  web:
    <<: *default
    command: bundle exec puma -C config/puma.rb -p 3000
    ports:
      - "3000:3000"
  spring:
    <<: *default
    command: bundle exec spring server

もちろん、 extends機胜の方が優れおいたす

別のファむルを拡匵する堎合はどうですか

Yamlにはファむル拡匵機胜がありたせん:(

Dockerぞの寄皿者からこの機胜に関する曎新はありたすか これは再導入される予定ですか そうでない堎合、同様の蚈画はありたすか そうでない堎合は、なぜそうではありたせん..

@quolpr 、「プロトタむプ」぀たり&default は垞にDocker Composeによっお解釈されるため、ほずんどの堎合、「YAML単玔継承」コヌドはextendsに眮き換わらないのではないかず思いたす。 workerずいうサヌビス。 aしたがっお、どのサヌビスを明確に定矩する必芁があるか、b望たしくない可胜性がありたす。

ずにかく、間違いなく興味深い機胜です。

@laugimethodsは、YAML参照も䜿甚できたす。

version: '3'
services:
  spring:
    build: ./app
    command: /bin/sh -c "bundle exec spring server"
    volumes: &default_volumes
      - ./app:/app:delegated
      - bundle:/bundle:nocopy
  worker:
    build: ./app
    command: bundle exec sidekiq -v -C config/sidekiq.yml
    volumes: *default_volumes

 &default_volumesず*default_volumes泚意しおください

しかし、なぜextends機胜が削陀されたのか本圓に理解できたせん🀔

参考たでに、䞍足しおいる「拡匵」機胜を眮き換えるために、珟圚、 .yamlファむルの合成/マヌゞを䜿甚しおいたす。
https://github.com/Logimethods/smart-meter/blob/master/README.md#docker -compose

拡匵機胜が拡匵機胜を䜕らかのアンチパタヌンず芋なす堎合は、それを䜿甚しないでください。ただし、切り取らないでください。

extendsを䜿甚せずに、意図したアプロヌチの明確な説明をお願いできたすか 特にGitサブモゞュヌルに含たれるファむルから継承する堎合、クロスアプリケヌションネットワヌク配線などを凊理するメタプロゞェクトの定矩を可胜にする堎合に、これを広範囲に䜿甚したす。耇数のdocker-compose.ymlファむルを指定できるこずはよく知っおいたすが、それらをオヌバヌラむドしたす。これは、 extendsを䜿甚しお゜ヌス管理にチェックむンできるのではなく、コマンドラむンで盞互接続を指定する必芁があるこずを意味したすか たたは、v3のどこかでいく぀かの新機胜を芋逃したしたか

耇数のプロゞェクトでextendsを頻繁に䜿甚しお、さたざたな環境やさたざたなホストのサヌビス属性の共通セットを継承しおいたす読み取り extendsを䜿甚しお別のファむルから継承しおいたす。

昏迷でextendsキヌワヌドの削陀を読み、デむゞヌチェヌン接続を必芁ずしない代替品を芋぀けようずした埌、 -f dockercomposeファむルextendsを削陀する理由は䜕ですか。

linksずvolume-fromの問題は理解しおいたすが、ベヌスymlファむルでの䜿甚を控えるのが最善の方法のようです。

車をひっくり返すのに慣れおいるからずいっお、車のホむヌルを取り倖すこずはたずありたせん...そうですか

PSnoopずanchorsは面癜そうに芋えたすが、最も単玔なプロゞェクトに䞍必芁な耇雑さを远加したす...

非垞に単玔な䟋ずしお

common/common.yml

services:
  web:
    image: alpine:3.6
    build: .
    environment:
      DOMAIN:
      PREFIX:

dev/docker-compose.yml

services:
  web:
    extends: ../common/common.yml
    service: web
  ports:
    - "8080:8080"

prod/docker-compose.yml

services:
  web:
    extends: ../common/common.yml
    service: web
  image: the-prod-image:latest-release
  ports:
    - "80:80"
    - "80:443"
  environment:
    NEW_RELIC_KEY:

extendsなしでDRYの原則をどのように維持するのですか

珟圚、これが原因でバヌゞョン2.1からアップグレヌドする理由はありたせん。

@teodorescuserban 、

デむゞヌチェヌン接続-fdockercomposeファむル

それの䜕が問題なのですか docker-composeを呌び出すために、短い゚むリアスを䜿甚しお独自のスクリプトを䜜成できたす。

次の構造を䜿甚したす。

common / common.yml

services:
  web:
    image: alpine:3.6
    build: .
    environment:
      DOMAIN:
      PREFIX:

dev / docker-compose.yml

services:
  web:
    ports:
      - "8080:8080"

prod / docker-compose.yml

services:
  web:
    image: the-prod-image:latest-release
    ports:
      - "80:80"
      - "80:443"
    environment:
      NEW_RELIC_KEY:

コマンド

docker-compose -f common/common.yml -f dev/docker-compose.yml -p myproject up --build
docker-compose -f common/common.yml -f prod/docker-compose.yml -p myproject up --build

私はその機胜を知りたせんでした。 CLIは💩になりたすが、機胜したす。

それがextendsの正匏な代替品になるのであれば、それを簡単にする方法があるはずだず思いたす。

䟋えば

docker-compose.yml

version: "3"  # or whatever
extend:
  - ./common/common.yml
  - ./dev/docker-compose.yml
services: # Not required now
  # etc.

このようにしお、必芁なすべおを実行する単䞀のdocker-compose.ymlファむルを指すこずができたす。

䟿利な代替手段は、 COMPOSE_FILE環境倉数で耇数の䜜成ファむルをサポヌトするこずです。

@ダゞョ

䟿利な代替手段は、COMPOSE_FILE環境倉数で耇数の䜜成ファむルをサポヌトするこずです。

https://docs.docker.com/compose/reference/envvars/#compose_fileから

この倉数は、パス区切り文字で区切られた耇数のComposeファむルをサポヌトしたすLinuxおよびmacOSではパス区切り文字は: 、Windowsでは; 。 䟋 COMPOSE_FILE=docker-compose.yml:docker-compose.prod.yml 。 パス区切り文字は、 COMPOSE_PATH_SEPARATORを䜿甚しおカスタマむズするこずもできたす。

@ dermeister0 https://github.com/ImmobilienScout24/yamlreaderなどのツヌルを䜿甚しお、これらのファむルを氞続的にマヌゞするこずもでき

> yamlreader common/common.yml prod/docker-compose.yml > docker-compose-prod.yml
> docker-compose -f docker-compose-prod.yml -p myproject up --build

> cat docker-compose-prod.yml
services:
    web:
        build: .
        environment:
            DOMAIN: null
            NEW_RELIC_KEY: null
            PREFIX: null
        image: the-prod-image:latest-release
        ports:
        - 80:80
        - 80:443

@ dermeister0あなたの提案に感謝したす、残念ながらそれはそれからの䞍栌奜な方法です。 extendsするず、それらをデむゞヌチェヌン接続する必芁があるかどうかを実際に知る必芁がなくなりたす。 私は自分でそれを行うこずで生きるこずはできたすが、この゜リュヌションを私の芪愛なる開発者に適甚するこずはできたせんでした。

ただし、 COMPOSE_FILE env倉数に耇数の倀を含めるこずができるこずに気づいおいたせんでした。 ありがずう@gsong  それは玠晎らしく、それを䜿甚するこずができたす私はそれを.envファむルで定矩したす。 ここに1぀の問題がありたす。ベヌス/共通ファむルには、必芁のないサヌビスも含たれおいる可胜性がありたす。

たずえば、デヌタベヌスずWebコンテナを定矩するフラットな共通ファむルを考えおみたしょう。 ステヌゞングでは、それらをすべおたずめおおく必芁がありたすが、prodでは、db甚ずweb甚に別々のホストが必芁になりたす。

たた、docker-compose.override.ymlがデフォルトでロヌドされたす。

https://docs.docker.com/compose/extends/#understanding -multiple-compose-files

私はバヌゞョン3.3でこのアプロヌチを䜿甚したす

  • 䞀般的な構成オプションずサヌビスをdocker-compose.ymlたす;
  • 特定の開発構成ずサヌビスたずえばxdebugなどにはdocker-compose.override.ymlを䜿甚したす。
  • 特定のステヌゞング構成オプションにはdocker-compose.staging.ymlを䜿甚したす。

泚本番環境ではDockerを実行しおいたせん。

このアプロヌチを䜿甚するず、 docker-compose buildを䜿甚しおロヌカルで簡単にビルドでき、ステヌゞングでデプロむする堎合は次を䜿甚したす。

docker-compose -f docker-compose.staging.yml -f docker-compose.yml build

Apacheを䜿甚しおいたすが、開発甚ずステヌゞング甚に別々の仮想ホストファむルがありたせん。 私は別のファむルを持぀こずを避けるためにかなりの時間を費やしたした。 結局、有効なアプロヌチは<IfDefine>ず環境倉数ymlファむルのenvironmentセクションで蚭定したものを䜿甚しお、たずえばssl構成を含めるこずだけです。 たた、TLDずドメむンプレフィックスを䜿甚しおいるので、 www.example.local http//www.example.local/ 8080やwww.staging.example.comhttp  //www.staging.example.comのようなものを䜿甚できたす。 / 。 ロヌカルでは、Webサむトはhttpおよびhttpsでのステヌゞングで実行されたす。 このアプロヌチでは、ファむルの異なるバヌゞョンを維持する必芁はありたせん。 同じこずが本番環境でも可胜だず思いたすが、私が蚀ったように、本番環境ではDockerを避けたいず思いたす。

パスはすべお盞察パスであるため、コンテナはどのような環境でも機胜したす。

私の2セント

-フィリッポ

私の堎合、以前は次のようなものを䜿甚しおいたした。

  • common.yml
  • devel.yml-> common.ymlの拡匵
  • prod.yml-> common.ymlの拡匵
  • docker-compose.yml->ロヌカル、git-ignored、目的の環境develたたはprodぞのシンボリックリンク。

https://github.com/moby/moby/issues/31101#issuecomment -329482917ずhttps://github.com/moby/moby/issues/31101#issuecomment -329512231に感謝したすが、これに぀いおは知りたせんでした。これで、別のスキヌマを䜿甚しおv3に移行できたす。

  • docker-compose.yml->以前はcommon.ymlでした
  • devel.yml-> docker-compose.ymlのオヌバヌラむド
  • prod.yml-> docker-compose.ymlのオヌバヌラむド
  • docker-compose.override.yml->ロヌカル、git-ignored、目的の環境develたたはprodぞのシンボリックリンク。

env倉数を䜿甚しお必芁なハックを行うこずもできるので、私の堎合は問題が修正されおいたす。 ありがずう 🎉申し蚳ありたせんが、文句を蚀う前に新しいドキュメントを正しく読む必芁がありたした。

PSそれでも、 extendsを取り戻すのは良いこずですが、少なくずも十分に公平な代替手段がありたす。 😊

@ shin-最初に、 extends機胜が3.0にないのを芋お非垞に倱望したしたが、YAMLアンカヌ䟋https//github.com/JanNash/docker-noopは十分な亀換以䞊。

唯䞀のこずは、䞊蚘の䟋のように、アンカヌをdocker-compose.ymlファむルの有効なセクションに配眮する必芁があるずいうこずです。

トップレベルの templatesプロパティたたはGitLabのような隠しキヌを取埗しお、アンカヌを定矩する方法をより柔軟にするこずはできたすか

docker-compose.override.ymlに䟝存する堎合の問題は、含める必芁のあるオヌバヌラむドのタむプが1぀だけであり、オヌバヌラむドのレむダヌが1぀しかないこずを前提ずしおいるこずです。

私の堎合、すべおのロヌカル開発に共通の特定の動䜜が必芁ですが、開発者がWindows、OSX、たたはLinuxを実行しおいる堎合は、埮劙に異なる動䜜が必芁になる堎合がありたす。 これをdocker-composev3コンテキストで管理しやすくするために、Linuxナヌザヌはステヌゞング環境ず同じ動䜜で動䜜しおいたす。これは機胜したすが、他の開発者ずは少しずれおいるこずを意味したす。

-fをロヌカル開発に䜿甚するこずは避けおいたす。これは、人為的゚ラヌが非垞に発生しやすく、あたりにも倚くのこずを切り替えるために

参考たでに、䞊蚘のx-たハックず、 .envプロゞェクトファむルのCOMPOSE_FILE倉数を䜿甚しおdocker-composeファむルをデむゞヌチェヌン接続し、docker-を远加するず思いたす。 compose.override.ymlは、これたでに遭遇したすべおのナヌスケヌスを解決するはずです。

ymlアンカヌも、近い将来䜿甚する予定の気の利いたものです。

x-ハックの矎しさにあたり満足しおいたせんが、私はそれで生きるこずができたす。

ご意芋ありがずうございたす

extends削陀するず、胞焌けが倚くなり、v3ぞの移行がブロックされるか、ハッキングに頌るようになりたす。 いく぀かの䞀般的なもの曎新ポリシヌなどを実行できる「テンプレヌト」たたは抜象サヌビスを定矩する機胜が奜きです。

私は、Docker䜜成ファむルをextendsで前凊理し、拡匵機胜が解決されたクリヌンなv3ファむルを吐き出すこずができる単玔なgolangフィルタヌナヌティリティに取り組んでいたす。
解決-䜜成 docker stack deploy -c docker-compose.yaml
たたはdocker-構成する

これは、少なくずもいく぀かのナヌスケヌスで機胜したすか/なぜ萜ずし穎ですか

@pnickolovそれは私にずっおゎヌゞャスだろう。

私はansible-containerを探しおいたした私はansibleを個人的に䜿甚しおいたすが、ただ䜜業しおいたせん。これは必芁なすべおを実行するように芋えたすが、あなたのようなスクリプトの方が望たしいですチャヌンが少ない

extends:キヌを再垰的に凊理できる限り、私は幞せです

わかりたした、 extends代替案を芋぀けたようです...👍

気がかりなのは、Mobyのプロゞェクト管理が互換性を維持するこずを重芁な芁玠ず芋なしおいないように芋えるずいう事実です。 䞊䜍互換性は、特に本番環境に展開される倧芏暡なアプリケヌションの堎合、広く採甚するために䞍可欠です。 extendsようなコア機胜が残る保蚌がない堎合、Docker Swarm / Docker EEをどのようにプッシュできたすか 👎
良い評刀は勝぀こずは難しく、倱うこずは簡単です...

個人的には、カスタムスクリプトやansibleのようなより倧きな゜リュヌションではなく、 v2構文でextendsによっお凊理されるタスクを実行するためにネむティブYAML機胜に䟝存したいず思いたす。 私は以前に同様の問題を抱えおいお、耇数の.ymlファむルなどを䜿甚するなどの解決策が出る前に独自のコンバヌタヌを曞き始めたした。https://github.com/schmunk42/yii2-yaml-converter-command-しかし、そうではありたせんでした実行可胜な゜リュヌション。

私にずっお、これがバヌゞョン管理ポリシヌず䞀緒に行われる堎合、機胜を非掚奚にするこずも問題ありたせん。 たずえこれが私たちの偎で䜕らかの仕事を意味するずしおも、あなたは叀いものを氞遠に運ぶこずはできたせん。

@ schmunk42機胜の

  • 削陀された機胜は、実際には䜿甚されおいないか、進化の本圓のブロッカヌです
  • 事前に発衚されたす
  • 移行パスがすぐに提䟛されたす

残念ながら、私の本のこれらの芁件はいずれもextends非掚奚には適甚されたせん...

@laugimethods v3を䜿甚する必芁がある理由は䜕ですか

@ schmunk42矀れのため

最新の掚奚バヌゞョンであるバヌゞョン3.xは、ComposeずDockerEngineのスりォヌムモヌドの間で盞互互換性があるように蚭蚈されおいたす。 これは、YAMLのルヌトにあるバヌゞョン「3」たたはバヌゞョン「3.1」などの゚ントリで指定されたす。

docker stack deployコマンドは、バヌゞョン「3.0」以降のすべおの䜜成ファむルをサポヌトしたす。

ずころで、私のコメントはextendsでなく、将来発生する可胜性のある痛みを䌎う非掚奚にも関連しおいたす...

ええ、スりォヌムモヌドのために同じ問題に盎面しおいたす。

そもそも、DockerCLIが--composer-file入力を䜿甚できるようになった理由を自問したした。 しかし、 docker/swarmでの孊習から、自己管理スりォヌムでスタックを実行するこずはかなり耇雑なこずのように芋えたす。これが゚ンゞンに移行された理由はいく぀かありたす。

ここで私の発芋のいく぀かに泚意するだけです... v2からv3.4ぞの移行は簡単ではありv2 。

私の問題のいく぀か

  • volumes_fromような他のサポヌトされおいないオプションがありたすが、ずにかくそれを削陀したかったので、回避するのはかなり簡単です
  • .envファむル docker-compose はDockerCLIでは効果がありたせん
  • 耇数の䜜成ファむル docker stack deploy -c docker-compose.yml -c docker-compose.override.yml doro を指定するず、正しく機胜しないようです。゚ラヌはありたせんが、正しくマヌゞされおいないように芋えたすが、 docker-compose configようなコマンドもありたせん。
  • v3.4構文をサポヌトするdocker-compose 「むンストヌルが簡単な」プレリリヌスバむナリはありたせん。 Docker゚ッゞのように
  • 倖郚ネットワヌクは--scope swarmで䜜成する必芁がありたす

CC@handcode

最新のビルドを䜿甚する

  • docker 17.09.0-ce
  • docker-compose 1.17.0dev

珟圚、この構成パむプラむンを䜿甚しお、_extend_ず_noop_の䜿甚を眮き換えおいたす。
物事を少し也燥させたす
これが誰かを助けるこずを願っおいたす

base.yml 共有定矩、これは有効なyamlドキュメントであるため、_docker-compose config_を䜿甚しおマヌゞ可胜

version: '3.4'
networks:
  net_back:
    external: true

base-inject.yml 共有アンカヌ定矩。残念ながら、アンカヌは異なるyamlファむル間で参照できないため、 base.ymlに远加できたせん。代わりに、これらはテキストずしおfoo.ymlに挿入されたす。これを

x-logging: &logging
  driver: json-file
  options:
    max-size: "50m"
    max-file: "2"

foo.yml 汎甚スタック定矩、 base.ymlからのオブゞェクトの参照、 base-inject.ymlからのアンカヌ、およびfoo-dev.ymlでオヌバヌラむドされたオブゞェクト

version: '3.4'
[[base-inject]]
services:
  foo:
    image: ${DOCKER_REGISTRY}/foo:${IMAGE_VERSION}
    volumes:
      - type: volume
        source: "volfoo"
        target: "/foo"
    networks:
     - net_back
    logging:
      <<: *logging

foo-dev.yml 環境スタック定矩ごず

version: '3.4'
services:
  foo:
    ports:
      - "8080:80"
volumes:
  volfoo:
    name: '{{index .Service.Labels "com.docker.stack.namespace"}}_volfoo_{{.Task.Slot}}'
    driver: local

次に、展開コマンド

docker stack rm stack_foo && echo "waiting..." && sleep 3 &&
  cat foo.yml | sed -e '/base-inject/ {' -e 'r base-inject.yml' -e 'd' -e '}' > ./foo-temp1.yml &&
  export $(sed '/^#/d' ./dev.env | xargs) &&
  docker-compose -f base.yml -f ./foo-temp1.yml -f foo-dev.yml config > ./foo-temp2.yml
  docker stack deploy --with-registry-auth --prune --compose-file ./foo-temp2.yml stack_foo
  1. 叀いスタックを削陀したす
  2. スタックリムヌバブルが䌝播するのを埅぀
  3. アンカヌを䞀般的な定矩に挿入し、tmpファむルに保存したす
  4. ファむルからenvファむル倉数を読み取り+蚭定したす
  5. docker-composeを䜿甚しお、3぀のファむルをマヌゞしたす
  6. マヌゞされたファむルをデプロむする

3぀以䞊のファむルの䜜成でextendsを欲しがっおいる人のために、 baclinずいうツヌルを手に入れたした。 baclinそのようなディレクティブを線圢化し、すべおのextendsディレクティブをそれらのコンテンツで再垰的に眮き換えたす。 これはアルファ版゜フトりェアです。珟圚、Swarmモヌドずスタック展開をサポヌトするコヌドを蚘述しおいるため、コヌドは私の機械の䞀郚です。 baclin初期バヌゞョンのプラットフォヌムバむナリは、こちらから入手できここに報告しおください。

これは本圓に玛らわしいです
最新のDockerリリヌス v17.09 のドキュメントずv17.06リリヌスドキュメントを読むず、この機胜が利甚できるはずです。

$ head -n1 docker-compose.yml
version: '3'

しかし、 compose upは

ERROR: The Compose file './docker-compose.yml' is invalid because:
Unsupported config option for services.admin_application: 'extends'

extendsキヌワヌドを䜿甚する堎合。
たた、 composeログでextendsの削陀に぀いお䜕も芋぀かりたせん。

さお、どっち
このような重芁な情報を芋぀けたり、githubのあいたいな問題の䞭に隠したりするのは難しいこずではありたせん。


$ docker --version
Docker version 17.09.0-ce, build afdb6d4

$ docker-compose --version
docker-compose version 1.16.1, build 6d1ac21

@jottr 、ドキュメントを参照しおください

extendsキヌワヌドは、Composeファむルバヌゞョン2.1たでの以前のComposeファむル圢匏でサポヌトされおいたすv1のextendsおよびv2のextendsを参照が、Composeバヌゞョン3.xではサポヌトされおいたせん。

したがっお、 extendsを䜿甚する堎合は、 version: '2.1'に固執する必芁がありたす。

私の悪い。 それはただドキュメントの䞊郚にあり、赀い非掚奚の譊告サむンが付いおいるはずです。

私の悪い。 それはただドキュメントの䞊郚にあり、赀い非掚奚の譊告サむンが付いおいるはずです。

@jottr Githubを䜿甚しお、そのための別の問題を䜜成したり、そのためのPRを䜜成したりするだけです。 問題階局を䜜成したした https 

私の堎合、次のようにdocker-compose-override.ymlがありたす。
yaml version: "3.4" services: common: extra_hosts: - "host1:172.28.5.1" - "host2172.28.5.2" - "host3:172.28.5.3" networks: default: external: name: "common-network"
そしお、ネットワヌクずextra_hostsを共有する必芁がある他のいく぀かのdocker-compose.ymlファむルがありたす。 拡匵機胜なしでこれを行う方法は

yaml version: "3.4" services: mongo: image: "mongo" container_name: "mongo" hostname: "mongo" volumes: - "/opt/docker/mongo/default.conf:/usr/local/etc/mongo/mongod.conf" - /opt/data/mongo:/data/db" ports: - "27017:27017" command: "mongod --config /usr/local/etc/mongo/mongod.conf" networks: default: ipv4_address: "172.28.5.4"
docker-composeでサポヌトされおいるyamlアンカヌず異なるファむル間の参照があれば玠晎らしいず思いたす。 たぶん、ファむルをマヌゞした埌にアンカヌず参照を適甚したす。
䟋えば
yaml version: "3.4" services: common: &common extra_hosts: ... networks: ...
yaml version: "3.4" services: mongo: <<: *common image: "mongo" container_name: "mongo" ...
結果は次のようになりたす。
yaml version: "3.4" services: mongo: image: "mongo" container_name: "mongo" extra_hosts: // EXTRA HOSTS HERE networks: ...

@ sandro-csimasこれは次の方法で可胜です https //docs.docker.com/compose/compose-file/#extension -fields
@ shin-このチケットを閉じるこずはできたすか

@rdxmbそうは思いたせん。 私が芋るこずができるこずから、あなたは別のdocker-composeファむルから拡匵するこずはできたせん

これはhttps://github.com/docker/compose/issuesの問題だず思い

いく぀かのデバッグ

# cat docker-compose.yml 
version: "3.4"
services:
  foo-not-bar:
    << : *common
  foo-bar:
    << : *common
    environment:
      - FOO=BAR 

x-common-definitions-for-all-our-services:
  &common
    image: phusion/baseimage
    environment:
      - FOO=NOTBARBYDEFAULT

これは
docker stack deploy -c docker-compose.yml test

docker-composeを䜿甚する堎合

# docker-compose up 
ERROR: yaml.composer.ComposerError: found undefined alias 'common'
  in "./docker-compose.yml", line 4, column 10

ymlファむルを次のように倉曎したす。

version: "3.4"

x-common-definitions-for-all-our-services:
  &common
    image: phusion/baseimage
    environment:
      - FOO=NOTBARBYDEFAULT

services:
  foo-not-bar:
    << : *common
  foo-bar:
    << : *common
    environment:
      - FOO=BAR

docker-composeでも動䜜したす。

したがっお、これは耇数のファむルでも機胜するはずだず考えたしたが、そうではありたせん。

# docker-compose -f compose-services.yml -f compose-default.yml config > docker-compose.yml
ERROR: yaml.composer.ComposerError: found undefined alias 'common'
  in "./compose-services.yml", line 5, column 10
t# docker-compose -f compose-default.yml -f compose-services.yml config > docker-compose.yml
ERROR: yaml.composer.ComposerError: found undefined alias 'common'
  in "./compose-services.yml", line 5, column 10
# cat compose-services.yml 
version: "3.4"

services:
  foo-not-bar:
    << : *common
  foo-bar:
    << : *common
    environment:
      - FOO=BAR 

# cat compose-default.yml 
x-common-definitions-for-all-our-services:
  &common
    image: phusion/baseimage
    environment:
      - FOO=NOTBARBYDEFAULT

ただし、もちろん、これをマヌゞするには、 cat䜿甚するだけです。

# cat compose-default.yml compose-services.yml > docker-compose.yml && docker-compose up -d
WARNING: The Docker Engine you're using is running in swarm mode.

Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node.

To deploy your application across the swarm, use `docker stack deploy`.

Creating network "test_default" with the default driver
Creating test_foo-bar_1 ... 
Creating test_foo-not-bar_1 ... 
Creating test_foo-bar_1
Creating test_foo-bar_1 ... done

バヌゞョンでxenialで実行

# docker --version
Docker version 17.11.0-ce, build 1caf76c
# docker-compose --version
docker-compose version 1.17.0, build ac53b73

@rdxmb 、ありがずう
したがっお、「cat」コマンドを䜿甚しお䜜成ファむルをマヌゞし、最終ファむルを実行する必芁がありたす。

たた、これを行うためにdocker-compose configを䜿甚したす。 環境固有の蚭定の䟋

これはCIパむプラむンによっお実行されたす docker-compose -f docker-compose.yml -f docker-compose.override.prod.yml config > docker-compose.prod.ymlそしおdocker stack deploy -c .\docker-compose.prod.yml my-stackを䜿甚したす

これに投祚しおください。extendsはv3で非垞に圹立ちたす。

v2でよく䜿甚したしたが、非垞に䟿利です。
+1

v3でextendsサポヌトが芋たいです。 それは私のdocker-compose.ymlファむルを倧いに也かすのに圹立ちたす。

この問題が提起されおからほが1幎が経ち、倚くの人々がこの機胜を必芁ずしおいるこずは明らかです。 それでも、Docker開発者がこのリク゚ストに応答するのをたったく読んでおらず、リリヌス前にdocker-composev3に含たれおいなかった理由の説明もありたせん。

新しいテクノロゞヌを信頌するお客様のために機胜を䌝達たたは維持するこずさえできない堎合の゜フトりェアの悲しい状態。

状況の考えられる解釈の1぀および珟圚のスレッドの芁玄もは次のようになりたす。

  • YAMLアンカヌ/参照ず3.4の拡匵フィヌルドは、ほが同じこずを実珟したす。
  • マルチファむルを機胜させるこずができたす。 このスレッドの単玔なcatず高床なアプロヌチを参照しおください。 単玔なアプロヌチのコメントは、docker-composeが最埌に向かっお耇数のファむルをロヌドする問題を瀺しおいたす誰かがその問題を䜜成したしたか。 それがdocker-composeで修正された堎合、ファむルをマヌゞする必芁すらありたせん。 したがっお、私にずっお、マルチファむルのサポヌトを垌望する人は、 @ rdxmbが提案したように、 / compose / issuesで続行する必芁がありたす。
  • extends取り戻すこずが怜蚎され GitHubプロゞェクトむベントを参照、Dockerチヌムからの透明性が高い、ありがずう、結果を「戊略的に重芁な他のものがたくさんある」ず解釈するかもしれたせんが、可胜です。ただextendsプルリク゚ストを曞いおください。

私にずっお、それは完党に理解できる芖点です。

@aCandidMind同意したした。

IMHOは、 extendsによっお提䟛されるよりシンプルでクリヌンなメカニズムに耇雑さを远加したす。
私かもしれたせんが、適床に耇雑な拡匵構成を拡匵フィヌルドに移動するず、読み取りず保守がはるかに困難になりたす。
倚くのコメントや投皿を読んだ埌でも、extendsが削陀された理由ず、この機胜の䜎䞋の利点は䜕であるかはただわかりたせん。

少しのbashマゞックで、自分で詊すこずができるようにテストリポゞトリを䜜成するこずができたす。

stack deployコマンドを次のように構成するだけです。

docker stack deploy --compose-file=<(docker-compose -f docker/prod.yml -f docker/dev.yml config) <stackname>

@ tylerbuchea-そのbash魔法の唯䞀の欠点は、 WARNING: Some services (<service-name(s)>) use the '<key>' key, which will be ignored. Compose does not support '<key>' configuration取埗する可胜性があるこずです。 これにより、混乱が生じる可胜性がありたす。 しかしねえ、それは動䜜したす👍

@dnmgnsあなたは正しいです それを指摘しおくれおありがずう。 @joaoccが蚀ったように、ネむティブサポヌトに勝るものはありたせんが、bash以倖の䟝存関係がないこずを考えるず、䞊蚘の゜リュヌションが私が芋぀けた最良の゜リュヌションです。

@tylerbuchea 1぀の汚い方法は、stderrを/ dev / nullにリダむレクトするこずです:)
docker stack deploy --compose-file=<(docker-compose -f docker/prod.yml -f docker/dev.yml config 2> /dev/null) <stackname>

恥ずかしくないです😄

extendに関するこの混乱に぀いお、ドキュメントはより明確にすべきだず思いたす。
extendの説明は、ナヌザヌをアップグレヌド方法のドキュメントにリダむレクトしたす。アップグレヌド方法のドキュメントは、詳现に぀いおextendの説明に戻りたす。 これは十分に圹に立ちたせん。ナヌザヌずしお、この問題党䜓に察凊する方法、私が持っおいるオプション、および考慮すべきこずに぀いおの助けを期埅したす。 v3からextendを削陀するずいう決定の背埌には、明確なアむデアがあったず確信しおいたす。

芋る
https://docs.docker.com/compose/extends/#extending -services
https://docs.docker.com/compose/compose-file/compose-versioning/#upgrading

@tylerbucheaの優れたワンラむナヌbashベヌスの゜リュヌションに関しおは、
残念ながら、いく぀かの高床なDockerスタック機胜をサポヌトしおいたせん。

WARNING: Some services (web) use the 'deploy' key, which will be ignored. Compose does not support 'deploy' configuration - use `docker stack deploy` to deploy to a swarm.
WARNING: Some services (web) use the 'configs' key, which will be ignored. Compose does not support 'configs' configuration - use `docker stack deploy` to deploy to a swarm.

https://github.com/docker/cli/pull/569が18.03からマヌゞされるため、 docker stack deployは耇数の䜜成ファむルを1぀にマヌゞするこずをサポヌトしたす。 これは、composefile圢匏v2のextendsキヌを完党に眮き換えるものではありたせんが、より倚くのナヌスケヌスをカバヌしおいるこずを願っおいたす👌

私自身の回避策は、 yqを䜿甚するこず

yq merge --overwrite docker-stack.yml docker-stack.preprod.yml > merged-docker-stack.yml
docker stack deploy -c merged-docker-stack.yml preprod

@ Lucas-Cは、出力にdeploy configキヌずdocker-compose -f docker/prod.yml -f docker/dev.yml configを実行するず、これを確認できたす

これは、䜜成ファむルv3.4以降甚です。 クロスyaml参照郚分的をサポヌトしたす。 私はこのzsh゚むリアス/ perlスクリプトで終了したした

alias regen=$'perl -MFile::Slurp=read_file -MYAML=Load,Dump -MHash::Merge::Simple=merge -E \'
  local $YAML::QuoteNumericStrings = 1;
  $n=read_file("/data/docker-compose.yml");
  $s=Dump(merge(map{Load($n.read_file($_))}@ARGV));
  local $/ = undef;
  $s =~ s/\\bno\\b/"no"/g;
  say $s;
  \' $(find /data -mindepth 2 -maxdepth 4 -name docker-compose.yml) >! /data/x-docker-compose.yml'
regen
export COMPOSE_FILE=/data/x-docker-compose.yml
  1. 共通郚分を䜿甚しお/data/docker-compose.ymlを読み取りたす。
  2. すべおのdockercomposeを再垰的に怜玢したすたずえば、このプロゞェクトには玄40の異なるcontainers / docker-compose.ymlファむルがありたす
  3. 各docker-compose.ymlの前に/data/docker-compose.ymlコンテンツを远加したす
  4. マヌゞ
  5. 結果を/data/x-docker-compose.ymlに保存したす

長所perlは䞀般的なツヌルであり、すべおのperlモゞュヌルも、生成が高速です。
短所私はハックが嫌いですが、DRYの他の方法はありたせん。 最終的なdocker-composeは玄900行です。 最初から1぀のファむルずしおサポヌトしおほしいですか バむナリdockerをpythondocker-composeでperlhackでラップするのは残念です。

どうすればextendsのような機胜を取り出すこずができたすか それはコア機胜のようです。

䜿甚しおdocker-compose configの暙準入力オプションにパむプdocker stack deploy -c -私のために問題を解決したした。

docker-compose -f docker-compose.yml \
               -f docker-compose.extended.yml \
               config \
| docker stack deploy -c - my-stack

私はこれを詊しおいたせんが、 docker stack deployドキュメントでもこれに気づきたした。

基本構成や環境固有のオヌバヌラむドなど、構成が耇数の䜜成ファむルに分割されおいる堎合は、耇数の--compose-fileフラグを指定できたす。

これを䟋ずしお

docker stack deploy --compose-file docker-compose.yml -f docker-compose.prod.yml vossibility

https://docs.docker.com/engine/reference/commandline/stack_deploy/#compose -file

extendsを削陀する理由はどこかに文曞化されおいたすか 公匏ドキュメントでは説明されおいないようです。䟋 https //docs.docker.com/compose/extends/#extending -services
ナヌザヌが論理的根拠を理解できれば、ナヌザヌは削陀にどのように察応するかに぀いおより良いアむデアを開発するこずができたす。 ありがずう。

@ shaun-blake私は耇数の䜜成ファむルを䜿甚するこずになりたした。 それが人々が䜿うアプロヌチのようです。 継承ずいうよりは、ミックスむンのようなものです。 ビルドたたは実行するずきに、正しい環境yamlテンプレヌトをdocker-compose.override.ymlにコピヌしたす。

耇数のドッキングりィンドりには、ファむルを構成する䟋 base.yml 、 local.yml 、 prod.yml 他のファむルからのサヌビス利甚YAMLアンカヌを聞かせおいないファクタリングサヌビス定矩が耇数のYMLファむルの䞭で定矩するこずができたせんでしたので、 。
泚、この問題は、ほずんどのコメント13日である https://github.com/moby/moby/issues?q=is%3Aissue+is%3Aopen+sort%3Acomments-descず第䞉最も奜きでした。

ナヌザヌが論理的根拠を理解できれば、ナヌザヌは削陀にどのように察応するかに぀いおより良いアむデアを開発するこずができたす。 ありがずう。

そもそもextendsを削陀する理由に関するドキュメントの+1 ...

ほが1幎半埌もただ_extends_はありたせん。 Cmon、devs、uは代替手段を䞎えずにsthを削陀したせん。

圌らはそうしたした、圌らは䜜曲ず呌ばれる代替案を提䟛したす。 スレッドで私の答えを読んでください。

-フィリッポ

2018幎7月30日には、941に、Xiaohui劉[email protected]は曞きたした

ほが1幎半埌もただ延長はありたせん。 Cmon、devs、uは代替手段を䞎えずにsthを削陀したせん。

—
あなたがコメントしたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信するか、GitHub https://github.com/moby/moby/issues/31101#issuecomment-408790200で衚瀺するか、スレッドをミュヌトしたすhttps://github.com/notifications/unsubscribe-auth/AAS_0AOynjpfVnVo4ZqciMbmjBmkcTQ3ks5uLsbN

@dedalozzo 、 "スレッド内" ==

ここで私のコメントを芋おください

https://github.com/moby/moby/issues/31101#issuecomment -329527600 https://github.com/moby/moby/issues/31101#issuecomment-329527600

基本的に、.ymlファむルのチェヌンを䜿甚しお、コンテナヌの構成をオヌバヌラむドたたは倉曎する必芁がありたす。

「耇数の䜜成ファむルの指定」をお読みください

耇数の-f構成ファむルを指定できたす。 耇数のファむルを提䟛する堎合、Composeはそれらを1぀の構成に結合したす。 Composeは、ファむルを指定した順序で構成をビルドしたす。 埌続のファむルは、前のファむルをオヌバヌラむドしお远加したす。

https://docs.docker.com/compose/reference/overview/ https://docs.docker.com/compose/reference/overview/

このアプロヌチでは、継承よりも合成を䜿甚しお、倚かれ少なかれ同じ結果を取埗したす。

2018幎7月30日には、午埌3時23分で、セルバンTeodorescuの[email protected]は曞きたした

@dedalozzo https://github.com/dedalozzo 、 "in the thread" ==

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信するか、GitHub https://github.com/moby/moby/issues/31101#issuecomment-408880809で衚瀺するか、スレッドをミュヌトしたすhttps://github.com/notifications/unsubscribe-auth/AAS_0FZO30NplqHRid_Id8VBOJW7nk5Iks5uLxbigaJpZM4

組み合わせるず同じ拡匵性を取り戻すこずができないでしょうか
yaml拡匵フィヌルド2.1 + / 3.4 +を構成
それらのx-フィヌルドが他のファむルを

したがっお、ルヌトincludeリストで、ロヌドするファむルを指定できるようにするこずができたす。
それらはx-includeに入れられ、暙準のYAMLアンカヌずマヌゞを介しお即座に䜿甚できたす。



珟圚のcomposev2.1 +
# /docker-compose.yml
version: '2.1'

volumes:
  nginx_file_sockets:
    external: false
    driver: local

services:
  reverse_proxy:
    extends:
      file: reverse_proxy/docker-compose.yml
      service: proxy
    restart: 'always'
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - nginx_file_sockets:/sockets/nginx

  reverse_proxy_test:
    extends:
      file: reverse_proxy/docker-compose.yml
      service: proxy
    restart: 'always'
    ports:
      - "8080:80"
      - "8443:443"
    volumes:
      - nginx_file_sockets:/sockets/nginx

  web:
    extends:
      file: webservice/docker-compose.yml
      service: app
    restart: 'always'
    environment:
      ENVIRONMENT: 'production'
      DB_USER: ${WEB1_DB_USER}
      DB_PASSWORD: ${WEB1_DB_PASS}
    volumes:
      - nginx_file_sockets:/sockets/nginx

  web_staging:
    extends:
      file: webservice/docker-compose.yml
      service: app
    restart: 'no'
    environment:
      ENVIRONMENT: 'staging'
      DB_USER: ${WEB1_DB_USER}
      DB_PASSWORD: ${WEB1_DB_PASS}
    volumes:
      - nginx_file_sockets:/sockets/nginx

# /proxy/docker-compose.yml
version: '2.1'
services:
  proxy:
    build: ./
    volumes:
      - /certs:/certs:ro
# /webservice/docker-compose.yml
version: '2.1'
services:
  app:
    build:
      context: ./folder
      args:
        LINUX_VERSION: 20.s
        LINUX_FLAVOR: dash
    environment:
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - bootstrap.memory_lock=true
    ulimits:
      memlock:
        soft: -1
        hard: -1




䜜曲v3.Xのアむデア
# /proxy/docker-compose.yml
version: '3.9'
services:
  proxy:
    &proxy
    build: ./
    volumes:
      - /certs:/certs:ro
# /webservice/docker-compose.yml
version: '3.9'
services:
  app:
    &app
    build:
      context: ./folder
      args:
        LINUX_VERSION: 20.s
        LINUX_FLAVOR: dash
    environment:
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - bootstrap.memory_lock=true
    ulimits:
      memlock:
        soft: -1
        hard: -1
# /docker-compose.yml
version: '3.9'
include:
  - /proxy/docker-compose.yml
  - /webservice/docker-compose.yml

volumes:
  nginx_file_sockets:
    external: false
    driver: local

services:
  reverse_proxy:
    << : *proxy
    restart: 'always'
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - nginx_file_sockets:/sockets/nginx

  reverse_proxy_test:
    restart: 'always'
    << : *proxy
    ports:
      - "8080:80"
      - "8443:443"
    volumes:
      - nginx_file_sockets:/sockets/nginx

  web:
    << : *app
    restart: 'always'
    environment:
      ENVIRONMENT: 'production'
      DB_USER: ${WEB1_DB_USER}
      DB_PASSWORD: ${WEB1_DB_PASS}
    volumes:
      - nginx_file_sockets:/sockets/nginx

  web_staging:
    restart: 'no'
    extends:
      file: web1/docker-compose.yml
      service: app
    environment:
      ENVIRONMENT: 'staging'
      DB_USER: ${WEB1_DB_USER}
      DB_PASSWORD: ${WEB1_DB_PASS}
    volumes:
      - nginx_file_sockets:/sockets/nginx




差分
@@ /proxy/docker-compose.yml @@
-version: '2.1'
+version: '3.9'
 services:
   proxy:
+    &proxy
     build: ./
     volumes:
       - /certs:/certs:ro
 ```

 ```diff
 @@ /webservice/docker-compose.yml @@
-version: '2.1'
+version: '3.9'
 services:
   app:
+    &app
     build:
       context: ./folder
       args:
         LINUX_VERSION: 20.s
         LINUX_FLAVOR: dash
     environment:
       - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
       - bootstrap.memory_lock=true
     ulimits:
       memlock:
         soft: -1
         hard: -1
 ```

 ```diff
 @@ /docker-compose.yml @@
-version: '2.1'
+version: '3.9'
+include:
+  - /proxy/docker-compose.yml
+  - /webservice/docker-compose.yml

 volumes:
   nginx_file_sockets:
     external: false
     driver: local

 services:
   reverse_proxy:
-    extends:
-      file: reverse_proxy/docker-compose.yml
-      service: proxy
+    << : *proxy
     restart: 'always'
     ports:
       - "80:80"
       - "443:443"
     volumes:
       - nginx_file_sockets:/sockets/nginx

   reverse_proxy_test:
-    extends:
-      file: reverse_proxy/docker-compose.yml
-      service: proxy
+    << : *proxy
     restart: 'no'
     ports:
       - "8080:80"
       - "8443:443"
     volumes:
       - nginx_file_sockets:/sockets/nginx

   web:
-    extends:
-      file: webservice/docker-compose.yml
-      service: app
+    << : *app
     restart: 'always'
     environment:
       ENVIRONMENT: 'production'
       DB_USER: ${WEB1_DB_USER}
       DB_PASSWORD: ${WEB1_DB_PASS}
     volumes:
       - nginx_file_sockets:/sockets/nginx

   web_staging:
-    extends:
-      file: webservice/docker-compose.yml
-      service: app
+    << : *app
     restart: 'no'
     environment:
       ENVIRONMENT: 'staging'
       DB_USER: ${WEB1_DB_USER}
       DB_PASSWORD: ${WEB1_DB_PASS}
     volumes:
       - nginx_file_sockets:/sockets/nginx
 ```
<hr>
Resulting in the final version, which should be already yaml parsable:

```yml
# /docker-compose.yml
version: '3.9'
#include:
#  - /proxy/docker-compose.yml
#  - /webservice/docker-compose.yml
x-include:
  /proxy/docker-compose.yml:
    version: '3.9'
    services:
      proxy:
        &proxy
        build: ./
        volumes:
          - /certs:/certs:ro
  /webservice/docker-compose.yml:
    version: '3.9'
    services:
      app:
        &app
        build:
          context: ./folder
          args:
            LINUX_VERSION: 20.s
            LINUX_FLAVOR: dash
        environment:
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
          - bootstrap.memory_lock=true
        ulimits:
          memlock:
            soft: -1
            hard: -1

volumes:
  nginx_file_sockets:
    external: false
    driver: local

services:
  reverse_proxy:
    << : *proxy
    restart: 'always'
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - nginx_file_sockets:/sockets/nginx

  reverse_proxy_test:
    << : *proxy
    restart: 'no'
    ports:
      - "8080:80"
      - "8443:443"
    volumes:
      - nginx_file_sockets:/sockets/nginx

  web:
    << : *app
    restart: 'always'
    environment:
      ENVIRONMENT: 'production'
      DB_USER: ${WEB1_DB_USER}
      DB_PASSWORD: ${WEB1_DB_PASS}
    volumes:
      - nginx_file_sockets:/sockets/nginx

  web_staging:
    << : *app
    restart: 'no'
    environment:
      ENVIRONMENT: 'staging'
      DB_USER: ${WEB1_DB_USER}
      DB_PASSWORD: ${WEB1_DB_PASS}
    volumes:
      - nginx_file_sockets:/sockets/nginx

同じファむル内でパヌツが繰り返されないようにするために、蚀語仕様自䜓に組み蟌たれおいるYAML機胜であるAFAIK。 別のファむルを䜿甚する堎合、それは基本的に䞍可胜です。

その機胜をYAML仕様自䜓に提案する必芁がありたす。

この議論は次のようになりたす。

  • docker-compose -f file.ymlがdocker-compose -f file.yml -f file_extension.ymlよりもはるかに優れおいるのはなぜですか
  • たたはコマンドレベルでの配線_vs_ファむルレベルでの配線。

コマンドラむンで䜜業する堎合にのみ、䞍䟿が顕著になりたす。 私たちはそれを少しの間認めなければなりたせん。 ずにかく、他のすべおはスクリプト可胜です。

それが本圓の議論である堎合、 docker-compose up serviceはdocker-compose -f service.yml upよりも優れたセマンティクスを持っおいたすロヌカル開発別名コマンドラむンに必芁なすべおをdocker-compose.override.yml定矩したす。

䞎えられたセマンティクスは非垞にクリヌンでよく考え抜かれおいたす。 コマンドラむンでの䜿甚にservice.ymlを採甚するこずは、おそらくUXを䞋げるこずを意味したす。 それには別の議論がありたす。䞀芋するず明らかですが、 docker-compose.ymlずは䜕か、 service.ymlは䜕でも、実際には䜕でもかたいたせん。

免責事項挑発的な意芋。 wink考えられるすべおのナヌスケヌスを考慮しおいたせんでした...

この長期にわたる議論の埌、それが成功するかどうかはわかりたせん。 IMHO、extendsはクヌルで、単に削陀するのではなく、少なくずも慎重に非掚奚にしおから議論したに違いありたせん。

私たちにできるこずの1぀は、v2ずv3のドキュメントストヌリヌを改善するこずだず思いたす。 倚くの人がv3がv2に

v2 docker-composecliのみ。 単䞀のマシンず゚ンゞンに焊点を圓おた開発ワヌクフロヌ。 CIビルド/テストワヌクフロヌにも適しおいたす。 このバヌゞョンのブランチは、2017幎12月にv17.12で新機胜を受け取りたした。

v3マルチノヌドの抂念を備えたSwarm / Kubeスタックに最適で、ほずんどのdocker-composecli機胜のサポヌトを維持したす。

SwarmたたはDockerEnterprise Kubernetesスタックを䜿甚しおいない堎合、 v3を䜿甚する理由はありはヘルスチェック付きのdepends_onを含むすべおのdocker-compose cli機胜を利甚できたす埅機スクリプトを回避するため。

v3は、単䞀゚ンゞンのdocker-composecliワヌルドずマルチノヌドクラスタヌワヌルドの機胜をマヌゞするために䜜成されたした。 すべおのv2機胜depends_onなどがクラスタヌで意味をなすわけではありたせん。 他の機胜extendなどはv3に組み蟌たれおいたせん。おそらく、v3が存圚する前は、すべおのコヌドがdocker-compose Pythonであり、v3.0がSwarmをサポヌトするには、docker cliGoでそれを曞き盎す必芁がありたした。そしお今、圌らはそれを゚ンゞンデヌモンに再び曞き蟌んで、最終的にはただ存圚しないSwarmスタックAPIを䜜成しおいたす。

この問題に䞍慣れな人のために、3.0リリヌス以降、さたざたな構成、テンプレヌト、およびチヌムワヌクフロヌの懞念を解決するために行われおいる䜜業の倚くにも泚意しおください。

https://docs.docker.com/compose/extends/#extending -servicesのドキュメントでは、extendsキヌワヌドがv3で削陀されおいるこずを赀で匷調する必芁がありたす。これは、単なる_note_よりも重芁だからです。
ドキュメントを移行しおスキミングし、機胜しなくなった理由を確認しおから、いく぀かのクロヌズされた問題を远跡しおからここに到達し、元のドキュメントに戻っお文蚀に気づきたした。

extendsキヌワヌドは、Composeファむルバヌゞョン2.1たでの以前のComposeファむル圢匏でサポヌトされおいたすv1のextendsおよびv2のextendsを参照が、Composeバヌゞョン3.xではサポヌトされおいたせん。

次のように蚀い換えるこずができたす

extendsキヌワヌドは、Composeバヌゞョン3.xで削陀されたしたが、Composeファむルバヌゞョン2.1たでの以前のComposeファむル圢匏で匕き続きサポヌトされおいたすv1のextendsおよびv2のextendsを参照。

これは小さな違いですが、ドキュメントをスキミングするずきに芋萜ずしがちな違いです。

@krisrpPRが始たりたした^^^

ありがずう@BretFisher

v2の名前を「versiondocker-cli」に、v3の名前を「versionswarm / kube」に倉曎する予定はありたすか
他のほずんどのバヌゞョン管理スキヌムでv3がv2に取っお代わる方法を考えるず、このように区別する方が理にかなっおいたす。 珟圚、䞡方ずも維持され、分岐しおいるので、私が間違えない限り、䞡方ずもしばらくの間存圚するようです。

@krisrp逆に、メゞャヌバヌゞョン番号をむンクリメントする理由は、互換性の盞違を瀺すためです。

@ cpuguy83私は他のこずを暗瀺しおいたせんでした。 より明確たたは明確になっおいないこずをお詫びしたす。
IIRC Gnome 23も、それぞれの独立したフォヌクが維持されおいた数幎前にこの混乱を経隓したした。

バヌゞョニング駄排萜のセマンティクスに぀いお議論するためにこのスレッドを脱線させたくないので、そのたたにしおおきたす。 先週のv2ずv3のドキュメントの改善に関する

@ shin- @ cpuguy83 1幎以䞊埌にこの問題を芋お、バヌゞョン3に戻さない理由は䜕ですか

「私たちはそれを別の方法で行うこずができた」以倖はそれに぀いお倚くを芋぀けるこずができたせんでしたしかし実際のより良い解決策は提䟛されたせんでした
技術的限界はありたすか それずも単にプルリク゚ストがないのですか

結局のずころ、私のcompose2.1ファむルはただ正垞に実行されおいたす。

これだけでなく、倉曎ログには「これは削陀されたした。詳现に぀いおは、「アップグレヌド方法」を参照しおください」ず蚘茉されおいたす。 アップグレヌド方法の詳现に぀いおは「アップグレヌド方法」を芋おおり、「詳现に぀いおは「サヌビスの拡匵」を参照しおください」ず曞かれおいたす。 「拡匵サヌビス」に移動するず、ファむルを拡匵する方法がようやくわかりたすが、「これは削陀されたした。詳现に぀いおは、倉曎ログを参照しおください」ず衚瀺されたす。

この時点で、これはドキュメント䜜成者が挔じおいる残酷な冗談のよ​​うです。

最終的に、「スタック」圢匏はここでは制埡されず、DockerCLIの䞀郚です。

個人的にはv3から陀倖された理由はわかりたせん...実際に誰かが远加しようずしおいるのを芋たこずがないず思いたす。
これをdocker / cliで衚瀺するのが最善かもしれたせん...おそらく、機胜がそこにあるかのように機胜する高レベルのドキュメント倉曎を䌎うPRでさえ、それに぀いお話し合い、蚭蚈が承認されたら実装を远加できたす。 。

基本的に、誰かがそれを望むなら、PRをしなさい。 拒吊された堎合に倚くの時間を無駄にしないようにするために、ドキュメントを倉曎するこずをお勧めしたす...繰り返したすが、v3から省略された理由がわかりたせん。

同䞊。 docker-composeを再床䜿甚する前に、これが解決されるのを埅っおいたす。

+1これを修正しおください。拡匵ベヌスのcomposeファむルがあり、composeをswarmに䜿甚できないためです。

拡匵機胜の+1

これに関するニュヌスはありたすか

ただ埅っおいたす

こっちも䞀緒。 ただ埅っおいる。

すべおのアップデヌト

なぜ取り出されたのか、理由はありたしたか

2019幎8月5日月曜日、1110 Jaykishan、 notifications @ github.comは次のように曞いおいたす。

すべおのアップデヌト

—
あなたがコメントしたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/31101?email_source=notifications&email_token=ABOE6GA4CXY6ESMZMTDSFGDQC74CZA5CNFSM4DANZGS2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2Z
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/ABOE6GCEFFJ3SOLDWRWX2IDQC74CZANCNFSM4DANZGSQ
。

すべおのアップデヌト

だから..それはほが3幎です...
しかし、私はただそれが着陞するこずを望んでいたすD

それが戻っおこない堎合は、拡匵するための䜕らかの代替手段が必芁です。 抜象サヌビスを蚱可しないのはなぜですか ファむル圢匏はフラットで、すべおのサヌビス宣蚀が1぀のファむルに含たれたす。  &を介しおノヌドの゚むリアスを远加するyamlの機胜ず組み合わせお抜象サヌビスを䜿甚するず、 <<:挔算子を介しおそれらの゚むリアスを再利甚できたす。

なんで3幎!! あなたは誰も気にしないこずに集䞭しお働いおいるようです

これに関する曎新はありたすか

これは哀れです。 Terraformはコンポゞションを䜿甚したす-それは実行可胜です、なぜコンポゞションはこの良いデザむンプラクティスに埓うこずができないのですか
Terraformモゞュヌルの構成
Terraformのベストプラクティス

「哀れな」、いいね。

@ Cristian-Malinescuどうぞ、実装しおください。
これは無料のオヌプン゜ヌス゜フトりェアです。

このチャットで他の人ず同じように文句を蚀う代わりに。
それは、実際には、ここでは䜕の䟡倀も远加したせん。
䜕床か蚀ったように、これたで誰もこれを実装したくありたせんでした、
だから、他の誰かがkを修正する必芁があるのは問題です、ありがずう。

@luckydonald @ Cristian-Malinescuを簡単/受動的攻撃的な答えで

スレッドをスキミングし、サポヌトされおいるYAML機胜を掻甚するこずが蚀及されおいたす。

この䟋が圹立぀かもしれないず思った。

@nomasprimeその発芋に感謝したす 私は自分のプロゞェクトでv2ずv3のどちらかを決定しおいたしたが、これによりこのスレッドの倧きなゞレンマが解決されたした。 これらの代替゜リュヌションが拡匵サヌビス機胜の公匏ドキュメントに蚘茉されおいないこずに驚いた。

ドキュメントペヌゞの右偎のナビゲヌションバヌにあるRequest docs changesリンクを䜿甚する良い機䌚のようですね。

@nomasprimeうん、そのアむデアは以前このスレッドにあった。

それを他のymlファむルのファむル読み蟌みメカニズムず組み合わせるこずができれば、叀いdepends機胜をすべお持぀ために本圓に必芁なのはそれだけです。

䞊蚘を参照しおください。䟋 https 

あたり_読みやすい_ではありたせんが、少なくずも_可胜_です。

@nomasprimeその発芋に感謝したす 私は自分のプロゞェクトでv2ずv3のどちらかを決定しおいたしたが、これによりこのスレッドの倧きなゞレンマが解決されたした。

@arseniybanayev Mediumの蚘事には、v3に぀いおのみ蚘茉されおいたすが、 v2の新しいバヌゞョンでは、swarmではなくdocker-composeを䜿甚するため、v2より具䜓的には2.4を遞択したすv3はコンテナメモリの制限などのv2の䞀郚の機胜をサポヌトしおいたせん

たた、v3は、コンテナメモリの制限などのv2の䞀郚の機胜をサポヌトしおいたせん。

v3はメモリの制限をサポヌトしおいたすが、フィヌルドはdeploy -> resources -> limitsたすhttps://docs.docker.com/compose/compose-file/#resources

@thaJeztah぀たり、 docker-compose 以前のコメントで参照しおいたプロゞェクトで矀れを䜿甚しおいないため。 IIRCの展開は矀れのためだけですよね

swarmずlocalに別々の蚭定をするのは理にかなっおいたすか これら2぀は互いに競合しおいるようです。 圓然のこずながら、Dockerは矀れの䜿甚量を増やしたいず考えおいたすが、倚くの人はロヌカル開発のためにcomposeのみを䜿甚しおいたす。

私は、ECS、k8s、たたはGAEのいずれかを䜿甚しお、本番環境でスりォヌムおよび実行コンテナヌを䜿甚したこずがありたせん。

ほずんどのオプションは、swarm / kubernetesサヌビスず、composeを介しおデプロむされたコンテナヌの䞡方で翻蚳可胜/䜿甚可胜である必芁がありたす。 memory制限がdocker-compose適甚されない理由を確認する必芁がありたす

ただ拡匵機胜がありたせんが、私の䞻なナヌスケヌスでは、 COMPOSE_FILE環境を介しお耇数のDocker䜜成ファむルに切り替えたした。 私は䞻に、異なるパスワヌドたたは構成でdevずprodに同じベヌスdocker-compose.ymlを䜿甚するために䜿甚したす。

䟋

  • 開発時 export COMPOSE_FILE= docker-compose.yml`デフォルト
  • 補品䞊 export COMPOSE_FILE= docker-compose。 yml docker

docker-compose.prod.ymlでは、env倉数をprodパスワヌドで䞊曞きするだけです。

この蚭定は簡単で、 docker-composeコマンドに垞に耇数の「-f」を远加する必芁はありたせん。 devコンピュヌタヌずサヌバヌでCOMPOSE_FILE env varを蚭定する必芁があり、gitはdocker-compose.prod.ymlファむルを無芖したす。

ただ埅っおいる 

私はこれを拡匵する方法ずしお䜿甚しおきたした

docker-compose \
  -f ./docker/base.yml \
  -f ./docker/extended.yml \
  up

ただし、ファむル内で拡匵する方が適切であり、远加のbashスクリプトは必芁ありたせん。

たた、これを䜿甚しお、bashスクリプトから動的に拡匵しおいたす。

extended_docker_compose="
  version: '3.5'
  services:
    my-service:
      restart: always
"

echo "$extended_docker_compose" | docker-compose \
  -f ./docker/base.yml \
  -f /dev/stdin \
  up

@ dave-dmこれらは単玔な叀いオヌバヌラむドです

これはextendsの朜圚的な有効なナヌスケヌスだず思いたす

https://github.com/NerdsvilleCEO/devtools/blob/master/doctl/docker-compose.yml#L10

サヌビスの環境に䜿甚するdocker-composeラッパヌがありたすhttps://github.com/nowakowskir/docker-compose-wrapper

線集別の可胜なナヌスケヌスは、誰かがLAMP / LEMPスタックを持っおいお、ワヌドプレスなどの特定のサヌビスで䜿甚するためにそれらのサヌビスを拡匵したい堎合です。

Dockerは代替案を䜜成しおいる間、2017幎からただ埅っおいたす。

@nomasprimeうん、そのアむデアは以前このスレッドにあった。

それを他のymlファむルのファむル読み蟌みメカニズムず組み合わせるこずができれば、叀いdepends機胜をすべお持぀ために本圓に必芁なのはそれだけです。

䞊蚘を参照しおください。䟋 31101コメント

あたり_読みやすい_ではありたせんが、少なくずも_可胜_です。

@luckydonald指摘しおくれおありがずう。 奇劙なこずに、組み蟌みのYAMLむンクルヌド機胜はなく、確かに倚くの問題を解決したす。

サヌドパヌティの゜リュヌションを実装するのはかなり簡単なようですが、なぜこれがv3に導入されおいないのかわかりたせん🀷‍♂

倚くの人がこの機胜を望んでいるこずを少し思い出させおください:)

それをv3btwに移怍しない理由は䜕ですか

忘れおしたいたしたが、実際に持ち去られた理由はありたすか

2020幎5月6日氎曜日、2314 Julien Marechal、 notifications @ github.comは次のように曞いおいたす。

倚くの人がこの機胜を望んでいるこずを少し思い出させおください:)

—
あなたがコメントしたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/31101#issuecomment-624919070 、たたは
退䌚
https://github.com/notifications/unsubscribe-auth/ABOE6GGDIVGATP734YJA4UTRQHOLJANCNFSM4DANZGSQ
。

yamlアンカヌがこのナヌスケヌスを凊理する方法は、 extendず比范しお少し䞍䟿です。 私の意芋では、その力は䞻に芁玠の再垰的なマヌゞから来たした。 アンカヌは、おそらく75の道のりをたどりたす。぀たり、yamlを再垰的にマヌゞするこずはありたせん。 すべおのマヌゞはトップレベルで行われたす。 アンカヌされたサヌビステンプレヌトを参照しおからenvironmentブロックを再定矩するず、マヌゞされるのではなく、アンカヌされたサヌビスの環境ブロックが䞊曞きされたす。 extendキヌワヌドの動䜜に䞀臎させるには、蟞曞の再垰ツリヌの䞋にあるすべおの蟞曞をアンカヌしお参照する必芁がありたす。

䟋

# anchors for the service, environment, deploy, and deploy.placement blocks
# you'll need an anchor for every dict that you want to merge into
x-common-app: &common-app
  image: app:1.0
  environment: &common-app-environment
    common_option: a
    overwrite_option: b
  deploy: &common-app-deploy
    max-replicas-per-host: 3
    placement: &common-app-deploy-placement
      constraints:
        - 'node.labels.app_host==true'

services:
  myapp: << *common-app
    environment: << *common-app-environment
      foo: bar
      baz: xyzzy
      overwrite_option: quz
    deploy: << *common-app-deploy
      replicas: 15
      placement: << *common-app-deploy-placement
        preferences:
          - spread: node.labels.region

# The above yields the following:
services:
  myapp:
    image: app:1.0
    environment:
      common_option: a
      overwrite_option: quz
      foo: bar
      baz: xyzzy
    deploy:
      replicas: 15
      max-replicas-per-host: 3
      placement:
        constraints:
          - 'node.labels.app_host==true'
        preferences:
          - spread: node.labels.region

この䟋ではそれほど煩わしく芋えないかもしれたせんが、1぀の拡匵ブロックから耇数10以䞊のサヌビスをテンプレヌト化するず、煩わしく読みにくくなりたす。

私の考えでは、理想的なシナリオは、yamlアンカヌアプロヌチずextendアプロヌチの組み合わせです。 extendは、最䞊䜍のx-プレフィックス付き拡匵フィヌルドブロックからのみ蚱可されたす。よりスマヌトなマヌゞ特性。

私の組織では、yamlアンカヌが構文的に少しずさんなこずがわかったので、基本的に倖郚のpythonスクリプトでextend機胜を再実装したした。 それは私たちにずっおはうたくいきたすが、䜕かに察凊しなければならないのは䞍完党な方法です。 同様に、v3 / Swarmスタックのdepends_onの削陀に察凊するために、独自の倖郚ツヌルを䜜成する必芁がありたした。

最近、倚くのgitlab CIYAMLを実行したした。 たさにこれらの機胜を備えおおり、読みやすく管理しやすいテンプレヌトず最終構成を実珟するのに非垞に䟿利です。

  • 他のYAMLファむルを含めるこずができたすテンプレヌトに適しおいたす
  • 拡匵でき
  • たた、本物ず芋なされないように「隠す」こずもできたす。 䜜成圢匏ではx-が、gitlab CIでは最初の.です。

これは、これらのファむルを耐えられるものにする機胜の正確なセットです。

私はdockerdocsからこの問題に到達したした。私の堎合、 docker-composeセットアップをテンプレヌト化したいず思い、「回避策」ずしお䞊蚘のアドバむスに埓い、既存のテンプレヌトプログラムを探すこずにしたした。 私はそれらの時間を取り戻すこずができないので、この実際の機胜芁求に関する議論に関係なく、ここで芋぀けたものの少しを詳しく説明したすが、関係者はYAMLベヌスのテンプレヌトシステムの䜿甚を感じるかもしれたせんこの機胜をdocker-compose自䜓に統合するのではなく、䜜成ファむルを生成する方が、カプセル化ずゞョブに適したツヌルの遞択の芳点から適切な堎合がありたす。

いく぀かのコンテキストでは、Let's Encryptずいく぀かのアプリケヌションコンテナ今のずころNextcloud、1぀は私甚、いく぀かは友人甚で基本的なリバヌスプロキシを䜿甚しおいたす-この堎合、Nextcloudコンテナのテンプレヌトを䜜成したかったので非垞によく䌌た蚭定のキヌストロヌクでの間違いや重耇を避けるこずができたす。 次のパッケヌゞは私が詊したものでした

yttは非垞に包括的であり、YAMLをネむティブに䜿甚する唯䞀のオプションです。 これは匷力で仕事に適したツヌルのようで、PythonのスヌパヌセットであるStarlarkをYAMLファむル内で盎接䜿甚しお凊理を実行したす。 しかし、間もなく、テンプレヌトは非垞に乱雑になり、コヌドのフラグメントずYAMLのフラグメントが散らばり、蟞曞や配列などのPythonデヌタ型ずYAMLフラグメントテキストのように凊理されるように芋えたすが混圚しおいたす。文字列などのタグを出力するHTMLテンプレヌト゚ンゞンは、最終的に゚ラヌが倚すぎおファむルが乱雑になりすぎたした。 Dhallも非垞に包括的で、さたざたな圢匏に出力できる独自の母囜語を䜿甚しおいたす。 テンプレヌトシステムずいうよりはメタプログラミング蚀語のように芋えたすが、構文が機胜し、かなり厳密に型指定されおいるため、非構造化YAMLの単玔なテンプレヌトよりもすぐに耇雑になりたした。 JSONずHaskellのブレンドのように芋えるので、私が必芁なこずを蚀語に組み蟌むには、あたりにも倚くの考えが必芁でした。

興味深いこずに、Dhallずyttの䞡方で困難だったのは、パラメヌタヌ化されたフィヌルド名を䜿甚するこずでした。どちらもそうでなければ十分に機胜したしたが、むンスタンスの名前をサヌビス名ずボリュヌム名に衚瀺する必芁がありたす。これはやや醜いものでした。 ハッシュ内の倀に匕数を䜿甚するのは簡単ですが、キヌの名前にこれらの匕数を䜿甚するのは面倒であるか、それを適切に行う方法が芋぀かりたせんでした。さらに、Dhallは型の安党性を匷制し、これは単にその抂念に反したす。 Jsonnetでは、匏を角かっこで囲むだけで簡単にできたした。

CUEずJsonnetはどちらもJSON指向ですが、コンバヌタヌを介しおこれらを実行するこずはたったく難しくありたせん。たた、Dhallのように、CUEには倚くの匷力な機胜があり、Jsonnetの欠点から生たれたようですが、ドキュメントの䞀郚に含たれおいたす。 、それはすでにやり過ぎであるこずが明らかになりたした。 おそらくそれを適切に孊ぶためにもっず倚くの時間があれば、それは優れたオプションでしょうが、CUEは単玔なテンプレヌトゞョブよりも怜蚌ずスキヌマに重点を眮いおいるようです。

最埌に、これらすべおを完了しお初めお、これらのツヌルをLiquidタグたたは同様のHTMLテンプレヌトの単玔さず比范しおいる間ずっず、Liquidを最初に䜿甚できたのではないかず気づきたした。 私はJekyllサむトのコンテキストでのみ䜿甚したので、スタンドアロンパッケヌゞを入手するこずは決しおありたせんでしたが、基本的なルヌプずリスト、および匏をむンプレヌステキストに盎接評䟡する機胜を備えおいるため、おそらく仕事にずっおもはるかに良かった。 JsonifyはおそらくJSONに優れおいたすが、Liquidは玔粋なYAMLで動䜜する可胜性があるため、ファむルは再び読みやすくなりたす。

+1 docker-composeは、このチケットが倚数のテスト環境のk8ぞの移行をサポヌトするために䜜成されお以来、私が職堎で実装したオヌダヌメむドの゜リュヌションの背埌にある1぀のむンスピレヌションでした。 私はベルやホむッスルを避けるように非垞に泚意したしたが、類䌌の機胜をすぐに正圓化したした。 哲孊的な議論構成ず継承などは、私には垞識からの気晎らしのように芋えたす利益の埌知恵がありたす-ほが3幎埌もただ解決されおいたせん。 明らかに、docker-composeを䜿い続ける可胜性のある人々が必芁ずしおいたす。

+1+1

以前、 dev / test / ci環境でこの機胜を頻繁に䜿甚したした。この環境では、 ./config/{dev,test,ci}/compose.yamlサブディレクトリパスにある䜜成ファむルから拡匵できたした。 COMPOSE_ENV=devを持぀.envがありたすが、開発者はオヌバヌラむドでき、明らかにciオヌバヌラむドしたす。

この機胜を廃止し、同様のこずを実行できるものに眮き換えないこずにショックを受けたした。 たぶん、jinja2を䜿甚しお、やりたいこずを実行できるようにするだけです。 Docker-Composeのアンチドラむが少なくなるこずを願っおいたす。  '

extendsはv1.27https://github.com/docker/compose/pull/7588以降docker-composeサポヌトされおいるようです。

この機胜を倚甚するナヌスケヌスの1぀は、Dockerむメヌゞをバヌゞョン管理しおコヌド化するこずです。 私のdockerdevファむルずprod䜜成ファむルはどちらもdocker-images.ymlから拡匵されおおり、基本的なサヌビスずサヌビスのむメヌゞのタグ付きバヌゞョンのみがリストされおいたす。

v3ではこれに察する簡単な回避策は芋぀かりたせんでした。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡