Dockerfiles used for development. The Docker files consist of multiple stages that can be used for different stages of development (e.g., testing, development, etc.).
To build images, run
docker build . -f cpp.Dockerfile --target dev cpp:targetwhere . can be replaced with the context (i.e., where the container is built from),
cpp.Dockerfile can be replaced with the appropriate file, and dev can be replaced with the
target from the Dockerfile (i.e., what comes after AS).
The cpp:target are shown when displaying the image (i.e., docker image ls) under REPOSITORY
and TARGET, respectively.
To use a specific username in the build, use --build-arg USERNAME=username, which replaces the
USERNAME argument in the Dockerfile.
It's possible to build all images using docker compose by running
docker-compose -f cpp.compose.yaml buildwhere cpp.compose.yaml is the docker-compose file.
To run a container, build it using the commands above and then run
docker run -it --rm cpp:dev bashwhere --rm removes the container once it exits (i.e., it makes it a temporary container).
The following commands are useful when running docker run
| Mount | Description |
|---|---|
~/.ssh:/home/cpp/.ssh/ |
SSH keys. Allows using SSH within the container |
~/.zsh_history:/home/cpp/.zsh_history |
ZSH command history |
-e DISPLAY=$DISPLAY |
Set display |
/tmp/.X11-unix:/tmp/.X11-unix |
Forward X11 port |
--hostname hostname |
Set container host-name |
--network host |
Set network to host (useful when developing web applications) |
The <C-P> is used by Docker to detach keys.
To change the key, update the "detachKeys" in ~/.docker/config.json.
For example
"detachKeys": "ctrl-z,z"Check this answer for more details.