2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSL+Docker+VSCode+DockerComposeで複数コンテナ接続

Posted at

はじめに

結論、公式サイトを見たらわかりやすかったのだけれども
いくつかハマったポイントがあるので記憶に残す

手順

大まかな手順はこちら
参考にしたサイトだけ残しておきます

  1. WSLインストール
      参考:https://qiita.com/matarillo/items/61a9ead4bfe2868a0b86
  2. VSCodeインストール
    参考:https://www602.math.ryukoku.ac.jp/Prog1/vscode-win.html
  3. WSLへDockerインストール
    WSLを起動して以下のサイトを参考にインストール
    参考:https://zenn.dev/thyt_lab/articles/fee07c278fcaa8
  4. DevContainerの設定
    ここから詳細な話題に入ります

DevContainerの設定

Dev Containerのインストールと初期設定

VSCodeを起動して「Dev Container」をインストール
image.png

※ポイント※WSLからの接続を有効化する

Dev Containersがインストールできたら、歯車 クリック
image.png

Extension Settings クリック
image.png

Dev Containers Execute in WSL にチェックを入れる ←これにチェックを入れるとVSCodeからWSLのDockerへ接続できるようになる
image.png

devcontainer+Docker-Composeを使って複数コンテナを作成する

参考:https://code.visualstudio.com/remote/advancedcontainers/connect-multiple-containers

公式を参考に、python用コンテナとnode用コンテナを1つずつ作ります。
※特にサービスが動いているわけでもなく、単に2つのコンテナがあるだけのシンプルなやつ

VSCodeを起動して、フォルダを用意して、以下の構成でファイルを作ります。
image.png

docker-compose.yml
version: '3'
services:
  python-api:
    image: mcr.microsoft.com/devcontainers/python:1-3.12-bookworm
    volumes:
      # Mount the root folder that contains .git
      - .:/workspace:cached
    command: sleep infinity
    links:
      - node-app
    # ...

  node-app:
    image: mcr.microsoft.com/devcontainers/typescript-node:1-20-bookworm
    volumes:
      # Mount the root folder that contains .git
      - .:/workspace:cached
    command: sleep infinity
    # ...
.devcontainer/python-container/devcontainer.json
{
  "name": "Python Container",
  "dockerComposeFile": ["../../docker-compose.yml"],
  "service": "python-api",
  "shutdownAction": "none",
  "workspaceFolder": "/workspace/python-src"
}
.devcontainer/node-container/devcontainer.json
{
  "name": "Node Container",
  "dockerComposeFile": ["../../docker-compose.yml"],
  "service": "node-app",
  "shutdownAction": "none",
  "workspaceFolder": "/workspace/node-src"
}

※hello.pyとhello.jsは割愛

コンテナへの接続方法

Ctrl+Pでパレット起動して、"Dev Containers: Reopen in Container" 入力
image.png

接続するコンテナを尋ねられるのでPython Container 選択 ※実際はどちらでもいい
image.png

しばし待つとウィンドウが開きなおされ、コンテナへ接続できる
※コンテナが動いてなかったら、コンテナを立ち上げてから接続するようになる
image.png

ポイントは、左下に「Dev Containers: Python Container」と表示してること
左上はPYTHON SRC[DEV CONTAINER PYTHON CONTAINER]を表示して、
ソースコードはpyrhon-srcの中身しか表示されていないこと
右下のターミナルは、コンテナの中のディレクトになってます。

別のコンテナに移動する

python用コンテナに入れたので次はnode用コンテナへの接続に切り替える

python用コンテナに入っている状態でCtrl+Pでパレット開いて
「Dev Containers: Switch Container」入力

image.png

ここでもどっちのコンテナへ移動したいか選択できる
Node Container 選択
image.png

成功したら、ウィンドウが開きなおされて、node用コンテナの画面に切り替わる
image.png

コンテナから抜けて、前のフォルダに戻りたいとき

左下の「Dev Container: Node Container」をクリック
image.png

パレットが開くので、一番下までスクロールして。。。「Close Remote Connection」クリック

image.png

戻ってきました。でも、、フォルダがどこにも選択されてないので
Open Folderで前のフォルダを開きなおしました
でも、これで無事に帰ってこれたので成功でしょう…!
image.png

番外編:コンテナ接続してるときのコンテナの様子

コンテナの様子がみたいだけなら、WSLから見れる。

WSLを起動して以下実行

docker ps

image.png

Dev Containerはコンテナ接続をVSCodeからお手軽に操作するための仕組みなので
単純にコンテナ立ち上げて~とかだけであれば別にWSLから操作してもOK

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?