リモートのdocker hostなのでソースコードリポジトリのbind mountはできないがなんとかする。
- わけあってGOPATHモードでの開発
GOPATH
は persistent にしたいのでvolume mountする
- ソースコードは
$GOPATH/src
の下に配置する
gopls
のためにGoのバージョンは1.12を使う
- 実際のところGAE/Goランタイムは
go111
だから1.11なのだけれど
という条件の下に.devcontainer/
だけあるリポジトリを作る。
まず VS Code の docker.host
を設定する
1
2
3
|
{
"docker.host": "ssh://username@remote-host"
}
|
リモートのdocker hostなので workspaceMount
を設定しないといかん。(ローカルリポジトリのbindマウントはできない)
postCreateCommand
にてソースコードをcloneする。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
{
"name": "myproject",
"build": {
"dockerfile": "Dockerfile",
"args": {
"VARIANT": "buster"
}
},
"mounts": [
"source=gopath,target=/workspace/go,type=volume"
],
"workspaceMount": "source=project-repo,target=/workspace/go/src/myproject,type=volume",
"workspaceFolder": "/workspace/go/src/myproject",
"postCreateCommand": "sudo chown -R vscode:vscode /workspace && test -d .git || git clone git@github.com:takuo/myproject .",
"remoteEnv": {
"GOPATH": "/workspace/go",
"GO111MODULE": "off"
},
"remoteUser": "vscode"
}
|
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
# [Choice] Debian version: buster, stretch
ARG VARIANT="buster"
FROM golang:1.12-${VARIANT}
# Install needed packages and setup non-root user. Use a separate RUN statement to add your own dependencies.
ARG USERNAME=vscode
ARG USER_UID=1000
ARG USER_GID=$USER_UID
RUN groupadd --gid $USER_GID $USERNAME && useradd --uid $USER_UID --gid $USER_GID $USERNAME
ENV PATH=/workspace/go/bin:/usr/local/go/bin:/usr/lib/google-cloud-sdk/bin:/usr/lib/google-cloud-sdk/platform/google_appengine:$PATH
# ** [Optional] Uncomment this section to install additional packages. **
# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
# && apt-get -y install --no-install-recommends <your-package-list-here>
RUN export DEBIAN_FRONTEND=noninteractive && apt-get update
RUN apt-get -y install apt-transport-https ca-certificates curl gnupg
RUN curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
RUN echo "deb https://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
RUN apt-get update
RUN apt-get -y --no-install-recommends install google-cloud-sdk google-cloud-sdk-app-engine-python google-cloud-sdk-app-engine-go google-cloud-sdk-datastore-emulator npm nodejs lv vim
RUN npm install -g yarn
RUN echo "ja_JP.UTF-8 UTF-8" >> /etc/locale.gen && locale-gen && echo 'LANG="ja_JP.UTF-8"' > /etc/default/locale
RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
RUN echo "Asia/Tokyo" > /etc/timezone
RUN mkdir -p /workspace/go && chown -R $USERNAME:$USERNAME /workspace
|
これでなんかいい感じになりましたわ。