VSCode Rust development container (#71)
This commit is contained in:
parent
d18c045c98
commit
5752476184
6 changed files with 153 additions and 0 deletions
5
.devcontainer/.dockerignore
Normal file
5
.devcontainer/.dockerignore
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
.dockerignore
|
||||||
|
devcontainer.json
|
||||||
|
docker-compose.yml
|
||||||
|
Dockerfile
|
||||||
|
README.md
|
1
.devcontainer/Dockerfile
Normal file
1
.devcontainer/Dockerfile
Normal file
|
@ -0,0 +1 @@
|
||||||
|
FROM qmcgaw/rustdevcontainer
|
70
.devcontainer/README.md
Normal file
70
.devcontainer/README.md
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
# Development container
|
||||||
|
|
||||||
|
Development container that can be used with VSCode.
|
||||||
|
|
||||||
|
It works on Linux, Windows and OSX.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- [VS code](https://code.visualstudio.com/download) installed
|
||||||
|
- [VS code remote containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) installed
|
||||||
|
- [Docker](https://www.docker.com/products/docker-desktop) installed and running
|
||||||
|
- [Docker Compose](https://docs.docker.com/compose/install/) installed
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
1. Create the following files on your host if you don't have them:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
touch ~/.gitconfig ~/.zsh_history
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that the development container will create the empty directories `~/.docker`, `~/.ssh` and `~/.kube` if you don't have them.
|
||||||
|
|
||||||
|
1. **For Docker on OSX or Windows without WSL**: ensure your home directory `~` is accessible by Docker.
|
||||||
|
1. **For Docker on Windows without WSL:** if you want to use SSH keys, bind mount your host `~/.ssh` to `/tmp/.ssh` instead of `~/.ssh` by changing the `volumes` section in the [docker-compose.yml](docker-compose.yml).
|
||||||
|
1. Open the command palette in Visual Studio Code (CTRL+SHIFT+P).
|
||||||
|
1. Select `Remote-Containers: Open Folder in Container...` and choose the project directory.
|
||||||
|
|
||||||
|
## Customization
|
||||||
|
|
||||||
|
### Customize the image
|
||||||
|
|
||||||
|
You can make changes to the [Dockerfile](Dockerfile) and then rebuild the image. For example, your Dockerfile could be:
|
||||||
|
|
||||||
|
```Dockerfile
|
||||||
|
FROM qmcgaw/rustdevcontainer
|
||||||
|
RUN apk add curl
|
||||||
|
```
|
||||||
|
|
||||||
|
To rebuild the image, either:
|
||||||
|
|
||||||
|
- With VSCode through the command palette, select `Remote-Containers: Rebuild and reopen in container`
|
||||||
|
- With a terminal, go to this directory and `docker-compose build`
|
||||||
|
|
||||||
|
### Customize VS code settings
|
||||||
|
|
||||||
|
You can customize **settings** and **extensions** in the [devcontainer.json](devcontainer.json) definition file.
|
||||||
|
|
||||||
|
### Entrypoint script
|
||||||
|
|
||||||
|
You can bind mount a shell script to `/home/vscode/.welcome.sh` to replace the [current welcome script](shell/.welcome.sh).
|
||||||
|
|
||||||
|
### Publish a port
|
||||||
|
|
||||||
|
To access a port from your host to your development container, publish a port in [docker-compose.yml](docker-compose.yml). You can also now do it directly with VSCode without restarting the container.
|
||||||
|
|
||||||
|
### Run other services
|
||||||
|
|
||||||
|
1. Modify [docker-compose.yml](docker-compose.yml) to launch other services at the same time as this development container, such as a test database:
|
||||||
|
|
||||||
|
```yml
|
||||||
|
database:
|
||||||
|
image: postgres
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
POSTGRES_PASSWORD: password
|
||||||
|
```
|
||||||
|
|
||||||
|
1. In [devcontainer.json](devcontainer.json), change the line `"runServices": ["vscode"],` to `"runServices": ["vscode", "database"],`.
|
||||||
|
1. In the VS code command palette, rebuild the container.
|
40
.devcontainer/devcontainer.json
Normal file
40
.devcontainer/devcontainer.json
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
{
|
||||||
|
"name": "prometheus_wireguard_exporter_dev",
|
||||||
|
"dockerComposeFile": ["docker-compose.yml"],
|
||||||
|
"service": "vscode",
|
||||||
|
"runServices": ["vscode"],
|
||||||
|
"shutdownAction": "stopCompose",
|
||||||
|
"postCreateCommand": "",
|
||||||
|
"workspaceFolder": "/workspace",
|
||||||
|
// "overrideCommand": "",
|
||||||
|
"extensions": [
|
||||||
|
"matklad.rust-analyzer",
|
||||||
|
"tamasfe.even-better-toml", // for Cargo.toml
|
||||||
|
"eamodio.gitlens", // IDE Git information
|
||||||
|
"davidanson.vscode-markdownlint",
|
||||||
|
"ms-azuretools.vscode-docker", // Docker integration and linting
|
||||||
|
"shardulm94.trailing-spaces", // Show trailing spaces
|
||||||
|
"Gruntfuggly.todo-tree", // Highlights TODO comments
|
||||||
|
"bierner.emojisense", // Emoji sense for markdown
|
||||||
|
"stkb.rewrap", // rewrap comments after n characters on one line
|
||||||
|
"vscode-icons-team.vscode-icons", // Better file extension icons
|
||||||
|
"github.vscode-pull-request-github", // Github interaction
|
||||||
|
"redhat.vscode-yaml", // Kubernetes, Drone syntax highlighting
|
||||||
|
"bajdzis.vscode-database", // Supports connections to mysql or postgres, over SSL, socked
|
||||||
|
"IBM.output-colorizer", // Colorize your output/test logs
|
||||||
|
// "mohsen1.prettify-json", // Prettify JSON data
|
||||||
|
// "zxh404.vscode-proto3", // Supports Proto syntax
|
||||||
|
// "jrebocho.vscode-random", // Generates random values
|
||||||
|
// "alefragnani.Bookmarks", // Manage bookmarks
|
||||||
|
// "quicktype.quicktype", // Paste JSON as code
|
||||||
|
// "spikespaz.vscode-smoothtype", // smooth cursor animation
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"files.eol": "\n",
|
||||||
|
"remote.extensionKind": {
|
||||||
|
"ms-azuretools.vscode-docker": "workspace"
|
||||||
|
},
|
||||||
|
"editor.codeActionsOnSaveTimeout": 3000,
|
||||||
|
"rust-analyzer.serverPath": "/usr/local/bin/rust-analyzer"
|
||||||
|
}
|
||||||
|
}
|
31
.devcontainer/docker-compose.yml
Normal file
31
.devcontainer/docker-compose.yml
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
version: "3.7"
|
||||||
|
|
||||||
|
services:
|
||||||
|
vscode:
|
||||||
|
build: .
|
||||||
|
image: rustdevcontainer
|
||||||
|
volumes:
|
||||||
|
- ../:/workspace
|
||||||
|
# Docker
|
||||||
|
- ~/.docker:/root/.docker:z
|
||||||
|
# Docker socket to access Docker server
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
# SSH directory for Linux, OSX and WSL
|
||||||
|
- ~/.ssh:/root/.ssh:z
|
||||||
|
# For Windows without WSL, a copy will be made
|
||||||
|
# from /tmp/.ssh to ~/.ssh to fix permissions
|
||||||
|
# - ~/.ssh:/tmp/.ssh:ro
|
||||||
|
# Shell history persistence
|
||||||
|
- ~/.zsh_history:/root/.zsh_history:z
|
||||||
|
# Git config
|
||||||
|
- ~/.gitconfig:/root/.gitconfig:z
|
||||||
|
# Kubernetes
|
||||||
|
- ~/.kube:/root/.kube:z
|
||||||
|
environment:
|
||||||
|
- TZ=
|
||||||
|
# Needed for debugging
|
||||||
|
# cap_add:
|
||||||
|
# - SYS_PTRACE
|
||||||
|
# security_opt:
|
||||||
|
# - seccomp:unconfined
|
||||||
|
entrypoint: zsh -c "while sleep 1000; do :; done"
|
|
@ -289,3 +289,9 @@ cargo clippy
|
||||||
# Build the Docker image
|
# Build the Docker image
|
||||||
docker build -t mindflavor/prometheus_wireguard_exporter .
|
docker build -t mindflavor/prometheus_wireguard_exporter .
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### VSCode development container
|
||||||
|
|
||||||
|
This is more of a plug and play solution based on Docker and VSCode.
|
||||||
|
|
||||||
|
See [.devcontainer/README.md](https://github.com/MindFlavor/prometheus_wireguard_exporter/blob/master/.devcontainer/README.md)
|
||||||
|
|
Loading…
Reference in a new issue