21
votes

Docker dans MacOs est très lent

J'ai ce docker-compose.yml:

version: "3.1"
services:

    memcached:
      image: memcached:alpine
      container_name: universal-memcached2

    redis:
      image: redis:alpine
      container_name: universal-redis2

    mariadb:
      image: mariadb:10.4
      container_name: universal-mariadb2
      working_dir: /application
      volumes:
        - .:/application
        - "../data/db:/var/lib/mysql" # skasowac
      environment:
        - MYSQL_ROOT_PASSWORD=Haslo
        - MYSQL_DATABASE=sample
        - MYSQL_USER=user
        - MYSQL_PASSWORD=Haslo
      ports:
        - "8083:3306"


    webserver:
      image: nginx:alpine
      container_name: universal-webserver2
      working_dir: /application
      volumes:
          - .:/application
          - ./phpdocker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      ports:
       - "8080:80"

    php-fpm:
      build: phpdocker/php-fpm
      container_name: universal-php-fpm2
      working_dir: /application
      volumes:
        - .:/application
        - ./phpdocker/php-fpm/php-ini-overrides.ini:/etc/php/7.3/fpm/conf.d/99-overrides.ini

    volumes:
        generated:
        var:
        static:

    phpmyadmin:
      image: phpmyadmin/phpmyadmin
      links:
        - mariadb
      environment:
        PMA_HOST: mariadb
        PMA_PORT: 3306
      ports:
        - '8081:80'

Quand j'exécute mon dernier projet dans symfony 4 dessus, cela fonctionne très lentement ... :(

J'ai de nouveaux MacO et Docker Desktop. J'apprends actuellement le framework Symfony et Laravel, mais c'est très lent pour Docker. Il n'y travaille même pas.

Comment puis-je le réparer?


7 commentaires

Il existe une section à ce sujet dans la documentation de Docker Desktop pour Mac . IME, ces problèmes sont moins importants si vous COPY votre application construite et testée dans une image, mais c'est un problème beaucoup plus important avec un volumes: monter en liaison toute la source de votre application comme vous l'avez ici.


Pouvez-vous essayer d'augmenter la mémoire allouée à Docker? C'est dans Préférences -> Avancé. Faites un clic droit sur l'icône de la baleine dans la barre d'outils pour ouvrir les préférences.


J'ai en préférence CPU: 4, Mémoire: 8 Go, Swap: 2,5 Go. Mon Mac a: i7 / 16GB Ram / 512SSD


oui, j'ai besoin de Docker pour apprendre, pas pour télécharger une application prête et testée


0 Pourriez-vous partager plus de détails sur la partie qui est vraiment lente? Je veux dire que vous pouvez vérifier si c'est le code lui-même qui a un problème ou peut-être que la base de données ou peut-être le conteneur docker lui-même essaie d'allouer plus de mémoire. une autre astuce consiste à vous connecter à votre conteneur et à vérifier l'utilisation de la mémoire, l'utilisation du processeur, ... etc.


Jetez un œil à ma réponse sur ce post. stackoverflow.com/questions/31324922/… qui pourrait aider.


Est-ce que cela répond à votre question? Docker mac symfony 3 très lent


5 Réponses :


15
votes

En fait, Docker a besoin d'un noyau Linux simple pour fonctionner. Malheureusement, Mac OS et Windows ne peuvent pas fournir cela. Par conséquent, il existe un client sur Mac OS pour exécuter Docker. En plus de cela, il existe une couche d'abstraction entre le noyau Mac OS et les applications (conteneurs Docker) et les systèmes de fichiers ne sont pas les mêmes. Pour cette raison, Docker s'exécute lentement sur Mac OS. Vous ne pouvez pas exécuter Docker sur Mac OS comme sur Linux.

Si j'ai besoin de donner quelques exemples de cas d'utilisation réels. J'ai la même machine. Donc, j'utilise Symfony 4 sur Docker v18 sur Mac OS Mojave. C'est mon temps d'exécution total Symfony sur Docker. ( Évidemment, cela dépend de vos requêtes frontales et de base de données, mais j'essaie de vous éclairer pour la logique principale. )

  • premier rendu 12000 ms
  • avec cache Symfony: 344 ms
  • avec cache Docker (: propriété mise en cache de Docker pour les volumes): 195 ms

Tant que j'utilise Symfony sans Docker, ce qui suit est mon temps d'exécution total.

  • sans Docker, avec cache Symfony: 82 ms

Alors que nous pourrions faire quelques améliorations pour obtenir un meilleur espace de travail. Par exemple, vous pouvez utiliser des volumes comme celui-ci,

volumes:
        - .:/application:cached


0 commentaires

5
votes

Une option serait d'utiliser http://docker-sync.io/ Mais vous n'obtiendrez pas les mêmes performances que vous le feriez sur une machine Linux.


0 commentaires

9
votes

Comme mentionné dans d'autres réponses, le problème se résume à la façon dont Docker interagit avec le système de fichiers sous OSX.

J'ai trouvé un excellent article sur la façon de rendre les choses beaucoup plus rapides sur OSX:

https://vivait.co.uk/labs/docker-for-mac-performance-using-nfs

D'après l'article, la vraie solution est de changer le système de fichiers pour utiliser NFS, mais comme je ne sais rien de Docker (il a été configuré pour moi au travail), j'ai choisi d'utiliser une option disponible dans les nouvelles versions de Docker

J'ai ajouté :delegated à toutes les options sous volumes dans docker-compose.yml . Après avoir redémarré mes conteneurs, chacun était presque deux fois plus rapide qu'avant. Pas aussi rapide que natif, mais assez rapide.

Exemple d'article:

app:
    build:
        context: .
        dockerfile: ./docker/app/Dockerfile
    working_dir: /app
    user: "www-data"
    volumes:
        - ./:/app:delegated
        - ./:/another_folder:delegated

L'exemple NFS est assez long et nécessite essentiellement de copier la moitié de l'article, je ne l'ajouterai donc pas, mais ceci :delegated solution :delegated est un bon point de départ.


1 commentaires

Cela ne semblait pas fonctionner pour moi. Voir cette question



0
votes

Je recommande d'utiliser Parallels (la meilleure virtualisation pour macOS). Ensuite:

  1. Installer Linux
  2. Installer le serveur ssh
  3. Installer docker

Si vous utilisez VSCode, vous pouvez installer l'extension SSH et elle est suffisamment rapide pour l'édition de fichiers. Vous pouvez également accéder à votre site Web sur macOS via l'adresse IP de la machine virtuelle.


0 commentaires

0
votes

C'est savoir. Problème avec docker et le Mac ... ce ne sont pas les meilleurs amis, mais ils peuvent jouer les uns avec les autres.

Ajouter :cached en :cached sur les volumes et la lenteur sera gérable.


0 commentaires