序文と謝辞
先日Go言語で簡単な方法を使ってリモートコンテナをつくりました(参考:VSCode + Remote Containerで環境構築(go編))が、作ったあと心の師匠(@MegaBlackLabel)からLGTMとともに以下のようなツッコミ天啓が。
いいですね。
— れいな@底なし沼の魔女 (@MegaBlackLabel) December 21, 2020
次のステップでdocker-composeに差し替えしつつ、srcフォルダをプロジェクト内のsrcフォルダにvolumeをアタッチするのをするといい感じかと。
数日後に本格的にアプリ作れというお上のお達しが入り、流石に先の環境では不十分だということが見えてきたため、この課題に改めて向き合ってそれっぽい環境を作ったので、改めてまとめます。
目次
1. 前提環境
-
Visual Studio Code
- Remote - containersプラグインがインストール済
- Docker Desktop
これ以外には基本的に準備不要。Remote - containersのインストールがわからない場合は前記事(VSCode + Remote Containerで環境構築(go編))を参照。
Windows 10(Pro)で動作確認しているが、恐らくhome含め他OSでも問題ない(homeの場合は別途WSL2が必要)。
2. 作業フォルダの作成
今回はざっくり以下のような構成にします(".devcontainer"を除き、フォルダ名は任意です)。
go-proj
├─ .devcontainer
│ └─ devcontainer.json
├─ docker
│ └─ go
│ └─ Dockerfile
├─ src
└─ docker-compose.yml
トップディレクトリ以下を作成してください。各ファイルについては以降の項目で記載します。
3. コンテナ用のファイルを作成
フォルダ構成を変えた場合は適宜変更してください。
docker-compose.yml
(本記事通りに作る場合、トップディレクトリ"go-proj"下)
version: '3.8'
services:
app:
build: ./docker/go/
command: /bin/sh -c "while sleep 1000; do :; done"
ports:
- 8080:8080
volumes:
- ./src:/go/src:cached
Dockerfile
(本記事通りに作る場合、"go-proj/docker/go"下)
# 本記事記載時点でのlatest
FROM golang:1.15
WORKDIR /go/src
ENV GO111MODULE=on
ENV GOPATH /go
RUN go get -v \
golang.org/x/tools/gopls \
github.com/ramya-rao-a/go-outline \
github.com/sqs/goreturns
4. リモート用のコンテナ設定ファイルを作成
devcontainer.json
(本記事通りに作る場合、"go-proj/.devcontainer"下)
{
"name": "go",
"dockerComposeFile": [
"../docker-compose.yml"
],
"service": "app",
"workspaceFolder": "/go/src",
"settings": {
"terminal.integrated.shell.linux": null,
"go.gopath": "/go"
},
"extensions": [
"golang.go",
],
"shutdownAction": "stopCompose"
}
5. コンテナの起動
VSCodeでプロジェクトフォルダを開き、コマンドパレットその他からRemote-Containers: Reopen in Container
を実行。
X. 参考記事
Go + echo + Docker + VSCode + Remote Containers で開発環境の構築 (ホットリロードとステップ実行対応):途中までを参考にした(realizeのメンテ絡みでこの手順通りの進行は記事現在使用不可)。余談だが、筆者はrealize→air(とecho→gin)で構築している。