Skip to main content

The right way to build, tag and ship shared Docker containers.

Project description

FORK

Dockhand is forked from Shipright, as I need these new features now! All of the commands etc, are exactly as in Shipright.

Shipwright builds shared Docker images within a git repository in the right order and publishes them tagged with git’s revision/branch information so you’ll never loose track of an image’s origin.

It’s the perfect tool for building and publishing your images to places like Docker Hub or your own private registry. Have a look at our motivation to see why we built it and the pain points it solves for you.

Installation

Shipwright is a simple python script you can install with pip

$ pip install shipwright

Quickstart

Once installed, simply change to a project of yours that contains multiple Dockerfiles and is in git.

Add a json formatted file named .shipwright.json to the root directory of your project. At minimum it should contain the version number of your Shipwright config and a namespace which is either your docker hub user name or the URL to your private repository.

1.0 is the current version for the config.

{
  "version": 1.0,
  "namespace": "[your docker hub name or private repository]"
}

Additionally your config file can map directory names to alternative docker repositories. For example here is a .shipwright.json for the docker hub user shipwright that also maps the root of the git repository to the docker image shipwright/shared and the /foo directory to shipwright/awesome_sauce.

{
  "version": 1.0,

  "namespace": "shipwright",
  "names": {
    "/": "shipwright/shared",
    "/foo": "shipwright/awesome_sauce"
}

Now you can build all the docker images in the git repo by simply changing to any directory under your git repo and running:

$ shipwright

This will recurse through all the directories, looking for ones that contain a Dockerfile. Shipwright will build these Dockerfiles in order and by default tag them with <namespace>/<dirname>:<git commit> along with <namespace>/<dirname>:<git branch> and <namespace>/<dirname>:latest

Working example

We have a sample shipwright project you can use if you want to try this out right away.

$ git clone https://github.com/6si/shipwright-sample.git
$ cd shipwright-sample
$ shipwright

NOTE: you can use any username you’d like while building locally. In the above example we use ``shipwright``. Nothing is published unless you use the ``push`` command. For your own projects, substitute ``shipwright`` in the above example with your (or your organizations) official docker hub username or private repository.

Notice that if you run the shipwright a second time it will return immediately without doing anything. Shipwright is smart enough to know nothing has changed.

Shipwright really shines when you switch git branches.

$ git checkout new_feature
$ shipwright

Notice that shipwright only rebuilt the shared library and service1, ignoring the other projects because they have a common git ancestry. Running docker images however shows that all the images in the git repository have been tagged with the latest git revision, branch and latest.

In fact, as Shipwright builds containers it rewrites the Dockerfiles so that they require the base images with tags from the current git revision. This ensures that the entire build is deterministic and reproducible.

Building

By default, if you run shipwright with no arguments, it will build all Dockerfiles in your git repo. You can specify one or more specifiers to select fewer images to build. For example you can build a single images and its dependencies by simply specifying its name on the command line.

$ shipwright <namespace>/some_image

Run `shipwright –help’ for more examples of specifiers and their uses.

Publishing

With one command Shipwright can build your images and push them to a remote repository.

$ shipwright push

If you like you can just push your latest images without building.

$ shipwright push --no-build

The same specifiers for building also work with push. You might use this to build an entire tree in one step then push a specific image like so.

$ shipwright build
$ shipwright push -e <namespace>/public_image

0.3.2 (2016-06-06)

  • Fix issue when images are built, but not in git.

0.3.0 (2016-06-06)

  • Support .dockerignore files on Py3k

  • shipwright ‘build’ sub-command is no-longer optional

  • Support extra tags with ‘-t’

  • Continue the build on failure, defer sys.exit until the end of the build.

  • Support shor names in TARGETS.

0.2.0 (2016-05-19)

  • Removed @curry decorator.

  • Removed shipwright.version module.

  • Removed purge command.

  • Fixed various Python 3 bugs.

0.1.0 (2016-05-13)

  • First version of dockhand that can be installed from PyPI

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dockhand-0.3.2.tar.gz (18.0 kB view details)

Uploaded Source

Built Distribution

dockhand-0.3.2-py2.py3-none-any.whl (21.7 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file dockhand-0.3.2.tar.gz.

File metadata

  • Download URL: dockhand-0.3.2.tar.gz
  • Upload date:
  • Size: 18.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for dockhand-0.3.2.tar.gz
Algorithm Hash digest
SHA256 74e99b1b26d102e68bdcff6e67f762c2760049154e69cf2fe8598b0bf239b28b
MD5 6a5a68f77bebd305e88b64b3ef0c96dd
BLAKE2b-256 c0f17a9ab1899b91c03357e981f6ead2f34c6a5d52ff9f68534b37f99cd74c86

See more details on using hashes here.

File details

Details for the file dockhand-0.3.2-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for dockhand-0.3.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 f2ebe7a8fe81d3240289b85a4e9bbc62a82d3e91d74f34f80c6b9e87744340a2
MD5 23d65cd3d2bfd639c29b82d74a0460ee
BLAKE2b-256 ab1c787a919b3610502139faf6129cdd7bcbe67128c12389816b61a0a8f8a70b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page