Elixir slow in devcontainer (vscode and docker)

Just wanted to share my experience:

I was suffering with my elixir vscode devcontainer (docker) environment, because tests took ~20 seconds to start running.

I tried delegating the workspace:
- ..:/workspace:delegated
This makes the shared folder (between the container and the host) to write first on the container and to be eventually consistent with the host, so it doesn’t try to sync all the time.

At the beginning it worked, but sometime at the beginning of this year (2021) slowed down again.

Finally got with this amazing post by Marcus Baguley, that recommends to change the /deps and /_build folder to somewhere outside the workspace folder:

https://stories.abletech.nz/optimising-docker-for-mac-and-elixir-130db4ecd7c3

And now it works as expected.
Totally recommended for your dev environment!

5 Likes

That’s cool. Thanks for sharing

2 Likes

Another benefit besides speed from moving your build deps out of your volume mount path is that you will no longer have a bunch of dependencies volume mounted back to your dev box, so things stay tidy.

It’s also a discussion point in my upcoming DockerCon talk because this concept applies to other things too like node_modules/.

4 Likes

Did you try .dockerignore file where you can put folders to ignore and Docker will not use them for loading?

1 Like

Are you on a MAC?

Yes! Docker on Mac doesn’t shine.

1 Like

Oh, I discovered that It was easier than what Marcus sugested
the env variables MIX_BUILD_ROOT and MIX_DEPS_PATH overrides build_path and deps_path, so you just have to add

environment:
    MIX_BUILD_ROOT: /opt/elixir-artifacts/_build
    MIX_DEPS_PATH: /opt/elixir-artifacts/deps
volumes:
    - elixir-artifacts:/opt/elixir-artifacts

to your docker-compose :slight_smile:

2 Likes