VS Code devcontainer内でdocker-composeを実行する方法 質問する

VS Code devcontainer内でdocker-composeを実行する方法 質問する

私は3つのNestJSと1つのdotnet5.0アプリケーションで構成されたマルチコンテナプロジェクトを持っています。アプリケーション以外に、プロジェクトはRabbitMQとInfluxDBサービスに依存しています(純粋なdockerイメージとして実行)。

ファイルはdocker-compose次のようになります:

version: '3.8'

services:
  influxdb:
    image: influxdb:2.0
    container_name: influxdb
    ports:
      - '8086:8086'
    expose:
      - '8086'
    volumes:
      - ./data/influxdb2/data:/var/lib/influxdb2
      - ./data/influxdb2/config:/etc/influxdb2

  rabbitmq:
    hostname: 'rabbitmq'
    image: rabbitmq:3-management
    container_name: rabbitmq
    ports:
      - '15672:15672'
      - '5672:5672'

  microservice1:
    image: microservice1
    container_name: microservice1
    depends_on: [rabbitmq, influxdb]
    build:
      context: .
      dockerfile: ./apps/microservice1/Dockerfile

  microservice2:
    image: microservice2
    container_name: microservice2
    depends_on: [rabbitmq, influxdb]
    build:
      context: .
      dockerfile: ./apps/microservice2/Dockerfile

  microservice3:
    image: microservice3
    container_name: microservice3
    depends_on: [rabbitmq, influxdb]
    build:
      context: .
      dockerfile: ./apps/microservice3/Dockerfile

  microservice4:
    image: microservice4
    container_name: microservice4
    depends_on: [rabbitmq, influxdb]
    build:
      context: .
      dockerfile: ./apps/microservice4/Dockerfile

開発環境全体を新しい VS Code 開発コンテナに移行したいのですが、依存関係 (ここでは rabbitmq や influxdb など) の操作方法がよくわかりません。

理想的には、開発中にマイクロサービスを実行できるように、nodejs と dotnet SDK の両方を含む devcontainer でリポジトリを開きます。ただし、既存の (便利な) docker イメージを活用したいので、influxdb と rabbitmq も devcontainer にインストールしたくありません。

問題は、devcontainer 内でリポジトリを開くと、内部から docker-compose を操作する方法がないことです (docker/docker-compose は devcontainer 内では使用できないため)。

コンテナ内からホスト上の Docker エンジンと対話することは可能ですか? つまり、 rabbitmq と influxdb の依存関係dev.shを単純に処理して、実行したいマイクロサービスを起動できるスクリプトを用意するupだけでよいということですか?

おそらく私はすべて間違っているのですが、VS Code devcontainers と docker-compose ファイル (イメージベースの依存関係を含む) を混在させる方法について明確な説明を見つけることができませんでした。

ベストアンサー1

vscode は、IDE が実行される「ワークスペース」として 1 つのサービスのみを使用できます。ローカルで作業する場合と同様に、IDE 上で作業し、他のサービスは他のコンテナーで実行されます。

現在のサービスはどれも IDE ワークスペースとして「適している」とは思えないので、そのサービスを追加する必要があります。これは、ホスト マシンと「まったく同じ」ですが、コンテナー内にあります。

使用できます複数の作成ファイルそのため、現在のサービスを変更せdocker-compose.ymlずに、新しいサービスを追加することができます。

それで、パート I:

  1. 2番目のdocker-compose.ymlファイルを作成します(おそらく: docker-compose.workspace.yml
  2. そのファイルに1つのサービスを追加し、それを「ワークスペース」と呼ぶといいでしょう。vscodeリモート部分はそこで実行されます。どのようなイメージですか? 1つ使用できますvscodeのあらかじめ用意されたもの
  3. 両方のファイルをポイントし.devcontainer.json、ワークスペース サービスを定義します。
...
  "dockerComposeFile": [
    "docker-compose.yaml",
    "docker-compose.workspace.yaml"
  ],
  "service": "workspace",
...

わかりました。これで、ワークスペース コンテナーと、その横にあるその他のすべてのものが表示されます。これで、質問のもう 1 つの部分に進みます。

コンテナ内からホスト上の Docker エンジンと対話することは可能ですか? つまり、rabbitmq と influxdb の依存関係を簡単に設定し、実行したいマイクロサービスを起動できる dev.sh スクリプトを用意するだけでよいということですか?

まず、docker および docker-compose コマンドが必要な場合は、パッケージをインストールする必要があります。イメージによっては、これらのコマンドが組み込まれているものもあれば、組み込まれていないものもあります。独自のイメージなどを使用することもできます。

しかし、それだけでは十分ではありません。ワークスペース コンテナーはホストの Docker を認識しません。ただし、修正は簡単です。ボリューム マウントを追加するだけです。

/var/run/docker.sock:/var/run/docker.sock

ワークスペース サービスで。こうすることで、vscode はホストの Docker を「認識」し、それを使用して操作できるようになります。

ただし、これはまだホストの Docker であるため、実行内容によってはパスなどで問題が発生する可能性があることに注意してください。

おすすめ記事