The "terminal" of VS Code natively offers the user a command-line to her/his local environment, invoking bash, zsh, Windows PowerShell, Windows CMD, etc. This can be customized in a variety of ways, for example Windows users running WSL can use that terminal within VS Code, along with PowerShell or the Windows CMD.
The challenge for data scientists is creating and managing project environments without too much complexity or overhead.
Devcontainers provide a method for consistent local terminals by containerizing the interactive terminal. This means all students have the same software, the same environment configuration, and the same paths to their work.
- Truly local environment, runs 100% on the student machine.
- Configuration can also be used in GitHub Codespaces!
- Supports most languages: Python, R, etc.
- Completely customizable. Can even use custom Dockerfile.
- Allows for port mappings, volume mappings, between computer and container
- Requires an understanding of the
devcontainers.jsonfile - Built-in GitHub authentication is not automatic in all scenarios
- Available container images are specifically built for this use
- Access to other local files (
.sshdirectory, etc.) must be mapped in
Note the .devcontainer/devcontainer.json file, which configures the environment. This can include:
- Base devcontainer image to use; OR
- Dockerfile to build from
- Environment variables
- Mounts of local storage into the devcontainer
- Commands to run upon creation
- Port forwarding, etc.
- Other features available
-
Two prerequisites before you start:
- Be sure Docker is installed and running on your local machine.
- Be sure to install the UVA Data Science Core Extension Pack. This includes the Devcontainer plugin.
-
In order to use
gitinside of the Devcontainer, a little setup is needed.-
Instead of creating a new
.gitconfigfile for the container, the Devcontainer will map your file into the container. -
Mark the container path as safe within your
~/.gitconfigfile by running this command:git config --global --add safe.directory '*' -
We recommend using SSH key authentication to GitHub. (Go here for setup instructions.) Notice line 20 of the
.devcontainer/devcontainer.jsonfile maps the owner's SSH directory into the container. -
Line 21 of the configuration maps your
~/.gitconfigfile into the container as well.
-
-
With that setup complete, fork and clone this repository to your local machine and open in VS Code.
-
You will be prompted in the lower-right corner of the screen that a Devcontainer configuration has been detected for this folder, asking if you would like to reopen it within the container. Click the Reopen in Container button to do so.
-
Once the project reopens in the container, your terminal will display the container environment, running as the
vscodeuser, and your project will be in a new path (that does not exist on your local system). Software and paths will be consistent for all users. Take a moment to query the path to Python3, or jq, etc. -
This project contains a simple Python API framework called FastAPI. To run a preview of the application, run this command:
./preview.shYou will be prompted to open a browser to view and interact with the containerized API.