web-dev-qa-db-ja.com

Dockerは、1つのコンテナから別のコンテナへのパスをマウントする方法を構成しますか?

私はnignx containerと1つのasset container私のすべてのアセットを、うなり声または他のツールから構築します。

Dockerの作成ファイルで、asset container'sのフォルダーパスnginx containerしたがって、nginxはそのファイルを提供できます。

  • どうすればそれができますか?覚えていませんが、あるコンテナのパスを別のコンテナと共有できるオプションがあると思います。

  • Nginxを2コンテナにスケールアップすると、そのマウントはnginxのすべてのインスタンスで機能すると仮定しますか?

  • 私がスケールアップした場合asset containerそれから何が起こるのでしょうか?

  • また、それをホストにマウントして、開発を簡単に行えるようにします。

28
dev.meghraj

やりたいことは、ボリュームを使用し、そのボリュームを表示したいコンテナにマウントすることです。

完全にDocker内

これは、Docker内で完全に実行できます。

以下に例を示します(削除-実際のファイルにはもちろんこれ以上のものが含まれています)。

version: '3'
services:
  nginx:
    volumes:
      - asset-volume:/var/lib/assets
  asset:
    volumes:
      - asset-volume:/var/lib/assets

volumes:
  asset-volume:

下部には、「asset-volume」という名前の単一のボリュームが定義されています。

次に、各サービスで、Dockerに特定のパスでそのボリュームをマウントするように指示します。コンテナー内のパスの例を示します。コンテナー内に配置したいパスに調整してください。

ボリュームは、特定のコンテナが所有していない独立したエンティティです。それらのそれぞれにマウントされ、共有されます。 1つのコンテナがコンテンツを変更すると、すべてのコンテナに変更が表示されます。

1つだけが変更できるようにする場合は、ボリューム文字列の末尾に:roを追加することで、一部のサービスで常にボリュームを読み取り専用としてマウントできることに注意してください。

services:
  servicename:
    volumes:
      - asset-volume:/var/lib/assets:ro

ホストディレクトリを使用する

または、ホスト上のディレクトリを使用して、コンテナにマウントすることもできます。これには、Docker以外のツール(GUIテキストエディターやその他のツールなど)を使用してファイルを直接操作できるという利点があります。

Dockerでボリュームを定義せず、代わりに外部ディレクトリをマウントする以外は同じです。

version: '3'
services:
  nginx:
    volumes:
      - ./assets:/var/lib/assets
  asset:
    volumes:
      - ./assets:/var/lib/assets

この例では、ローカルディレクトリ「assets」が相対パス./assetsを使用して両方のコンテナにマウントされます。

環境に応じて両方を使用する

また、異なる開発環境および実稼働環境用にセットアップすることもできます。 docker-compose.ymlにすべてを入れますexceptボリュームマウント。次に、さらに2つのファイルを作成します。

  • docker-compose.dev.yml
  • docker-compose.prod.yml

これらのファイルには、ボリュームマウントを定義するための最小限の設定のみを入れます。これをdocker-compose.ymlと組み合わせて、最終的な設定を取得します。

次にこれを使用します。 docker-compose.ymlの設定を使用し、2番目のファイルのすべてをオーバーライド設定または補足設定として使用します。

docker-compose -f docker-compose.yml \
    -f docker-compose.dev.yml \
    up -d

また、実稼働環境では、devファイルの代わりにprodファイルを使用します。

ここでの考え方は、docker-compose.ymlの設定の大部分を保持し、代替ファイルの違いの最小セットのみを保持することです。

例:

docker-compose.prod.yml

version: '3'
services:
  nginx:
    volumes:
      - asset-volume:/var/lib/assets

docker-compose.dev.yml

version: '3'
services:
  nginx:
    volumes:
      - ./assets:/var/lib/assets
43
Dan Lowe