This page looks best with JavaScript enabled

リモートのdocker hostでVS CodeのRemote-Development

 ·   2 min read

リモートの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

これでなんかいい感じになりましたわ。

Share on

Avatar
WRITTEN BY
northeye
Takuo Kitame. A Software Engineer.