Sign inSign up

nodeintegration/denv

By nodeintegration

Updated over 7 years ago

Commands as docker run (Docker Environment)

Image
0

202

nodeintegration/denv repository overview

denv (docker environment)

Requirements

  • Docker installed and running with your intended user in the docker group (ie you can run docker commands as your intended user)

Requirements (optional)

  • yq (python yq, basically jq for yaml) If this is not installed in the current path, it will process .denv.yml config using yq within the denv container

How it works?

These images give you a nice wrapper to run arbitrary commands as well as all of the nodeintegration/denv-* image commands inside a container as if it was a local binary

$ source /dev/stdin <<< "$(docker run nodeintegration/denv:latest boot)"
Binding to tag: latest

What this command does is give a denv function in bash:

$ type denv| grep function
denv is a function
$ type denv| grep function
denv-init is a function

If you are curious what this is exactly doing before you load it into your shell:

$ docker run nodeintegration/denv:latest cat /usr/local/bin/boot
$ docker run nodeintegration/denv:latest cat /workspace/bootstrap

What this denv function does is create a wrapper to run the first argument to denv as a container. By default the command will run inside the denv container with your current working directory mounted to /workspace. It is also run as your current uid/gid

$ cat /etc/issue
Ubuntu 18.04.2 LTS \n \l

$ denv cat /etc/issue
Welcome to Alpine Linux 3.9
Kernel \r on an \m (\l)

.denv.yml

This configuration file for denv allows you to commit specific versions of commands you use within a repository perhaps or on your CI/CD system at the commit level It is evaulated per command

Commands run as different docker images/tags

This is where it gets fun. The function denv looks for a file .denv.yml in your current working directory It then looks for a key: commands: and then if there is a sub key called the first argument you supply to denv ie:

cat .denv.yml
commands:
  bash:

denv will then change the docker run image to be bash for the command bash with the tag of latest

Then lets say i want to run an image that doesnt match the command:

commands:
  terraform:
    image: hashicorp/terraform

denv will then for the command terraform use the hashicorp/terraform image with the default tag of latest

...ok...ok but i want a specific tag not latest:

commands:
  terraform:
    image: hashicorp/terraform
    tag: 0.11.11
I want environment variables passed to the commands run time

Easy peasy:

global:
  environment:
    FOO:
    BAR: baz

This will give you FOO and BAR as docker run environment variables It WILL use your current shells environment variables over the .denv.yml value e.g. with the above .denv.yml:

$ denv env | grep -E '^(FOO|BAR)'
BAR="baz"
FOO=""

$ FOO="bar" denv env | grep -E '^(FOO|BAR)'
BAR="baz"
FOO=bar
I want to make sure i have all expected images for commands at the current upstream tag

denv-init

This will scour your .denv.yml for all commands and what images/tags they want and do a docker pull on them

Tag summary

Content type

Image

Digest

Size

33.3 MB

Last updated

over 7 years ago

docker pull nodeintegration/denv