私は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:
- 2番目の
docker-compose.yml
ファイルを作成します(おそらく:docker-compose.workspace.yml
) - そのファイルに1つのサービスを追加し、それを「ワークスペース」と呼ぶといいでしょう。vscodeリモート部分はそこで実行されます。どのようなイメージですか? 1つ使用できますvscodeのあらかじめ用意されたもの。
- 両方のファイルをポイントし
.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 であるため、実行内容によってはパスなどで問題が発生する可能性があることに注意してください。