- Portability: move seamlessly across operating systems and be productive immediately with minimal time wasted on setup and configuration
- Dependency management: avoid breaking changes in the complex interdependencies across CLI tools by applying updates in a sandbox
- Experimentation: be as destructive or radical as you like as you try out different tools or ways of working without the risk of breaking your existing setup
- Isolation: achieve greater isolation-- in theory you could be working on the same codebase in two different IDE containers with different sets of project dependencies installed
$ git clone https://github.com/circld/cli_ide && cd cli_ide
$ docker build . -t cli_dev:latest
For an ephemeral development environment:
$ docker run --name cli_ide --rm -it --mount type=bind,src=(pwd),dst=/src cli_dev:latest
Or with this fish
utility function:
$ dev --help
- centos7-based images
- set perms for
tldr
- troubleshoot vim-clap grep2 behavior
- set perms for
- does musl
tldr
static binary work for alpine-based container? - use as daily driver to assess usability/perf/usefulness
- experiment with including fisher and fzf.fish
- do i want
node
/npm
as dependencies (used for a variety of language servers) - add specific versions to installs for a more deterministic build
- expose a range of ports (but then... cannot be interactive? think this through)
- take port mappings as an optional argument
- should the default user really be
root
? - install linters and fixers
- longer-term: consider creating language-specific images using cli_dev as a base (update
Installation
section above)
- longer-term: consider creating language-specific images using cli_dev as a base (update
- how to handle
pyenv
?- if installing, check
https://github.com/jfloff/alpine-python
for ideas - otherwise, address
.spacevim
andconfig.fish
references topyenv
- if installing, check
- optimize image size
- build dependency identification and cleanup
- python/intermediate artifact cleanup