Saltar al contenido

¿Cuál es la diferencia entre Docker Compose y Dockerfile?

Solución:

Dockerfile

ingrese la descripción de la imagen aquí

Un Dockerfile es un archivo de texto simple que contiene los comandos que un usuario puede llamar para ensamblar una imagen.

Ejemplo, Dockerfile

FROM ubuntu:latest
MAINTAINER john doe 

RUN apt-get update
RUN apt-get install -y python python-pip wget
RUN pip install Flask

ADD hello.py /home/hello.py

WORKDIR /home

Docker Compose

ingrese la descripción de la imagen aquí

Docker Compose

  • es una herramienta para definir y ejecutar aplicaciones Docker de varios contenedores.

  • definir los servicios que componen su aplicación en docker-compose.yml para que puedan ejecutarse juntos en un entorno aislado.

  • hacer que una aplicación se ejecute en un comando con solo ejecutar docker-compose up

Ejemplo, docker-compose.yml

version: "3"
services:
  web:
    build: .
    ports:
    - '5000:5000'
    volumes:
    - .:/code
    - logvolume01:/var/log
    links:
    - redis
  redis:
    image: redis
    volumes:
      logvolume01: {}

La respuesta es ninguna.

Docker Compose (en lo sucesivo, compose) utilizará el Dockerfile si agrega el comando de compilación al docker-compose.yml.

Su flujo de trabajo de Docker debe ser construir un Dockerfile para cada imagen que desee crear, luego use componer para ensamblar las imágenes usando el build mando.

Puede especificar la ruta a sus Dockerfiles individuales usando build /path/to/dockerfiles/blah dónde /path/to/dockerfiles/blah es donde está bla Dockerfile vidas.

docker-compose existe para que tengas que escribir una tonelada de comandos que tendrías que hacer con docker-cli.

docker-compose también facilita el inicio de varios contenedores al mismo tiempo y los conecta automáticamente con algún tipo de red.

El propósito de docker-compose es funcionar como docker cli pero emitir múltiples comandos mucho más rápidamente.

Para hacer uso de docker-compose, debe codificar los comandos que estaba ejecutando antes en un docker-compose.yml expediente.

No solo los copiará y los pegará en el archivo yaml, hay una sintaxis especial.

Una vez creado, debe alimentarlo al docker-compose cli y dependerá del cli analizar el archivo y crear todos los contenedores diferentes con la configuración correcta que especifiquemos.

Entonces tendrá contenedores separados, digamos, uno es redis-server y el segundo es node-appy desea que se cree con el Dockerfile en su directorio actual.

Además, después de crear ese contenedor, mapearía algún puerto del contenedor a la máquina local para acceder a todo lo que se ejecuta dentro de él.

Entonces para tu docker-compose.yml file, querría comenzar la primera línea así:

version: '3'

Eso le dice a Docker la versión de docker-compose desea utilizar. Después de eso, debes agregar:

version: '3'
services: 
  redis-server: 
    image: 'redis'
  node-app:
    build: .

Tenga en cuenta la sangría, muy importante. Además, notifique que para un servicio estoy tomando una imagen, pero para otro servicio estoy diciendo docker-compose para mirar dentro del directorio actual para construir la imagen que se usará para el segundo contenedor.

Luego, desea especificar todos los puertos diferentes que desea abrir en este contenedor.

version: '3'
services: 
  redis-server: 
    image: 'redis'
  node-app:
    build: .
    ports:
      -

Tenga en cuenta que el guión, un guión en un archivo yaml es la forma en que especificamos una matriz. En este ejemplo, estoy mapeando 8081 en mi máquina local para 8081 en el contenedor así:

version: '3'
services: 
  redis-server: 
    image: 'redis'
  node-app:
    build: .
    ports:
      - "8081:8081"

Entonces, el primer puerto es su máquina local, y el otro es el puerto en el contenedor, también puede distinguir entre los dos para evitar confusiones como esta:

version: '3'
services:
  redis-server:
    image: 'redis'
  node-app:
    build: .
    ports:
      - "4001:8081"

Desarrollando tu docker-compose.yml archivo como este, creará estos contenedores esencialmente en la misma red y tendrán acceso libre para comunicarse entre sí de la forma que deseen e intercambiar tanta información como deseen.

Cuando los dos contenedores se crean usando docker-compose, no necesitamos ninguna declaración de puerto.

Ahora, en mi ejemplo, necesitamos realizar una configuración de código en la aplicación Nodejs que se parece a esto:

const express = require('express');
const redis = require('redis');

const app = express();
const client = redis.createClient({
  host: 'redis-server'
});

Utilizo este ejemplo anterior para que sepa que puede haber alguna configuración específica que tendría que hacer además de la docker-compose.yml archivo que puede ser específico para su proyecto.

Ahora, si alguna vez te encuentras trabajando con una aplicación Nodejs y redis, debes asegurarte de conocer el puerto predeterminado que usa Nodejs, así que agregaré esto:

const express = require('express');
const redis = require('redis');

const app = express();
const client = redis.createClient({
  host: 'redis-server',
  port: 6379
});

Entonces, Docker verá que la aplicación Node está buscando redis-server y redirigir esa conexión a este contenedor en ejecución.

Todo el tiempo, el Dockerfile solo contiene esto:

FROM node:alpine

WORKDIR '/app'

COPY /package.json ./
RUN npm install
COPY . .

CMD ["npm", "start"]

Entonces, mientras que antes tendrías que correr docker run myimage para crear una instancia de todos los contenedores o servicios dentro del archivo, puede ejecutar docker-compose up y no tiene que especificar una imagen porque Docker buscará en el directorio de trabajo actual y buscará un docker-compose.yml archivo dentro.

Antes docker-compose.yml, tuvimos que lidiar con dos comandos separados de docker build . y docker run myimage, pero en el docker-compose mundo, si quieres reconstruir tus imágenes, escribe docker-compose up --build. Eso le dice a Docker que vuelva a iniciar los contenedores, pero que los reconstruya para obtener los últimos cambios.

Entonces docker-compose facilita el trabajo con varios contenedores. La próxima vez que necesite iniciar este grupo de contenedores en segundo plano, puede hacer docker-compose up -d; y para detenerlos, puedes hacer docker-compose down.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *