No tienes acceso a esta clase

Para ver esta clase necesitas una suscripción a Platzi

Docker-compose: la herramienta todo-en-uno

20/25

Docker compose es una herramienta que nos permite describir de forma declarativa la arquitectura de nuestra aplicación, utiliza composefile (docker-compose.yml).

Instalación en Linux:

sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

docker-compose --version

Docker compose

crear el archivo docker-compose.yml
Dockerfile = describer de manera imperativa (paso a paso) la arquitectura de nuestra aplicación
docker-compose.yml = describir de forma declarativa la arquitectura de nuestra aplicación

version: "3"

services:
app:
image: platziapp
environment:
MONGO_URL: "mongodb://db:27017/test"
depends_on:
- db
ports:
- "3000:3000"

db:
image: mongo

docker-compose up para crear el build de la imagen

Si les interesa saber la sintaxis yml aqui les dejo un link (lo explican bastante bien).

https://learnxinyminutes.com/docs/es-es/yaml-es/

comparto mi docker compose con network y volumenes

version: "3"

services:
  node:
    image: node-app
    environment:
      MONGO_URL: "mongodb://db:27017/test"
    depends_on:
      - db
    ports:
      - 4000:3000
    volumes:
      - /home/$USER/dockerizeNode:/app
    networks:
      - nodenet

  db:
    image: mongo
    volumes:
       - db-data:/data/db
    networks:
      - nodenet

volumes:
  db-data:

networks:
  nodenet:

Actualmente Docker-compose ya está disponible para Linux en 64 bits

**PASOS DE INSTALACIÓN **

  1. ABRIR UN TERMINAL
  2. ESCRIBIR EL SIGUIENTE COMANDO
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

  1. APLICAR PERMISOS DE EJECUCIÓN
sudo chmod +x /usr/local/bin/docker-compose
  1. VERIFICAR INSTALACIÓN, CORRER
docker-compose --version
docker-compose.png

Espero que les haya servido para los usuarios linux. Yo lo hice en Ubuntu 19.10 Eoan Ermine

Tal vez seria apropiado que aclaremos que para subir el docker compose debemos estar parados en el directorio… parece algo tonto pero a mi me sucedio jajajaj

exelente curso

Si alguien está trabajando con Laravel, les dejo este post que escribí al respecto. Espero que les sirva

https://agustinducca.com/blog/como-crear-un-proyecto-de-laravel-6-en-docker/

Consulta, dentro del compose puedo especificar una red de docker ya existente en mi máquina?

  • Docker compose es una herramienta que nos permite describir de forma declarativa la arquitectura de nuestra aplicación.
  • utiliza composefile (docker-compose.yml).
  • Un servicio puede tener más de un contenedor.
  • depends on: -db -> indica que el servicio depende de otro servicio llamado db, así que debe inicializar primero el servicio del cual depende.
  • docker-compose up : corre todo con un solo comando (red virtual, contenedores, etc)

docker-compose.yml

version: "3"

services:
  # Nombre contenedor
  app:
    image: platziapp
    # Variables de entorno
    environment:
      MONGO_URL: "mongodb://db:27017/test"
    # Indica que debe iniciarse despues del contenedor "db"
    depends_on:
      - db
    ports:
      - "3000:3000"
  # Nombre contenedor
  db:
    image: mongo

Instalar docker-compose en Linux:

sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Verifica que se instaló correctamente:

docker-compose --version

Yo agregue volumes para poder hacer cambios y verlos en el container

volumes:
    - .:/usr/src
el archivo .yml maneja una sintaxis parecida a python en el sentido de que todo se organiza con tabs, por eso se ve los espacios tabulados en las instrucciones.

Una consulta de algo que no me quedo muy claro. El docker-compose crea la comunicacion entre todos los contenedores de manera automatica no?

Antes que nada borramos todos los contenedores antes creados… jejeje
con un comando genial

docker rm -f $(docker ps -aq)

y la red tambien

# docker network rm platzinet 

Listos!!!
No aun no, para linux debes instalar el docker-compose
https://docs.docker.com/compose/install/#install-compose
Entendemos el archivo…?

Compose

version: "3"

services:
  app:
    image: platziapp
    environment:
      MONGO_URL: "mongodb://db:27017/test"
    depends_on:
      - db
    ports:
      - "3000:3000"

  db:
    image: mongo

Ejecutamos

# docker-compose up

y ya está!

Ejemplo:

version:"3"
 
