VisualStudioCode用のDockerプラグインの使用方法

提供:Dev Guides
移動先:案内検索

序章

この記事では、VisualStudioCode用のDockerプラグインを使用します。 Dockerを使用すると、アプリケーションをイメージにパッケージ化し、Dockerがインストールされている任意のプラットフォームでコンテナーとして実行できます。 このプラグインは、Node.jsとGoの2つの開発者スタックで使用します。

インストール

ワークステーションにDockerをインストールする必要があります。 Dockerのインストールと実行方法の説明は、ここで入手でき、実行している特定のオペレーティングシステムに固有である必要があります。

また、 Visual StudioCodeがインストールされている必要があります。

Visual Studio Codeをインストールしたら、それを開いて、左端のペインの拡張機能セクションをクリックし、Dockerを検索します。

インストールすると、VisualStudioCodeインスタンスにいくつかの新しいことがわかります。 左端のペインには、Dockerロゴが付いた新しいDockerセクションがあり、クリックすると3つのセクションがあるDockerExplorerが開きます。 画像コンテナレジストリ

コマンドパレットに追加されたコマンドもいくつかあります。コマンドパレットを開いてdockerと入力すると表示できます。

Node.js

Node.jsアプリケーションを使用して、DockerプラグインがVSCodeに追加する機能を示します。

Expressサーバーを作成しましょう。

mkdir docker-node
cd docker-node
npm init -y
npm install --save express
touch index.js

次のようなディレクトリツリーが必要です。

.
├── index.js
├── node_modules
├── package-lock.json
└── package.json

1 directory, 3 files

index.jsの内容です

index.js

const express = require('express')
const app = express()

app.listen(3000)

app.get('/', (req, res) => {
  res.send('hello world')
})

package.jsonを更新して、開始スクリプトを作成します。

package.json

"scripts": {
    "start": "node index.js"
  },

これで、このアプリをnpm startで実行し、ポート3000に移動して、アプリが動作することを確認できます。

従来、Dockerを追加するには、次の手順に従います。

  1. Dockerfile(またはdocker-compose.yaml)を作成します
  2. Docker命令をファイルに追加します(FROM、WORKDIR、ADD、EXPOSE、CMD)
  3. ターミナルでdocker build...を実行して、イメージをビルドします
  4. ターミナルでdocker run...を実行して、コンテナを実行します

ただし、プラグインを使用する場合は、次のことを行う必要があります。 コマンドパレットを開き、dockerと入力して、Docker: Add Docker files to Workspaceを選択します。 それは最初のオプションでなければなりません。 Enterを押します。プラットフォーム/スタックを選択し、Node.jsを選択して、Enterを押すように求められます。 次に、ポートを選択するように求められます。 3000と書くと、アプリがリッスンするポートになります。 次のファイルがワークスペースに追加されます:.dockerignoredocker-compose.debug.ymldocker-compose.yml、およびDockerfile

.dockerignoreは、ビルドイメージにファイルを追加するときに、リストされているファイルを無視するようにDockerに指示します。

docker-compose.debug.ymlを使用すると、docker-composeを検査して実行し、デバッガーを接続できます。

version: '2.1'

services:
  docker-node:
    image: docker-node
    build: .
    environment:
      NODE_ENV: development
    ports:
      - 3000:3000
      - 9229:9229
    command: node --inspect=0.0.0.0:9229 index.js

ただし、開発中にデバッグしている場合は、ローカルマシンで行った変更がコンテナに保持されるように、ボリュームをアタッチする必要がある場合があります。

docker-compose.ymlファイルは、docker-servicesの実行に使用される標準のdocker-composeファイルです。 データベース接続やロードバランサーなどの他のリソース/サービスを追加するときは、このファイルを編集します。

version: '2.1'

services:
  docker-node:
    image: docker-node
    build: .
    environment:
      NODE_ENV: production
    ports:
      - 3000:3000

ここで最も重要なDockerfileは、ビルドする必要があるため、プラグインがインストールされていない場合に手動で作成する必要がある命令が含まれています。

FROM node:8.9-alpine
ENV NODE_ENV production
WORKDIR /usr/src/app
COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
RUN npm install --production --silent && mv node_modules ../
COPY . .
EXPOSE 3000
CMD npm start

次に、イメージをビルドするには、VS Codeコマンドパレットを開き、dockerと入力し、Docker: Build Imageを選択して、Enterを押します。 Dockerfileを選択して選択し、Enterを押すように求められます。 次に、タグを選択するように求められます。 デフォルトのdocker-nodeを選択したままにして、Enterを押します。 統合ターミナルが開き、ビルドログが表示されます。

最後に、コンテナを実行する必要があります。 もう一度、コマンドパレットを開き、docker runと入力し、Docker: Runを選択します。システム内のすべてのコンテナのリストが表示されます。タグを付けたもの、docker-node:latestを選択します。 Enterを押します。 ターミナルには、実行コマンドのログが表示されます。 localhost:3000にアクセスしてアプリケーションを実行できるように、ポートをホストマシンに公開する-p 3000:3000が追加されていることに注意してください。

左側のペインに移動してDockerセクションを選択し、 Imagesの下でdocker-node画像を選択し、右クリックして実行をクリックすることで、コンテナーを実行することもできます。 。 同じログがターミナルで実行されます。

上記の画像セクションには、システム内の画像のリストがあることにも気付くでしょう。 docker-nodeコンテナーが実行されると、同じセクションで実行中のコンテナーを確認し、停止することもできます。 上記では、Attach Shellが選択されています。これは、以下のdockerコマンドに相当します。

docker exec -it <container> sh

これは、以下の端末ログ出力を示しています。

コンテナ内にいることがわかり、コンテナ内のファイルを一覧表示できます。

