Docker: Combina múltiples imágenes

¿Es posible con Docker combinar dos imágenes en una sola?

Me gusta esto aquí:

genericA -- \ ---> specificAB / genericB -- 

Por ejemplo, hay una image para Java y una image para MySQL.

Me gustaría tener una image con Java y MySQL.

Docker no lo admite directamente, pero puede usar DockerMake (divulgación completa: lo escribí) para administrar este tipo de "inheritance". Utiliza un file YAML para configurar las piezas individuales de la image y luego dirige la construcción generando los files Docker apropiados.

Así es como crearías este ejemplo un poco más complicado:

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

Deberías usar este file DockerMake.yml :

 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 

Después de instalar la herramienta CLI docker-make ( pip install dockermake ), puede build la image specificAB simplemente ejecutando

 docker-make specificAB 

No, solo puedes henetworkingar de una image.

Probablemente no desee que Java y MySQL estén en la misma image, ya que es más idiomático tener un solo componente en un contenedor, es decir, crear un contenedor MySQL separado y vincularlo al contenedor de Java en lugar de poner ambos en el mismo contenedor.

Sin embargo, si realmente debe tenerlos en la misma image, escriba un Dockerfile con Java como la image base (instrucción FROM) e instale MySQL en el file Docker. Debería poder copyr en gran medida las declaraciones del MySQL Dockerfile oficial.

Si lo hace docker commit , no es útil para ver qué commands se usaron para build su contenedor, debe emitir una docker history image

Si tiene un file Docker, simplemente mírelo y verá cómo se construyó y qué contiene.

Docker commit es 'a mano', por lo que es propenso a errores, docker build usando un Dockerfile que funciona mucho mejor.

Puede poner múltiples commands FROM en un solo file Docker.

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