Recherche…


Remarques

Compose est un outil permettant de définir et d'exécuter des applications Docker multi-conteneurs. Avec Compose, vous utilisez un fichier Compose pour configurer les services de votre application. Ensuite, en utilisant une seule commande, vous créez et démarrez tous les services de votre configuration. Pour en savoir plus sur toutes les fonctionnalités de Compose, consultez la liste des fonctionnalités.

Utiliser Compose est fondamentalement un processus en trois étapes.

  1. Définissez l'environnement de votre application avec un Dockerfile afin qu'il puisse être reproduit n'importe où.
  2. Définissez les services qui composent votre application dans docker-compose.yml pour qu'ils puissent être exécutés ensemble dans un environnement isolé.
  3. Enfin, exécutez docker-compose up et Compose démarrera et exécutera l'intégralité de votre application.

Installation

Si vous exécutez Docker sous OS X ou Windows, docker-compose doit être inclus dans votre installation Docker for Windows ou Docker Toolbox.

Sous Linux, vous pouvez obtenir les derniers binaires directement depuis la page de publication de GitHub: https://github.com/docker/compose/releases

Vous pouvez installer la version spécifique avec les commandes suivantes:

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

Pour plus d'informations, veuillez vous référer à la page de documentation

Créer une application simple

Cet exemple provient du document officiel. Supposons que vous ayez une application python utilisant redis comme backend. Après avoir écrit Dockerfile , créez un fichier docker-compose.yml comme ceci:

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

Ensuite, lancez docker-compose up pour configurer l'application entière, y compris: python app et redis.


  • version: '2' est la version de la syntaxe du fichier docker-compose
  • services: est une section décrivant les services à exécuter
  • web: et redis: sont les noms des services à démarrer, leur contenu décrit comment docker doit démarrer les conteneurs pour ces services
  • depends_on implique une dépendance de web à redis et docker-compose commence donc le conteneur redis puis le conteneur web. Néanmoins, docker-compose n'attend pas que le conteneur redis soit prêt avant de démarrer le conteneur web . Pour ce faire, vous devez utiliser un script qui retarde le démarrage du serveur d'applications ou autre jusqu'à ce que le conteneur redis puisse exécuter des requêtes.

Une section sur les volumes et les réseaux peut également être ajoutée. L'utilisation de la section des volumes permet d'obtenir un volume déconnecté pouvant fonctionner indépendamment de la section des services de composition de docker. La section des réseaux a un résultat similaire.

La section des services redis devrait être ajustée comme suit:

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

Ensuite, ajoutez les sections suivantes au bas du fichier docker compose la version 2.

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

redis-data fournit une étiquette accessible de la section des services. driver:local définit le volume sur le système de fichiers local.

back-tier définit le libellé de la section des réseaux pour qu'il soit accessible dans la section des services en tant que pont.

Exécuter la commande dans le service docker-compose

docker-compose run service-name command

Si, par exemple, vous souhaitez exécuter rake db:create dans votre service web , vous devez utiliser la commande suivante:

docker-compose run web rake db:create

Installer Docker Compose

  1. Installez Docker Engine .

Si vous obtenez une erreur de Permission denied , exécutez sudo -i avant les deux commandes ci-dessous, puis quittez.

  1. Tirez Docker Compose en /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

Vous pouvez modifier la version 1.7.1 pour correspondre à votre version souhaitée. Essayez la version de https://github.com/docker/compose/releases

  1. Appliquez des autorisations exécutables au binaire.
chmod +x /usr/local/bin/docker-compose
  1. Testez l'installation.
docker-compose --version

Docker-compose attendu version 1.7.1, build 0a9ab35

Docker Compose Bonjour tout le monde

Un docker-compose.yml très basique ressemble à ceci:

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

Ce fichier fait en sorte qu'il y a un service hello_world , qui est initialisé à partir de la ubuntu:latest image d' ubuntu:latest et que, lorsqu'il est exécuté, il ne fait qu'exécuter echo 'Hello world'

Si vous êtes dans le folder (et qu’il contient ce fichier docker-compose.yml ), vous pouvez docker-compose up et vous devriez voir

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

Cela a créé le conteneur à partir de l'image ubuntu et a exécuté la commande spécifiée sur le docker-compose.yml

Docker-Compose utilise le nom du dossier comme nom du projet pour préfixer les conteneurs et les réseaux. Pour définir un autre nom de projet, vous pouvez appeler docker-compose --project-name NAME {up|down|...} ou vous ajoutez un fichier appelé .env côté de votre docker-compose.yml et écrivez COMPOSE_PROJECT_NAME=name dans il. Mieux vaut éviter les noms de projets longs avec des tirets (-) car docker compose des formes étranges avec ce type de noms.

Remarque: docker-compose vous permet d'exécuter plusieurs conteneurs de docker sur un seul hôte. Si vous souhaitez exécuter plusieurs conteneurs sur plusieurs nœuds, reportez-vous à la solution telle que swarm / kubernetes.

Ruby on Rails avec docker-compose

Si vous souhaitez utiliser l'application docker for rails et utiliser la base de données, vous devez savoir que toutes les données du conteneur docker seront détruites (sauf si vous configurez le conteneur spécifiquement pour conserver les données). Parfois, vous devez créer un conteneur docker avec une application et le joindre à un ancien conteneur avec une base de données.

Comme exemple d'application de rails, j'ai utilisé une application simple. Vous pouvez le créer à partir de la commande:

rails new compose-app --database=postgresql

Bien entendu, vous devez préalablement installer des rails, des rubis, etc.

Ensuite, créez Dockerfile dans votre projet et définissez-lui les données suivantes:

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

Etape suivante - créez docker-compose.yml avec les données:

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

Vous pouvez remplacer 80 ports (-p 80) par un autre.

La section Développement de database.yml doit être modifiée pour:

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

Maintenant, vous pouvez créer des images à partir de la commande:

docker-compose build

(Exécuter ceci dans le répertoire du projet)

Et tout commencer à partir de:

docker-compose up

Si tout est fait correctement, vous pourrez voir les journaux des rails dans la console.

Fermez la console. Ça va marcher.

Si vous souhaitez supprimer uniquement le conteneur avec l'application rails sans la base de données, vous devez exécuter le fichier dans le répertoire du projet:

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

Une nouvelle application contenant des rails sera créée et lancée.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow