Docker: Combine multiple images

前端 未结 4 1112
春和景丽
春和景丽 2020-11-27 18:27

Is it possible with Docker to combine two images into one?

Like this here:

genericA --
            \\
             ---> specificAB
            /
g         


        
相关标签:
4条回答
  • No, you can only inherit from one image.

    You probably don't want Java and MySQL in the same image as it's more idiomatic to have a single component in a container i.e. create a separate MySQL container and link it to the Java container rather than put both into the same container.

    However, if you really must have them in the same image, write a Dockerfile with Java as the base image (FROM statement) and install MySQL in the Dockerfile. You should be able to largely copy the statements from the official MySQL Dockerfile.

    0 讨论(0)
  • 2020-11-27 19:02

    If you do docker commit, it is not handy to see what commands were used in order to build your container, you have to issue a docker history image

    If you have a Dockerfile, just look at it and you see how it was built and what it contains.

    Docker commit is 'by hand', so prone to errors, docker build using a Dockerfile that works is much better.

    0 讨论(0)
  • 2020-11-27 19:14

    You can put multiple FROM commands in a single Dockerfile.

    https://docs.docker.com/reference/builder/#from

    0 讨论(0)
  • 2020-11-27 19:17

    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
    
    0 讨论(0)
提交回复
热议问题