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 <augusto.hp@gmail.com>"
RUN apk add --no-cache bash
What happened?
- The container specified was executed in iterative mode
bash
(prefered) orash
shell are detected and history configured- The current directory was mounted at
/home/developer
- The
history
of the container was converted toRUN
instructions 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
maintainer
label in theDockerfile
- A POSIX (compatible) Shell (
bash
, for example)
There is a Makefile
to automate checks on the script:
make lint
runs shellcheckmake test
runs 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.