12
docker-compose #docker- compose

docker-compose - RIP Tutorial · 2019-01-18 · build: . ports: - "5000:5000" volumes: - .:/code depends_on: - redis redis: image: redis Ensuite, lancez docker-compose up pour configurer

  • Upload
    others

  • View
    17

  • Download
    0

Embed Size (px)

Citation preview

Page 1: docker-compose - RIP Tutorial · 2019-01-18 · build: . ports: - "5000:5000" volumes: - .:/code depends_on: - redis redis: image: redis Ensuite, lancez docker-compose up pour configurer

docker-compose

#docker-

compose

Page 2: docker-compose - RIP Tutorial · 2019-01-18 · build: . ports: - "5000:5000" volumes: - .:/code depends_on: - redis redis: image: redis Ensuite, lancez docker-compose up pour configurer

Table des matières

À propos 1

Chapitre 1: Démarrer avec docker-compose 2

Remarques 2

Examples 2

Installation 2

Créer une application simple 2

Exécuter la commande dans le service docker-compose 4

Installer Docker Compose 4

Docker Compose Bonjour tout le monde 4

Ruby on Rails avec docker-compose 5

Chapitre 2: Docker compose un exemple multi-conteneur avec un réseau par défaut 7

Remarques 7

Examples 7

Comment créer un environnement LAMP de base avec la mise en réseau par défaut 7

Chapitre 3: Variables d'environnement fichier externe 9

Introduction 9

Examples 9

Via un fichier externe 9

dans le docker-compose lui-même 9

Crédits 10

Page 3: docker-compose - RIP Tutorial · 2019-01-18 · build: . ports: - "5000:5000" volumes: - .:/code depends_on: - redis redis: image: redis Ensuite, lancez docker-compose up pour configurer

À propos

You can share this PDF with anyone you feel could benefit from it, downloaded the latest version from: docker-compose

It is an unofficial and free docker-compose ebook created for educational purposes. All the content is extracted from Stack Overflow Documentation, which is written by many hardworking individuals at Stack Overflow. It is neither affiliated with Stack Overflow nor official docker-compose.

The content is released under Creative Commons BY-SA, and the list of contributors to each chapter are provided in the credits section at the end of this book. Images may be copyright of their respective owners unless otherwise specified. All trademarks and registered trademarks are the property of their respective company owners.

Use the content presented in this book at your own risk; it is not guaranteed to be correct nor accurate, please send your feedback and corrections to [email protected]

https://riptutorial.com/fr/home 1

Page 4: docker-compose - RIP Tutorial · 2019-01-18 · build: . ports: - "5000:5000" volumes: - .:/code depends_on: - redis redis: image: redis Ensuite, lancez docker-compose up pour configurer

Chapitre 1: Démarrer avec docker-compose

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ù.

1.

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é.

2.

Enfin, exécutez docker-compose up et Compose démarrera et exécutera l'intégralité de votre application.

3.

Examples

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:

https://riptutorial.com/fr/home 2

Page 5: docker-compose - RIP Tutorial · 2019-01-18 · build: . ports: - "5000:5000" volumes: - .:/code depends_on: - redis redis: image: redis Ensuite, lancez docker-compose up pour configurer

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.

https://riptutorial.com/fr/home 3

Page 6: docker-compose - RIP Tutorial · 2019-01-18 · build: . ports: - "5000:5000" volumes: - .:/code depends_on: - redis redis: image: redis Ensuite, lancez docker-compose up pour configurer

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

Installez Docker Engine .1.

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

Tirez Docker Compose en /usr/local/bin/docker-compose .2.

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.3.

chmod +x /usr/local/bin/docker-compose

Testez l'installation.4.

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

https://riptutorial.com/fr/home 4

Page 7: docker-compose - RIP Tutorial · 2019-01-18 · build: . ports: - "5000:5000" volumes: - .:/code depends_on: - redis redis: image: redis Ensuite, lancez docker-compose up pour configurer

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: .

