Docker: Combine multiple images

docker, java, linux, mysql

Solution

Docker doesn't directly support this, but you can use DockerMake (full disclosure: I wrote it) to manage this sort of "inheritance". It uses a YAML file to set up the individual pieces of the image, then drives the build by generating the appropriate Dockerfiles.

Here's how you would build this slightly more complicated example:

                                     --> genericA --
                                    /                \
      debian:jessie -->  customBase                   ---> specificAB
                                    \                /
                                      --> genericB --

You would use this `DockerMake.yml` file:

specificAB:
  requires:
    - genericA
    - genericB

genericA:
  requires:
     - customBase
  build_directory: [some local directory]
  build: |
    #Dockerfile commands go here, such as
    ADD installA.sh
    RUN ./installA.sh

genericB:
  requires:
    - customBase
  build: |
    #Here are some other commands you could run
    RUN apt-get install -y genericB
    ENV PATH=$PATH:something

customBase:
  FROM: debian:jessie
  build: |
    RUN apt-get update && apt-get install -y buildessentials

After installing the `docker-make` CLI tool (`pip install dockermake`), you can then build the `specificAB` image just by running

docker-make specificAB

Problem

Is it possible with Docker to combine two images into one? Like this here: ``` genericA -- \ ---> specificAB / genericB -- ``` For example there's an image for Java and an image for MySQL. I'd like to have an image with Java and MySQL.

Original source