docker-composeEmpezando con docker-compose


Observaciones

Compose es una herramienta para definir y ejecutar aplicaciones Docker de múltiples contenedores. Con Compose, utiliza un archivo Compose para configurar los servicios de su aplicación. Luego, utilizando un solo comando, creará e iniciará todos los servicios desde su configuración. Para obtener más información sobre todas las funciones de Compose, consulte la lista de funciones.

Usar Compose es básicamente un proceso de tres pasos.

  1. Defina el entorno de su aplicación con un Dockerfile para que pueda reproducirse en cualquier lugar.
  2. Defina los servicios que conforman su aplicación en docker-compose.yml para que puedan ejecutarse juntos en un entorno aislado.
  3. Por último, ejecute docker-compose up y Compose se iniciará y ejecutará toda la aplicación.

Crear una aplicación sencilla.

Este ejemplo proviene del documento oficial. Supongamos que tienes una aplicación python usando redis como backend. Después de escribir Dockerfile , crea un archivo docker-compose.yml como este:

version: '2'
services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - .:/code
    depends_on:
     - redis
  redis:
    image: redis
 

Luego, ejecute docker-compose up y la configuración completa de la aplicación incluye: aplicación de Python y redis.


  • version: '2' es la versión de la sintaxis de archivos de la ventana acoplable
  • services: es una sección que describe los servicios a ejecutar.
  • web: y redis: son los nombres de los servicios para comenzar, sus contenidos describen cómo la ventana acoplable debe iniciar los contenedores para esos servicios
  • depends_on implica una dependencia de web para redis y, por lo tanto, docker-compose primero inicia el contenedor redis y luego el contenedor web. Sin embargo, docker-compose no espera hasta que el contenedor redis esté listo antes de iniciar el contenedor web . Para lograr esto, debe usar un script que demore el inicio del servidor de aplicaciones o lo que sea hasta que el contenedor redis pueda realizar solicitudes.

También se puede agregar una sección de volúmenes y redes. El uso de la sección de volúmenes permite un volumen desconectado que puede vivir independientemente de la sección de servicios de composición de la ventana acoplable. La sección de redes tiene un resultado similar.

La sección redis de servicios debería ajustarse así:

redis:
  image: redis
  volumes:
    - redis-data:/code
  networks:
    -back-tier 
 

A continuación, agregue las siguientes secciones a la parte inferior de la ventana acoplable compose el archivo de la versión 2.

volumes:
  # Named volume
  redis-data: 
    driver: local
networks:
  back-tier:
    driver: bridge
 

redis-data proporciona una etiqueta accesible desde la sección de servicios. driver:local configura el volumen en el sistema de archivos local.

back-tier establece que la etiqueta de la sección de redes sea accesible en la sección de servicios como puente.

Docker componer hola mundo

Un docker-compose.yml muy básico tiene este aspecto:

version: '2'
services:
  hello_world:
    image: ubuntu
    command: [/bin/echo, 'Hello world']
 

Este archivo lo está haciendo para que exista un servicio hello_world , que se inicializa desde ubuntu:latest imagen y que, cuando se ejecuta, solo ejecuta echo 'Hello world'

Si está en el directorio de la folder (y contiene este archivo docker-compose.yml ), puede hacer la función docker-compose up y debería ver

Creating folder_hello_world_1
Attaching to folder_hello_world_1
hello_world_1 | Hello world
folder_hello_world_1 exited with code 0
 

Esto creó el contenedor desde la imagen de ubuntu y ejecutó el comando que se especificó en el docker-compose.yml

Docker-Compose usa el nombre de la carpeta como el nombre del proyecto para prefijar contenedores y redes. Para establecer otro nombre de proyecto, puede llamar a docker-compose --project-name NAME {up|down|...} o colocar un archivo llamado .env junto a su docker-compose.yml y escribir COMPOSE_PROJECT_NAME=name in eso. Es mejor evitar los nombres largos de proyectos con guiones (-), ya que la ventana acoplable compone bahaves extraños con este tipo de nombres.

Nota: docker-compose le permite ejecutar múltiples contenedores de ventana acoplable en un solo host. Si desea ejecutar varios contenedores en más de un nodo, consulte una solución como swarm / kubernetes.

Instalar Docker Componer

  1. Instalar el motor Docker .

Si obtiene un error de Permission denied , ejecute sudo -i antes de los dos comandos a continuación, luego salga.

  1. Tire de Docker Compose a /usr/local/bin/docker-compose .
curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
 

Puede cambiar la versión 1.7.1 para que coincida con su versión deseada. Intente obtener la versión de https://github.com/docker/compose/releases

  1. Aplicar permisos ejecutables al binario.
chmod +x /usr/local/bin/docker-compose
 
  1. Probar la instalación.
docker-compose --version
 

Versión de docker-compose esperada 1.7.1, compilación 0a9ab35

Instalación

Si está ejecutando Docker en OS X o Windows, Docker-compose debe incluirse en su instalación de Docker para Windows o Docker Toolbox.

En Linux, puede obtener los últimos binarios directamente desde la página de lanzamiento de GitHub: https://github.com/docker/compose/releases

Puede instalar la versión específica con los siguientes comandos:

curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
 

Para más información consulte la página de documentación.

Ruby on Rails con docker-compose

Si desea utilizar la aplicación docker for rails y la base de datos, debe saber que todos los datos del contenedor de la ventana acoplable se destruirán (a menos que configure el contenedor específicamente para guardar datos). A veces, debe crear un contenedor de la ventana acoplable con una aplicación y adjúntela a un contenedor antiguo con una base de datos.

Como ejemplo de aplicación de rieles, utilicé una aplicación simple. Puedes crearlo desde el comando:

rails new compose-app --database=postgresql
 

Por supuesto, necesita instalar rieles, rubí, etc. de antemano.

Luego, cree Dockerfile en su proyecto y establezca estos datos en él:

FROM ruby:2.3.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /compose-app
WORKDIR /compose-app
ADD Gemfile /compose-app/Gemfile
ADD Gemfile.lock /compose-app/Gemfile.lock
RUN bundle install
ADD . /compose-app
 

Siguiente paso: crear docker-compose.yml con los datos:

version: '2'
services:
  db:
    image: postgres
  web:
    build: .
    command: bundle exec rails s -e development -p 80 -b '0.0.0.0'
    volumes:
      - .:/compose-app
    ports:
      - "80:80"
    depends_on:
      - db
 

Puede reemplazar el puerto 80 (-p 80) con otro.

La sección de desarrollo de la configuración de database.yml se debe cambiar a:

development: &default
  adapter: postgresql
  encoding: unicode
  database: postgres
  pool: 5
  username: postgres
  password:
  host: db
 

Ahora puedes construir imágenes desde el comando:

docker-compose build
 

(Ejecutar esto en el directorio del proyecto)

Y empieza todo desde

docker-compose up
 

Si todo se hace correctamente, podrá ver los registros de los rieles en la consola.

Cerrar la consola. Va a estar funcionando

Si desea eliminar solo el contenedor con la aplicación de rieles sin la base de datos, debe ejecutar en el directorio del proyecto:

docker-compose stop web
docker-compose build web
docker-compose up -d --no-deps web
 

Se creará y lanzará un nuevo contenedor con la aplicación de rieles.

Ejecutar comando en el servicio de composición de ventana acoplable

docker-compose run service-name command

Si, por ejemplo, quisiera ejecutar rake db:create en su servicio web , usaría el siguiente comando:

docker-compose run web rake db:create