docker-compose Tutoriel
Démarrer avec docker-compose
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.
- Définissez l'environnement de votre application avec un
Dockerfile
afin qu'il puisse être reproduit n'importe où. - 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é. - 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:
etredis:
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 conteneurredis
puis le conteneur web. Néanmoins,docker-compose
n'attend pas que le conteneurredis
soit prêt avant de démarrer le conteneurweb
. Pour ce faire, vous devez utiliser un script qui retarde le démarrage du serveur d'applications ou autre jusqu'à ce que le conteneurredis
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
Si vous obtenez une erreur de
Permission denied
, exécutezsudo -i
avant les deux commandes ci-dessous, puis quittez.
- 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
- Appliquez des autorisations exécutables au binaire.
chmod +x /usr/local/bin/docker-compose
- 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.