services:
  website:                          # Nombre contenedor
    image: my_app                   # Nombre de la imagen
    environment:                    # Variables de entorno
      NODE_ENV:"test"
    depends_on:                     # website se inicia después del contenedor "db"
      - db
    build:
      context: .
      dockerfile: test.Dockerfile   # archivo Dockerfile que utilizara para hacer build
    ports:                          # puertos
      - "3000:3000"
  db:                               # Nombre contenedor
    image: mongo_test_db            # Nombre de la imagen

¿Como sería el archivo docker-compose.yml para poder habilitar la autenticación de mongodb? o al menos poder personalizar esa imagen!

Tiene un limite de información que puedo almacenar en mi base de datos?, o va creciendo conforme se le inserta información?

La ventaja de usar Arch. Sólo escribo

sudo pacman -S docker-compose

y listo. 😃

es increible como esto hace todo el trabajo

Alguien sabe como realizo un upgrade de versión sin dañar algo ?

Vale si con el compose es mucho mas fácil y menos engorroso

Windows

version: "3.7"

services:
  app:
    image: cmbapp
    volumes:
        - /C/prjs/node/docker:/usr/src
    environment:
        MONGO_URL: "mongodb://db:27017/test"
    depends_on:
        - db
    ports:
        - "3000:3000"

  db:
    image: mongo

Tanto poder, ahhhh!

Mucho mas sencillo, que herramienta tan util.

Entonces al usar docker-compose no es necesario definir un archivo Dockerfile? Solo basta con el docker-compose.yml?

Gracias

Wonderful

DEPENDS_ON

Me falla al contruir la app

Pero qué clase de magia negra es esto?

Muy útil!

En ubuntu:

sudo apt install docker-compose

Se le puede importar un env file en la seccion environment del docker-compose?

Genial! a la primera 😃

Docker-compose: permite describir de forma declarativa la arquitectura de nuestra aplicacion

¿Cómo sería la configuración para un contenedor con mysql en cambio de mongo?

Buenisimo!!

todo menos uno me corre, lo de los puertos, quien puede ayudarme con este problema

Excelente. Minimiza el tiempo de la administración. Es importante conocer como funciona internamente Docker, pero esta herramienta ayuda con la gestión de tu entrono.

La principal diferencia entre un servicio y un contenedor, es que un servicios puede tener mas de un contenedor.

Maravilloso 😃

Casi la jodo! no se que hice pero al instalar el docker-compose se me perdió la conexión con el demon y buscando alguna solución se me desconfiguro todo hasta que docker dejó de tener conexión con el demon completamente y no valia nada, ni el docker ps, :c bueno reinstalé todo y ya funcionó, puff casi me chillo.

el Curso va genial 😃

DOCKER COMPOSE facilita mucho el trabajo.
054_Docker_compose_up.jpg

Me siento como programando a un Jarvis! Simplemente espectacular el uso de esta utilidad para tener ambientes de desarrollo en mejor tiempo y con mejor complejidad.

uff esto es super sencillo, aunque valió la pena cada práctica anterior para entender como funciona docker

Dockerfile > descripcion imperativa.

Docker compose:
Es una herramienta que nos permite describir
de forma declarativa la arquitectura de
nuestra app.

version: "3" -> recomendado usar la ultima

services: -> la abstraccion de cada
  => contenedor es un servicio

Diferencia entre contenedor y un sercicio
es que un servicio puede tener mas de un
contendor.

Excelente y poderoso docker-compose muy bueno

Mas poder que el guante de Thanos, tremendooo!!!

El dockerCompose es el equivalente a los pipeline de Jenkins 😃

Con docker-compose funciona la app, sin embargo ya me escucha los cambios
Estoy en windows 10 y para que funcionara el Dockerfile, tuve que agregar estos cambios

CMD ["npx", "nodemon", "--legacy-watch", "index.js"]

Sin embargo docker-compose no toca Dockerfile, alguien sabe como hacer que nodemon reconozca los cambios?

excelente curso, gran profe! todo muy claro.

  • Docker compose, es una manera de escribir de manera declarativa, mientras que los docker file se describen de manera imperativa, paso a paso.
  • En docker compose, hablamos de servicios, el cual puede tener mas de un contenedor.
  • Con depends_on, indicamos en docker compose que para iniciar el servicio declarado, primero se debe de haber iniciado el servicios dependiente.

https://platzi.com/clases/1432-docker/15439-docker-compose-la-herramienta-todo-en-uno/?time=444

