Premiers pas avec docker-compose

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 l’attacher à 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 sûr, vous devez installer des rails, des rubis, etc. au préalable.

Ensuite, créez Dockerfile dans votre projet et définissez-y ces données :

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

Prochaine étape - 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 le port 80 (-p 80 ) par un autre.

La section Develop de la configuration database.yml doit être remplacée par :

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

Vous pouvez maintenant créer des images à partir de la commande :

docker-compose build

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

Et commencez tout à partir de:

docker-compose up

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

Fermez la console. Cela fonctionnera.

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

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

Un nouveau conteneur avec application rails sera créé et lancé.

Installation

Si vous exécutez Docker sous OS X ou Windows, docker-compose doit être inclus dans votre installation [Docker pour Windows][1] 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 consulter la [page de documentation][2]

[1] : https://docs.docker.com/docker-for-windows/ “Docker pour Windows” [2] : https://docs.docker.com/compose/overview/

Créer une application simple

Installer Docker Compose

Exécuter la commande dans le service docker-compose

Docker Compose bonjour 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 ait un service hello_world, qui est initialisé à partir de l’image ubuntu:latest et que, lorsqu’il est exécuté, il exécute simplement echo 'Hello world'

Si vous êtes dans le répertoire folder (et qu’il contient ce fichier docker-compose.yml), vous pouvez faire 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 de projet pour préfixer les conteneurs et les réseaux. Pour définir un autre nom de projet, vous pouvez soit appeler docker-compose --project-name NAME {up|down|...} ou fournir un fichier appelé .env à côté de votre docker-compose.yml et écrivez COMPOSE_PROJECT_NAME=nom dedans. Mieux vaut éviter les longs noms de projets avec des tirets (-) car docker compose des bahaves étranges avec ce genre de noms.

Remarque : docker-compose vous permet d’exécuter plusieurs conteneurs Docker sur un seul hôte. Si vous souhaitez exécuter plusieurs conteneurs sur plusieurs nœuds, veuillez vous référer à une solution telle que swarm / kubernetes.