npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

dk

v1.0.5

Published

quickly start docker containers using local .dkrc settings

Downloads

9

Readme

dk

dk is a command line utility for quickly running pre-defined tasks stored in a project's JSON-formatted .dkrc file.

install

npm i -g dk

usage

$ dk --help
Usage: dk [OPTIONS] [TASK] [CMD] [arg...]

Options:
  -c, --container=$(basename $(pwd))    Set container name
  --cwd=$(pwd)                          Set working directory
  -d, --detached                        Detach container, run in the background
  --debug                               Verbose dk output
  -e, --env=VAR=val                     Set container env vars
  -l, --link=containername:alias        Link to a running container
  --name=                               Name this container
  -p, --port=hostport:containerport     Bind host port to container port
  -s, --preset=key                      Load settings from .dkrc
  -v, --volume=hostpath:containerpath   Link a volume, relative paths are
                                        resolved from cwd

TASK is a key in the .dkrc file, if a match is present.

CMD [default=bash] is the command that will be run inside the container.

arg... are any args to be passed to the command running in the container.

In a directory with the same name as an available docker container, running dk will be an alias for

docker run $(basename $(pwd)) bash

dkb

Given a Dockerfile in the local directory, you can run dkb to quickly build and tag the container as [name of cwd]:latest. dkb is simply an alias for:

docker build -t $(basename $(pwd)) .

.dkrc

.dkrc is a JSON-formatted configuration file where keys are names of presets. A key of * will apply the included settings to all invocations of dk.

Each task/preset may include the following keys:

Command to run:

{"cmd":["my","cmd","--arg"]}

Set environment variables:

{"env":{"VAR_NAME":"value"}}

Link to running containers:

{"link":{"container_name":"alias"}}

Name this container:

{"name":"container_name"}

Bind ports:

{"ports":{"3000":80}}

Link volumes:

{"volume":{"/host/path":"/container/path"}}

examples

Given the following example JSON file:

{
  "*": {
    "env": {
      "MY_VAR": "global"
    }
  },
  "watch": {
    "cmd": [
      "gulp",
      "watch"
    ],
    "volumes": {
      ".": "/usr/src/app"
    }
  },
  "server": {
    "cmd": [
      "gulp",
      "server"
    ],
    "ports": {
      "3000": 80
    },
    "volumes": {
      ".": "/usr/src/app"
    }
  },
  "envtest": {
    "env": {
      "MY_VAR": "envtest"
    }
  },
  "printvar": {
    "cmd": [
      "sh",
      "-c",
      "echo \\$MY_VAR"
    ]
  },
  "lr": {
    "ports": {
      "35729": 35729
    }
  }
}

Then...

$ # check global env var
$ dk sh -c "echo \$MY_VAR"
global
$ # envtest overrides env var
$ dk envtest sh -c "echo \$MY_VAR"
envtest
$ # use printvar's cmd to echo
$ dk printvar
global
$ # precendence: *.env < [presets].env < task.env < dk -e
$ dk --preset=envtest printvar
envtest
$ # or override by set it yourself with an arg
$ dk -s envtest -e MY_VAR=overridden printvar
overridden
$ # but keep in mind, after TASK or CMD, args are passed through
$ dk printvar -e MY_VAR=overridden
global
$ # more practical, run 'gulp server' but optionally bind livereload port
$ dk server
Server listening on port 80
$ # docker ps -> 0.0.0.0:3000->80/tcp
$ dk -s lr server
Server listening on port 80
$ # docker ps -> 0.0.0.0:35729->35729/tcp, 0.0.0.0:3000->80/tcp

Notes

While I am actively using this with my own projects, it is not thoroughly tested and may not work as expected in all scenarios. YMMV. Pull requests welcome. Please open an issue to discuss changes prior to making them.