From 85a02f1d0a3f4c1cecb4a74279302ff6a849cdcc Mon Sep 17 00:00:00 2001 From: Oliver Gould Date: Wed, 12 Jan 2022 11:41:54 -0800 Subject: [PATCH] Add a devcontainer config (#1432) GitHub supports [dev containers][dc] to describe reproducible development environments (e.g. for use from VS code). This change introduces a devcontainer.json and Dockerfile to support container-based development. This setup configures docker-in-docker so that docker and k3d can be run inside the dev container. This base configuration can be amended with per-user personalizations via a [dotfiles][df] repo. For example: github.com/olix0r/dotfiles. [dc]: https://docs.github.com/en/codespaces/setting-up-your-project-for-codespaces/configuring-codespaces-for-your-project [df]: https://docs.github.com/en/codespaces/customizing-your-codespace/personalizing-codespaces-for-your-account Signed-off-by: Oliver Gould --- .devcontainer/Dockerfile | 49 +++++++++++++++++++++++++++++++++ .devcontainer/devcontainer.json | 29 +++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/devcontainer.json diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000000..cc130e7f5a --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,49 @@ +FROM docker.io/rust:1.56.1-bullseye + +ENV DEBIAN_FRONTEND=noninteractive +RUN apt update && apt upgrade -y +RUN apt install -y \ + clang \ + cmake \ + golang \ + lldb \ + lsb-release \ + sudo \ + time + +ARG USER=code +ARG USER_UID=1000 +ARG USER_GID=1000 +RUN groupadd --gid=$USER_GID $USER \ + && useradd --uid=$USER_UID --gid=$USER_GID -m $USER \ + && echo "$USER ALL=(root) NOPASSWD:ALL" >/etc/sudoers.d/$USER \ + && chmod 0440 /etc/sudoers.d/$USER + +# Install a Docker client that uses the host's Docker daemon +ARG USE_MOBY=false +ENV DOCKER_BUILDKIT=1 +RUN curl --proto '=https' --tlsv1.3 -vsSfL https://raw.githubusercontent.com/microsoft/vscode-dev-containers/main/script-library/docker-debian.sh \ + | bash -s -- true /var/run/docker-host.sock /var/run/docker.sock "${USER}" "${USE_MOBY}" latest + +USER $USER +ENV HOME=/home/$USER +RUN mkdir -p $HOME/bin +ENV PATH=$HOME/bin:$PATH + +RUN curl --proto '=https' --tlsv1.3 -vsSfLo $HOME/kubectl "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" \ + && chmod 755 $HOME/kubectl +RUN curl --proto '=https' --tlsv1.3 -vsSfL https://raw.githubusercontent.com/rancher/k3d/main/install.sh \ + | USE_SUDO=false K3D_INSTALL_DIR=$HOME/bin bash + +RUN rustup component add clippy rustfmt +RUN mkdir /tmp/cargo-deny && cd /tmp/cargo-deny && \ + curl --proto '=https' --tlsv1.3 -vsSfL https://github.com/EmbarkStudios/cargo-deny/releases/download/0.11.0/cargo-deny-0.11.0-x86_64-unknown-linux-musl.tar.gz \ + | tar zxf - \ + && mv cargo-deny-0.11.0-x86_64-unknown-linux-musl/cargo-deny $HOME/bin \ + && cd .. && rm -rf /tmp/cargo-deny + +RUN curl --proto '=https' --tlsv1.3 -vsSfL https://run.linkerd.io/install-edge | sh \ + && ln -s $(readlink ~/.linkerd2/bin/linkerd) ~/bin/linkerd + +ENTRYPOINT ["/usr/local/share/docker-init.sh"] +CMD ["sleep", "infinity"] diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000000..28bda0ad41 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,29 @@ +{ + "name": "linkerd2-proxy", + "image": "ghcr.io/linkerd/dev-proxy:v3", + //"dockerFile": "./Dockerfile", + "extensions": [ + "DavidAnson.vscode-markdownlint", + "matklad.rust-analyzer", + "NathanRidley.autotrim", + "samverschueren.final-newline", + "streetsidesoftware.code-spell-checker", + "tamasfe.even-better-toml", + "vadimcn.vscode-lldb", + "zxh404.vscode-proto3" + ], + // Support docker + debugger + "runArgs": [ + "--init", + // Use the host network so we can access k3d, etc. + "--net=host", + // For lldb + "--cap-add=SYS_PTRACE", + "--security-opt=seccomp=unconfined" + ], + "overrideCommand": false, + "remoteUser": "code", + "mounts": [ + "source=/var/run/docker.sock,target=/var/run/docker-host.sock,type=bind" + ] +}