Platzi
Platzi

Suscr铆bete a Expert y aprende de tecnolog铆a al mejor precio anual.

Antes: $249
$209
Currency
Antes: $249
Ahorras: $40
COMIENZA AHORA
Termina en: 9D : 17H : 25M : 56S

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 鈥渟ervices:鈥 se va a crear una docker network para conectar todos los contenedores de ese services? o esto depende del 鈥渄epends_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 鈥渟ervices:鈥 se va a crear una docker network para conectar todos los contenedores de ese services? o esto depende del 鈥渄epends_on鈥?