This is my exercism.io setup. If you need to override anything, just create docker-compose.override.yml and change it there.
When I get a new exercise (for example, foo), just set the build arg. Here's an example in action:
cd scala
exercism fetch scala foo
docker-compose build --build-arg exercise=foo exercise
docker-compose run exercise
For each of these, I have an override to mount my current exercism dir as a volume, like this:
exercise:
volumes:
- ~/exercism/elm:/exercism/elm
For some languages, like Scala and Elm, there are built in scripts to watch for code changes and execute tests, so after building just run it thusly:
docker-compose up