Giter VIP home page Giter VIP logo

devcontainer_trial's Introduction

devcontainer trial

コンテナとIDEを統合する機能.

事前に必要なこと

  • Dockerのインストール
  • Dev Containers拡張機能のインストール

devcontainerを使ったプロジェクトの作成

.devcontainer/devcontainer.jsonを作成する. マニュアル

このファイルを作成することで自動的にコンテナを利用するプロジェクトとして検出される.

すでに開いているプロジェクトをコンテナで開きなおす場合, Ctrl+P -> Reopen in Containerで開ける.

devcontainer.jsonの書き方

devcontainer.jsonのみの場合,Dockerfileを使う場合,Docker Composeを使う場合で書き方が少し変わる.

共通したdevcontainer.jsonのプロパティ

{
    // コンテナの名前.なんでもよいが他と競合はダメ.
    // ここでは定義済みの変数を利用して,プロジェクトのルートフォルダと同じ名前としている.
    "name": "${localWorkspaceFolderBasename}", 
    //マウントするボリュームのリスト.Docker CLIの--mountフラグと同じ内容.
    "mounts": [
        // node_modulesなどのアクセスが多いフォルダはvolume mountにすると高速になる.
        {
            "type": "volume",
            "source": "${localWorkspaceFolderBasename}_tmp",
            "target": "/${localWorkspaceFolderBasename}/workspace/node_modules"
        }
    ],
    // コンテナに外部から接続するためのポート
    // これを設定することでコンテナ内でサーバを立ち上げて外から触ったりできる.
    // この場合,localhost:8080にアクセスすればコンテナ内のサーバに触れる.
    // コンテナ内のポートは特に指定しなくても,VS Code側でうまく合わせてくれる.
    "forwardPorts": [
        8080
    ],
    // コンテナ起動後に実行されるコマンド
    "postStartCommand": "npm install -g npm",
    // コンテナ作成後に一度実行されるコマンド.
    // ここに初期化とかは余り書かずに,Dockerfileを利用したり,
    // 事前にimageを作成したほうがよさそう.
    "postCreateCommand": "apt update -y && apt upgrade -y && apt install git -y"
}

このほかにも設定項目はあるけど使ったことはない.

devcontainer.jsonのみの場合

{

    "name": "${localWorkspaceFolderBasename}", 
    "image": "node:slim", //利用するイメージの名前
    // Docker CLIに渡す引数のリスト
    "runArgs": [
        "--tty",
        "--name",
        "${localWorkspaceFolderBasename}"
    ],
    "mounts": [
        {
            "type": "volume",
            "source": "${localWorkspaceFolderBasename}_tmp",
            "target": "/${localWorkspaceFolderBasename}/workspace/node_modules"
        }
    ],
    // コンテナを開いたときにマウントされるボリュームを指定する. 
    // このオプションをセットする場合workspaceFolderもセットされている必要がある.
    "workspaceMount": "source=${localWorkspaceFolder},target=/${localWorkspaceFolderBasename},type=bind,consistency=cached",
    // このプロジェクトをコンテナで開いたときに,エディターなどが開くフォルダーのパスを指定する.
    "workspaceFolder": "/${localWorkspaceFolderBasename}/workspace",
    "forwardPorts": [
        8080
    ],
    "postStartCommand": "npm install -g npm",
    "postCreateCommand": "apt update -y && apt upgrade -y && apt install git -y"
}

devcontainer.jsonをgitの管理に含みたい場合,.gitフォルダが含まれるフォルダもマウントするとよい.

project/
    ├─ .git/
    ├─ .devcontainer/
    │   └─ devcontainer.json
    └─ workspace/
        └─ プロジェクトの中身

workspaceMountproject/を指定してマウントし, workspaceFolderworkspace/フォルダを指定することで,.gitを含みつつ,workspace/をコンテナで開いたように扱える.

この場合のdevcontainer.json

{
    "workspaceMount": "source=absolute/path/to/project,target=/project,type=bind,consistency=cached",
    "workspaceFolder": "/project/workspace",
}

とすればよい.この際,定義済みの変数${localWorkspaceFolderBasename}projectになるため,先に提示したdevcontainer.jsonではこの変数を利用することで汎用的にできる.

Dockerfileを使う場合

TODO

Docker Composeを使う場合

TODO

devcontainer_trial's People

Contributors

maemon4095 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.