Let's create a new image, on an existing repository, to install bash:
host $ cd <repository path> host $ ship alpine:latest container $ apk add --no-cache bash container $ exit Dockerfile written successfully! host $ cat Dockerfile # Generated by https://github.com/augustohp/ship FROM alpine:latest LABEL maintainer="Augusto Pascutti <[email protected]>" RUN apk add --no-cache bash What happened?
- The container specified was executed in iterative mode
bash(prefered) orashshell are detected and history configured- The current directory was mounted at
/home/developer - The
historyof the container was converted toRUNinstructions in theDockefile - Your Git credentials become
LABEL maintainer, if they are available
Supported images are (other images might work if they have bash available):
- alpine
- ubuntu/debian
- fedora
This is a single-file script, you can rename it freely to anything memorable for you. An easy one-line install is available through sinister:
sh <(curl -sSL https://git.io/fjjvu) --name ship --local --chmod 755 --url https://git.io/fjhO5 The above one-liner will install the script just for the current user. If you want it globally, remove --local option.
You should be able to execute ship now, for example ship --help:
Usage: ship [-o <filename>] [-f] <image> ship <-d | --detect-shell> <image> ship <-h | --help> ship <-v | --version> Eases the creation of a Dockerfile by transforming the history into RUN instructions. Arguments: image The name of Dockerimage to be executed. The image must have bash installed. Options: -o | --out <filename> The name of the Dockerfile to be creared. Default: Dockerfile. -f | --force Re-creates Dockerfile if it already exists. -d | --detect-shell Outputs the shell available in the image. Shells tested: bash ash Requirements, trying to be minimal, are:
- Docker
- If Git is available, you get the
maintainerlabel in theDockerfile - A POSIX (compatible) Shell (
bash, for example)
There is a Makefile to automate checks on the script:
make lintruns shellcheckmake testruns bats tests
Feel free to hack the ship script. It uses sh not bash to run, so try to avoid bashisms. Almost everything inside the script is on a function to be friendly even if you've never done any shell-scripting before.
Please, feel free to report bugs, ideas or feature requests through an issue.