- Bind mount for root only - Support for Windows Hyperv bind mounts - Run go mod tidy after go mod download - Use :z flag for possibly shared bind mounts - Bind mount zsh_history - Bind mount docker config directory
70 lines
2.5 KiB
Markdown
70 lines
2.5 KiB
Markdown
# 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
|
|
- If you don't use Linux or WSL 2, share your home directory `~/` and the directory of your project with Docker Desktop
|
|
- [Docker Compose](https://docs.docker.com/compose/install/) installed
|
|
- Ensure your host has the following and that they are accessible by Docker:
|
|
- `~/.ssh` directory
|
|
- `~/.gitconfig` file (can be empty)
|
|
|
|
## Setup
|
|
|
|
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.
|
|
1. For Docker running on Windows HyperV, if you want to use SSH keys, bind mount them at `/tmp/.ssh` by changing the `volumes` section in the [docker-compose.yml](docker-compose.yml).
|
|
|
|
## 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/godevcontainer
|
|
USER root
|
|
RUN apk add curl
|
|
USER vscode
|
|
```
|
|
|
|
Note that you may need to use `USER root` to build as root, and then change back to `USER vscode`.
|
|
|
|
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).
|
|
|
|
### 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.
|