Une config Docker performante sous OSX

23 mars 2017

Docker sous mac c'est bien mais avec des performances décentes c'est mieux.

Docker Sync

En attendant que le problème de performance des accès disques soit réglé nativement la meilleure solution est d'utiliser Docker Sync. Pour l'installer docker-sync avec Homebrew.

$ gem install docker-sync
$ brew install unison

La configuration docker-compose

Je me base sur la configuration Docker que j'ai présenté dans l'article « [Docker pour les développeurs PHP]({{< relref "docker-pour-les-developpeurs-php.md">}}) »

Donc vous avez un fichier docker-compose.yml qui ressemble à ça :

version:  '2'

services:
    php:
        image: lephare/php:7.0
        networks:
            - default
            - database
            - mail
        volumes:
            - .:/var/www/symfony

    web:
        image: lephare/apache:2.4
        networks:
            - default
            - web
        volumes_from:
            - php
        volumes:
            - ./var/logs/apache:/var/log/apache2
        environment:
            VIRTUAL_HOST: example.docker
            CERT_NAME: generic
            HTTPS_METHOD: noredirect

networks:
    web:
        external:
            name: dev_web
    database:
        external:
            name: dev_database
    mail:
        external:
            name: dev_mail

Nous n'allons pas modifier cette configuration puisqu'elle fonctionne très bien sur les machines Linux.

Vous aller créer un fichier docker-compose.mac.yml.

version: '2'

services:
    php:
        volumes:
            - code-sync-<nom_projet>:/var/www/symfony

volumes:
    code-sync-<nom_projet>:
        external: true

L'idée principal ici c'est de modifier le volume qui contient le code du projet. Plutôt que de faire un montage direct nous utilisons un volume nommé qui sera utilisé par docker-sync.

Attention a bien remplacé <nom_projet> par un nom unique sur votre machine. Sinon vous allez avoir des suprises et du mélange de code !

La configuration docker-sync

Créez un fichier docker-sync.yml comme il suit

version: '2'

options:
 compose-dev-file-path: 'docker-compose.mac.yml'

syncs:
 code-sync-<nom_projet>:
   src: '.'
   dest: '/var/www/symfony'
   sync_host_ip: '127.0.0.1'
   sync_host_port: 10871
   sync_excludes: ['Gemfile.lock', 'Gemfile', 'config.rb', '.sass-cache/', 'sass/', 'sass-cache/', 'composer.json' , 'bower.json', 'package.json', 'Gruntfile*', 'bower_components/', 'node_modules/', '.gitignore', '.git/', '*.coffee', '*.scss', '*.sass']
   sync_excludes_type: 'Name'
   sync_userid: '1000'

Ici aussi il faut modifier <nom_projet> avec le même nom que dans le docker compose.

Lancement du projet

Maintenant vous êtes près pour démarrer votre projet avec la commande suivante :

$ docker-sync-stack start

Et voilà ! Docker-sync annonce une vitesse de chargement 60x plus rapide donc vous devriez voir la différence dès le premier chargement.

Et après

Je vous invite à faire un tour sur le wiki du projet pour voir toutes ses possibilités. Il y a un mode daemon que je n'ai pas encore essayé mais qui peut être pratique.

Aussi si vous voulez suivre de près les performances native de Docker for mac je vous conseil de vous abonner sur l'issue Github qui tente de régler le problème.

Bavardage

Soyez le premier à commenter et venez sur Github !