VisualStudioCode用のDockerプラグインの使用方法
序章
この記事では、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
の内容です
const express = require('express')
const app = express()
app.listen(3000)
app.get('/', (req, res) => {
res.send('hello world')
})
package.json
を更新して、開始スクリプトを作成します。
"scripts": {
"start": "node index.js"
},
これで、このアプリをnpm start
で実行し、ポート3000
に移動して、アプリが機能することを確認できます。
従来、Dockerを追加するには、次の手順に従います。
- Dockerfile(またはdocker-compose.yaml)を作成します
- Docker命令をファイルに追加します(FROM、WORKDIR、ADD、EXPOSE、CMD)
- ターミナルで
docker build...
を実行して、イメージをビルドします - ターミナルで
docker run...
を実行して、コンテナを実行します
ただし、プラグインを使用する場合は、次のことを行う必要があります。 コマンドパレットを開き、docker
と入力して、Docker: Add Docker files to Workspace
を選択します。 それは最初のオプションでなければなりません。 Enter
を押します。プラットフォーム/スタックを選択し、Node.jsを選択して、
Enter
を押すように求められます。 次に、ポートを選択するように求められます。
3000
と書くと、アプリがリッスンするポートになります。 次のファイルがワークスペースに追加されます:
.dockerignore
、docker-compose.debug.yml
、docker-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
を押します。 端末に実行コマンドのログが表示されます。
-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
ファイルの内容は次のとおりです。
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つのファイルが作成されます。 .dockerignore
、docker-compose.debug.yml
、docker-compose.yml
、およびDockerfile
。
.dockerignore
ファイルは、イメージにファイルを追加するときに一部のファイルを無視するようにDockerに指示します。
docker-compose.debug.yml
とdocker-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 /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のリンティング:Dockerfilesにエラーがあると、VS Codeに波線が表示され、その上にカーソルを合わせると、エラーが何であるかが表示されます。
VSCodeの下のproblemsタブにも表示されます。
結論
VS Code用のDockerプラグインを使用すると、コマンドの多くを自分で入力しなくても、Dockerfileをすばやくセットアップして作成し、ビルドして実行できます。