Joaquin Solís

Docker Mastery notes para Windows parte 3

Docker compose

  • Ayudan a configurar relaciones entre containers

  • Guardan configuraciones en un archivo

Comprendido por cosas separadas pero relacionadas:

  1. el archivo YAML que contiene informacion de los containers, networks y volumes.

  2. el CLI docker-compose

archivo YAML docker-compose.yml

Este archivo maneja sus propias versiones: 1, 2, 2.1, 3, 3.1

Asi se ve un docker-compose de una app con frontend y backend con react, express y mongo.

version: "3.7"
services:
  frontend:
    build: frontend
    ports:
      - 3000:3000
    stdin_open: true
    volumes:
      - ./frontend:/usr/src/app
      - /usr/src/app/node_modules
    container_name: frontend
    restart: always
    networks:
      - react-express
    depends_on:
      - backend

  backend:
    container_name: backend
    restart: always
    build: backend
    volumes:
      - ./backend:/usr/src/app
      - /usr/src/app/node_modules
    depends_on:
      - mongo
    networks:
      - express-mongo
      - react-express
    expose: 
      - 3000
  mongo:
    container_name: mongo
    restart: always
    image: mongo:4.2.0
    volumes:
      - ./data:/data/db
    networks:
      - express-mongo
    expose:
      - 27017
networks:
  react-express:
  express-mongo:

Se pueden ver mas ejemplos de archivos docker-compose en este repo de docker

Se puede ver mas info de los comandos con docker-compose --help

Docker-compose CLI

Ya viene al instalar docker en windows

No se recomienda para produccion pero si para etapas de desarrollo

Los comandos mas comunes son

docker-compose up
docker-compose down

Ejemplo 1

Crear un archivo compose con

  • la imagen drupal a treves de la imagen de postgres
  • el puerto 8080 para usar el localhost:8080
  • setear la contraseña con POSTGRES_PASSWORD

pasos:

  1. crear archivo docker-compose.yml con VSCode

  2. Escribir en el archivo

version: '2'

services:
   drupal:
       image: 'drupal'
       ports:
            -"8080:80"
       volumes:
           - drupal-modules:/var/www/html/modules
           - drupal-profiles:/var/www/html/profiles
           - drupal-sites:/var/www/html/sites
           - drupal-themes:/var/www/html/themes
 postgres:
     image: postgres
     enviroment:
                  - POSTGRES_PASSWORD=mypasswd
 volumes:
    drupal-modules:
    drupal-profiles:
    drupal-sites:
    drupal-themes:
  1. correr en la consola
docker-compose up

para este caso con drupal hay que hacer cambios en la configuracion de drupal, ya que toma como database a localhost cuando deberia tomar a postgres.

  1. detener el container
    
docker-compose down

el volume seguira corriendo tambien, para detenerlo hay agregar el -v al final