https://riptutorial.com/fr/home 5

Page 8: docker-compose - RIP Tutorial · 2019-01-18 · build: . ports: - "5000:5000" volumes: - .:/code depends_on: - redis redis: image: redis Ensuite, lancez docker-compose up pour configurer

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.

Lire Démarrer avec docker-compose en ligne: https://riptutorial.com/fr/docker-compose/topic/1266/demarrer-avec-docker-compose

https://riptutorial.com/fr/home 6

Page 9: docker-compose - RIP Tutorial · 2019-01-18 · build: . ports: - "5000:5000" volumes: - .:/code depends_on: - redis redis: image: redis Ensuite, lancez docker-compose up pour configurer

Chapitre 2: Docker compose un exemple multi-conteneur avec un réseau par défaut

Remarques

Par défaut, Compose configure un réseau unique pour votre application. Chaque conteneur d'un service rejoint le réseau par défaut et est accessible à la fois par d'autres conteneurs sur ce réseau et détectable par ceux-ci à un nom d'hôte identique au nom du conteneur.

Les liens vous permettent de définir des alias supplémentaires par lesquels un service est accessible depuis un autre service. Ils ne sont pas requis pour permettre aux services de communiquer - par défaut, tout service peut accéder à tout autre service au nom de ce service.

https://docs.docker.com/compose/networking/

Examples

Comment créer un environnement LAMP de base avec la mise en réseau par défaut

docker-compose.yml

version: '2' services: php: image: phpmyadmin/phpmyadmin links: - mysql:db depends_on: - mysql mysql: image: k0st/alpine-mariadb volumes: - ./data/mysql:/var/lib/mysql environment: - MYSQL_DATABASE=mydb - MYSQL_USER=myuser - MYSQL_PASSWORD=mypass nginx: image: nginx:stable-alpine ports: - "81:80" volumes: - ./nginx/log:/var/log/nginx - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro depends_on:

https://riptutorial.com/fr/home 7

Page 10: docker-compose - RIP Tutorial · 2019-01-18 · build: . ports: - "5000:5000" volumes: - .:/code depends_on: - redis redis: image: redis Ensuite, lancez docker-compose up pour configurer

- php

nginx / nginx.conf

worker_processes 1; events { worker_connections 1024; } http { sendfile off; server { listen 80; location / { proxy_pass http://php; proxy_set_header Host $host; proxy_redirect off; } } }

Notez que la configuration de nginx est simplifiée, mais que cela devrait fonctionner pour les tests. Mappe au port 81 pour éviter les conflits sur l'hôte - ajustez au besoin.

En ce qui concerne la liaison, vous pouvez voir que si vous exécutez: docker-compose exec mysql ping -c2 nginx ping du conteneur mysql au conteneur nginx, vous réussirez même si il n'y a aucun lien entre ces conteneurs spécifiés. Docker Compose conservera ces liens dans le réseau par défaut pour vous.

Lire Docker compose un exemple multi-conteneur avec un réseau par défaut en ligne: https://riptutorial.com/fr/docker-compose/topic/3226/docker-compose-un-exemple-multi-conteneur-avec-un-reseau-par-defaut

https://riptutorial.com/fr/home 8

Page 11: docker-compose - RIP Tutorial · 2019-01-18 · build: . ports: - "5000:5000" volumes: - .:/code depends_on: - redis redis: image: redis Ensuite, lancez docker-compose up pour configurer

Chapitre 3: Variables d'environnement fichier externe

Introduction

Il existe plusieurs façons d’inclure des variables d’environnement dans l’application Docker. Voici quelques exemples:

Examples

Via un fichier externe

docker-composer.yml

web: ... env_file: - ./filename

nom de fichier

variable=value

dans le docker-compose lui-même

app: ... environment: - var=value

Lire Variables d'environnement fichier externe en ligne: https://riptutorial.com/fr/docker-compose/topic/10598/variables-d-environnement-fichier-externe

https://riptutorial.com/fr/home 9