En el contenido del docker-compose.yml no esta definido que estos contenedores van a usar una network, esto quiere decir que por cada “services:” se va a crear una docker network para conectar todos los contenedores de ese services? o esto depende del “depends_on”?

Instalación en Linux:

sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

docker-compose --version

Docker compose

crear el archivo docker-compose.yml
Dockerfile = describer de manera imperativa (paso a paso) la arquitectura de nuestra aplicación
docker-compose.yml = describir de forma declarativa la arquitectura de nuestra aplicación

version: "3"

services:
app:
image: platziapp
environment:
MONGO_URL: "mongodb://db:27017/test"
depends_on:
- db
ports:
- "3000:3000"

db:
image: mongo

docker-compose up para crear el build de la imagen

Si les interesa saber la sintaxis yml aqui les dejo un link (lo explican bastante bien).

https://learnxinyminutes.com/docs/es-es/yaml-es/

comparto mi docker compose con network y volumenes

version: "3"

services:
  node:
    image: node-app
    environment:
      MONGO_URL: "mongodb://db:27017/test"
    depends_on:
      - db
    ports:
      - 4000:3000
    volumes:
      - /home/$USER/dockerizeNode:/app
    networks:
      - nodenet

  db:
    image: mongo
    volumes:
       - db-data:/data/db
    networks:
      - nodenet

volumes:
  db-data:

networks:
  nodenet:

Actualmente Docker-compose ya está disponible para Linux en 64 bits

**PASOS DE INSTALACIÓN **

  1. ABRIR UN TERMINAL
  2. ESCRIBIR EL SIGUIENTE COMANDO
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

  1. APLICAR PERMISOS DE EJECUCIÓN
sudo chmod +x /usr/local/bin/docker-compose
  1. VERIFICAR INSTALACIÓN, CORRER
docker-compose --version
docker-compose.png

Espero que les haya servido para los usuarios linux. Yo lo hice en Ubuntu 19.10 Eoan Ermine

Tal vez seria apropiado que aclaremos que para subir el docker compose debemos estar parados en el directorio… parece algo tonto pero a mi me sucedio jajajaj

exelente curso

Si alguien está trabajando con Laravel, les dejo este post que escribí al respecto. Espero que les sirva

https://agustinducca.com/blog/como-crear-un-proyecto-de-laravel-6-en-docker/

Consulta, dentro del compose puedo especificar una red de docker ya existente en mi máquina?

  • Docker compose es una herramienta que nos permite describir de forma declarativa la arquitectura de nuestra aplicación.
  • utiliza composefile (docker-compose.yml).
  • Un servicio puede tener más de un contenedor.
  • depends on: -db -> indica que el servicio depende de otro servicio llamado db, así que debe inicializar primero el servicio del cual depende.
  • docker-compose up : corre todo con un solo comando (red virtual, contenedores, etc)

docker-compose.yml

version: "3"

services:
  # Nombre contenedor
  app:
    image: platziapp
    # Variables de entorno
    environment:
      MONGO_URL: "mongodb://db:27017/test"
    # Indica que debe iniciarse despues del contenedor "db"
    depends_on:
      - db
    ports:
      - "3000:3000"
  # Nombre contenedor
  db:
    image: mongo

Instalar docker-compose en Linux:

sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Verifica que se instaló correctamente:

docker-compose --version

Yo agregue volumes para poder hacer cambios y verlos en el container

volumes:
    - .:/usr/src
el archivo .yml maneja una sintaxis parecida a python en el sentido de que todo se organiza con tabs, por eso se ve los espacios tabulados en las instrucciones.

Una consulta de algo que no me quedo muy claro. El docker-compose crea la comunicacion entre todos los contenedores de manera automatica no?

Antes que nada borramos todos los contenedores antes creados… jejeje
con un comando genial

docker rm -f $(docker ps -aq)

y la red tambien

# docker network rm platzinet 

Listos!!!
No aun no, para linux debes instalar el docker-compose
https://docs.docker.com/compose/install/#install-compose
Entendemos el archivo…?

Compose

version: "3"

services:
  app:
    image: platziapp
    environment:
      MONGO_URL: "mongodb://db:27017/test"
    depends_on:
      - db
    ports:
      - "3000:3000"

  db:
    image: mongo

Ejecutamos

# docker-compose up

y ya está!

Ejemplo:

version:"3"
 
