GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Docker File vs Docker Compose:¿Cuál es la diferencia?

He visto a muchas personas confundirse entre un Dockerfile y un archivo Compose. Esto se debe principalmente a que ambos se usan para modificar una imagen de Docker de alguna manera, aunque técnicamente no es correcto.

Es fácil confundir los dos términos, pero también es necesario comprender la diferencia al entablar una conversación con un colega o su (potencial) empleador.

Dockerfile es lo que se usa para crear una imagen de contenedor, y un archivo Compose es lo que se usa para implementar una instancia de esa imagen como contenedor.

Permítanme entrar en un poco de detalle para que comprendan correctamente la diferencia entre Docker Compose y Dockerfile.

¿Qué es un Dockerfile?

Me gusta llamar a Dockerfile el predecesor de una imagen de contenedor. Construyes una imagen a partir de un Dockerfile. Un Dockerfile típico contiene instrucciones de compilación especiales, comandos como RUN , ADD , COPY , ENTRYPOINT , etc

Tome el siguiente ejemplo:

FROM alpine:latest

RUN apk add --no-cache fortune

ENTRYPOINT ["fortune"]

Cada línea comienza con una instrucción para el componente de construcción. Estas instrucciones no necesariamente tienen que estar escritas en mayúsculas. El siguiente es tan válido como el anterior.

from alpine:latest

run apk add --no-cache fortune

entrypoint ["fortune"]

A partir de este Dockerfile, ahora puede crear una imagen de contenedor (o una imagen acoplable). Una imagen es simplemente una plantilla para los contenedores en ejecución, que consta de varias capas de solo lectura. Dado que este no es un artículo sobre imágenes de contenedores, me abstendré de explicar demasiado ese tema.

Para crear una imagen a partir de este Dockerfile, mediante la CLI de Docker, ejecute el siguiente comando

docker build -t fortune:alpine .

Esto creará una imagen etiquetada como fortune:alpine . Todavía no voy a crear un contenedor a partir de esta imagen, eso es para la siguiente sección.

¿Qué es un archivo Compose?

Los archivos de composición se utilizan en dos tipos de implementaciones:en la implementación sin clúster con docker-compose y una implementación de clúster con docker swarm .

Para distinguir los dos tipos, me referiré al archivo de composición responsable de la implementación del clúster como archivos de pila. Hablaré sobre los archivos de pila en un momento.

Los archivos de composición son parte de una herramienta llamada docker-compose . Es una aplicación cliente para el servidor daemon docker, algo así como docker Cliente CLI, pero en lugar de escribir todo run comandos cada vez, con docker-compose puede reutilizar el mismo archivo YAML una y otra vez e implementar el mismo contenedor con la misma configuración que hizo la primera vez.

Es más legible, más fácil de mantener, más intuitivo. Un único archivo de redacción puede contener varias configuraciones de implementación de contenedores.

La compatibilidad con el archivo Compose formará parte del cliente docker predeterminado que está escrito en Go, como un argumento de la línea de comandos, "docker compose". Observe el guión que falta allí. Todavía es experimental, por lo que en producción se usa la versión de Python, es decir, todavía se recomienda docker-compose.

Tomemos la imagen anterior e implementemos una instancia de eso usando un archivo de composición.

version: "3.3"

services:
    fortune:
        image: "fortune:alpine"

Guarde el archivo como docker-compose.yml . Ahora ejecute en el mismo directorio el siguiente comando

docker-compose up

No tienes que guarde el archivo como docker-compose.yml , puedes guardarlo como quieras, pero si no es docker-compose.yml o docker-compose.yaml , asegúrese de usar -f [FILENAME] opción.

docker-compose -f docker-compose.yml up

Espera y mira lo que ocurre.

Para saber qué fortune es decir, lea este artículo sobre comandos divertidos de Linux.

12 divertidos comandos de Linux para darle vida a su terminal Aquí hay algunos comandos de Linux divertidos e inofensivos para entretener a sus colegas y amigos. Pueden parecer inútiles, pero son divertidos, no obstante. Es FOSSCommunity

¿Qué es un archivo de pila?

Los archivos de pila son idénticos a los archivos de composición con una sintaxis similar y la mayoría de las opciones internas, con algunas excepciones. Los archivos de pila se utilizan para implementar pilas de servicios en un clúster de enjambre.

Puede reutilizar el archivo de redacción anterior directamente como un archivo de pila.

Primero, inicialice el clúster.

docker swarm init

Luego ejecute un comando similar al siguiente

docker stack deploy -c docker-compose.yml fortune

Si se implementa de esta manera, debe verificar la salida al ver los registros del servicio usando docker service logs ... .

Resumiendo

Los archivos Dockerfiles y Compose tienen un propósito diferente. Si pudiera construir una línea de tiempo, se vería así

Dockerfile -> Docker Image -> Compose File -> Running Containers

Hay otra razón por la que los principiantes se confunden con estos dos archivos. Se puede apuntar a un Dockerfile a través del archivo Compose, y luego puede usar docker-compose para construir la imagen.

Por ejemplo, puede reescribir el archivo de redacción anterior para que

version: "3.3"

services:
    fortune:
        build:
            context: '.'
            dockerfile: "./Dockerfile"
        image: "fortune:alpine"

Ahora puede ejecutar docker-compose build para construir la imagen. O también puede ejecutar docker-compose up --build para compilar y ejecutar el contenedor a la vez.

Aquí, el Dockerfile se pasa a través del archivo de redacción y, a primera vista, puede parecer que es el archivo de redacción el responsable de crear la imagen, pero no lo es.

Docker Run vs Start vs Create:diferencia explicada Para un principiante de docker, términos como docker start, docker run y docker create pueden ser confusos. Este artículo explica la diferencia con ejemplos. Manual de LinuxAbhishek Prakash

Espero que este artículo haya aclarado cuál es la diferencia entre un archivo Dockerfile y un archivo Compose. Si tiene alguna pregunta, hágamelo saber en la sección de comentarios a continuación.


Docker
  1. ¿Cuál es la diferencia entre los contenedores LXC, LXD y Docker?

  2. Cómo actualizar/agregar un archivo en la imagen de Docker

  3. ¿Cuál es el propósito del archivo .bashrc en Linux?

  4. ¿Cuál es la diferencia de redirigir una salida usando >, &>, >&y 2&>?

  5. ¿Cuál es la diferencia entre escribir en un archivo y una memoria mapeada?

NVMe vs M.2:¿Cuál es la diferencia?

Sabores de Ubuntu:¿Cuál es la diferencia?

¿Qué es Docker Compose y cómo se usa?

iptables vs nftables:¿Cuál es la diferencia?

SIGTERM vs SIGKILL:¿Cuál es la diferencia?

DevOps vs Ingeniero de software:¿Cuál es la diferencia?