コンテナを停止し、docker-composeを使用してアプリを実行してみてください。 コマンドパレットを開き、docker-composeを見つけて、出力を確認します。

行け

Golangに慣れていない場合は、次のトピックにスキップできます。

DockerもGoで構築されています

Goアプリを作成しましょう。

mkdir docker-go
cd docker-go
touch main.go

ディレクトリツリーには1つのファイルがあります。

.
└── main.go

0 directories, 1 file

main.goファイルの内容は次のとおりです。

main.go

package main

import (
    "log"
    "net/http"
)

func helloHandler(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Hello World"))
}

func main() {
    http.HandleFunc("/", helloHandler)

    if err := http.ListenAndServe(":9000", nil); err != nil {
        log.Fatalln("ListenAndServer Error", err)
    }
}

次のコマンドでアプリを実行できます。

go run main.go

ただし、VSCode Dockerプラグインを使用してイメージを構築し、コンテナーを実行してみましょう。

コマンドパレットを開き、Dockerと入力して、Docker: Add Dockerfile to Workspaceを選択して、Dockerfileを作成します。

プラットフォームを選択するように求められたら、Goを選択して、Enterを押します。

次に、ポートを選択し、ポート9000を書き込むように求められます。これは、アプリで選択したポートであるため、Enterを押します。

以下の4つのファイルが作成されます。 .dockerignoredocker-compose.debug.ymldocker-compose.yml、およびDockerfile

.dockerignoreファイルは、イメージにファイルを追加するときに一部のファイルを無視するようにDockerに指示します。

docker-compose.debug.ymldocker-compose.ymlは、DockerComposeがアプリを実行するために使用します。 Goのデバッグはより複雑であるため、デバッグファイルには追加の入力が必要になるため、これらはそれほど違いはありません。

ただし、ここでのDockerfileは最も興味深いビットです。 build stageの最後の2行がコメント化され、RUN go install -v ./...が追加されます。

# RUN go-wrapper download   # "go get -d -v ./..."
# RUN go-wrapper install    # "go install -v ./..."
RUN go install -v ./...

これが最終的なDockerファイルです。

#build stage
FROM golang:alpine AS builder
WORKDIR /go/src/app
COPY . .
RUN apk add --no-cache git
# RUN go-wrapper download   # "go get -d -v ./..."
# RUN go-wrapper install    # "go install -v ./..."
RUN go install -v ./...

#final stage
FROM alpine:latest
RUN apk --no-cache add ca-certificates
COPY --from=builder /go/bin/app /app
ENTRYPOINT ./app
LABEL Name=docker-go Version=0.0.1
EXPOSE 9000

このタイプのDockerfileパターンはマルチステージビルドと呼ばれ、その主な利点はDockerイメージの最適化です。 これは、コンパイルされた言語で主に役立ちます。ほとんどの場合、コンパイルされたアプリを実行するためにコンパイルツールは必要ありません。 Goは良い例です。

簡単に言うと、Dockerビルドの一部を使用してアプリをコンパイルし、コンパイルされたバイナリをより軽いDockerイメージにコピーして、そこから実行します。

次に、イメージを作成する必要があります。 コマンドパレットを開き、docker-buildと入力し、Docker: Build Imageを選択して、Enterを押します。

Dockerfileを選択するように求められ、デフォルトを選択したままにして、Enterを押します。

最後に、画像タグを選択するように求められます。 デフォルトのdocker-go:latestのままにして、Enterを押します。 統合ターミナルにビルドログが表示されます。

最後に、コンテナを実行する必要があります。 コマンドパレットを開き、docker runと入力します。 Docker: Runを選択し、Enterを押します。 画像を選択するように求められます。 docker-go:latestを選択します。 統合ターミナルにログが表示されます。 以前と同様に、左側のペインでDockerセクションを選択してコンテナーを実行することもできます。コンテナーの下で、docker-goを選択し、実行を右クリックします。 次に、同じdocker run ログが表示されます。

実行中のDockerコンテナにはバイナリしか含まれていないため、コンテナセクションでシェルをアタッチできます。 統合ターミナルの接続されたシェルにlsと入力すると、Dockerfileに対応するappというバイナリファイルが表示されます。

その他の機能

最後に、VSCodeDockerプラグインに付属するその他の便利な機能について説明します。

Dockerによるイメージの検査:これにより、ビルドされたイメージを検査し、JSONファイルで詳細を確認できます。

目的の画像を選択してコンテキストメニューを開き、画像の検査を選択します。 詳細が記載されたJSONファイルが開きます。

コンテナログの表示:これは、実行中のコンテナのコンテキストメニューにもあります。 実行中のNode.jsコンテナを使用しますログは統合ターミナルに表示されます。

レジストリ:Dockerレジストリにログインして、ビルドおよびプッシュしたイメージを確認できます。

システムの整理:このオプションを使用すると、docker system pruneを実行して、システムの未使用のイメージをクリアできます。 Dockerエクスプローラーのウィンドウとクロスのボタンから利用できます。

Intellisense:Dockerファイル(Dockerfile、docker-compose.yml)を自分で作成する必要がある場合は、入力時に便利なIntellisenseを取得できます。 それはあなたに利用可能な画像タグさえ与えるでしょう。 これは、画像名、完全なコロン、CMD +Spaceを入力することでトリガーされます。

Dockerfile Linting:Dockerfilesにエラーがあると、VS Codeに波線が表示され、その上にカーソルを合わせると、エラーが何であるかが表示されます。

VSCodeの下のproblemsタブにも表示されます。

結論

VS Code用のDockerプラグインを使用すると、コマンドの多くを自分で入力しなくても、Dockerfileをすばやくセットアップして作成し、ビルドして実行できます。