services:
  website:                          # Nombre contenedor
    image: my_app                   # Nombre de la imagen
    environment:                    # Variables de entorno
      NODE_ENV:"test"
    depends_on:                     # website se inicia después del contenedor "db"
      - db
    build:
      context: .
      dockerfile: test.Dockerfile   # archivo Dockerfile que utilizara para hacer build
    ports:                          # puertos
      - "3000:3000"
  db:                               # Nombre contenedor
    image: mongo_test_db            # Nombre de la imagen

¿Como sería el archivo docker-compose.yml para poder habilitar la autenticación de mongodb? o al menos poder personalizar esa imagen!

Tiene un limite de información que puedo almacenar en mi base de datos?, o va creciendo conforme se le inserta información?

La ventaja de usar Arch. Sólo escribo

sudo pacman -S docker-compose

y listo. 😃

es increible como esto hace todo el trabajo

Alguien sabe como realizo un upgrade de versión sin dañar algo ?

Vale si con el compose es mucho mas fácil y menos engorroso

Windows

version: "3.7"

services:
  app:
    image: cmbapp
    volumes:
        - /C/prjs/node/docker:/usr/src
    environment:
        MONGO_URL: "mongodb://db:27017/test"
    depends_on:
        - db
    ports:
        - "3000:3000"

  db:
    image: mongo

Tanto poder, ahhhh!

Mucho mas sencillo, que herramienta tan util.

Entonces al usar docker-compose no es necesario definir un archivo Dockerfile? Solo basta con el docker-compose.yml?

Gracias

Wonderful

DEPENDS_ON

Me falla al contruir la app

Pero qué clase de magia negra es esto?

Muy útil!

En ubuntu:

sudo apt install docker-compose

Se le puede importar un env file en la seccion environment del docker-compose?

Genial! a la primera 😃

Docker-compose: permite describir de forma declarativa la arquitectura de nuestra aplicacion

¿Cómo sería la configuración para un contenedor con mysql en cambio de mongo?

Buenisimo!!

todo menos uno me corre, lo de los puertos, quien puede ayudarme con este problema

Excelente. Minimiza el tiempo de la administración. Es importante conocer como funciona internamente Docker, pero esta herramienta ayuda con la gestión de tu entrono.

La principal diferencia entre un servicio y un contenedor, es que un servicios puede tener mas de un contenedor.

Maravilloso 😃

Casi la jodo! no se que hice pero al instalar el docker-compose se me perdió la conexión con el demon y buscando alguna solución se me desconfiguro todo hasta que docker dejó de tener conexión con el demon completamente y no valia nada, ni el docker ps, :c bueno reinstalé todo y ya funcionó, puff casi me chillo.

el Curso va genial 😃

DOCKER COMPOSE facilita mucho el trabajo.
054_Docker_compose_up.jpg

Me siento como programando a un Jarvis! Simplemente espectacular el uso de esta utilidad para tener ambientes de desarrollo en mejor tiempo y con mejor complejidad.

uff esto es super sencillo, aunque valió la pena cada práctica anterior para entender como funciona docker

Dockerfile > descripcion imperativa.

Docker compose:
Es una herramienta que nos permite describir
de forma declarativa la arquitectura de
nuestra app.

version: "3" -> recomendado usar la ultima

services: -> la abstraccion de cada
  => contenedor es un servicio

Diferencia entre contenedor y un sercicio
es que un servicio puede tener mas de un
contendor.

Excelente y poderoso docker-compose muy bueno

Mas poder que el guante de Thanos, tremendooo!!!

El dockerCompose es el equivalente a los pipeline de Jenkins 😃

Con docker-compose funciona la app, sin embargo ya me escucha los cambios
Estoy en windows 10 y para que funcionara el Dockerfile, tuve que agregar estos cambios

CMD ["npx", "nodemon", "--legacy-watch", "index.js"]

Sin embargo docker-compose no toca Dockerfile, alguien sabe como hacer que nodemon reconozca los cambios?

excelente curso, gran profe! todo muy claro.

  • Docker compose, es una manera de escribir de manera declarativa, mientras que los docker file se describen de manera imperativa, paso a paso.
  • En docker compose, hablamos de servicios, el cual puede tener mas de un contenedor.
  • Con depends_on, indicamos en docker compose que para iniciar el servicio declarado, primero se debe de haber iniciado el servicios dependiente.

https://platzi.com/clases/1432-docker/15439-docker-compose-la-herramienta-todo-en-uno/?time=444

En el contenido del docker-compose.yml no esta definido que estos contenedores van a usar una network, esto quiere decir que por cada “services:” se va a crear una docker network para conectar todos los contenedores de ese services? o esto depende del “depends_on”?