Почему docker syn c файлы с папкой карт очень медленные? (Ubuntu) - PullRequest
0 голосов
/ 09 апреля 2020

На моем локальном компьютере (Ubuntu 18.04, 8 ГБ ОЗУ, i5, HDD) у меня есть два docker -композитных файла с моим laravel проектом

docker -compose.yml

version: '3.7'

networks:
  backend-network:
    driver: bridge
  frontend-network:
    driver: bridge

services:
  &app-service app: &app-service-template
    container_name: k4fntr_app
    build:
      context: ./docker/php-fpm
      args:
        UID: ${UID?Use your user ID}
        GID: ${GID?Use your group ID}
        USER: ${USER?Use your user name}
    user: "${UID}:${GID}"
    hostname: *app-service
    volumes:
      - /etc/passwd/:/etc/passwd:ro
      - /etc/group/:/etc/group:ro
      - ./:/var/www/k4fntr
    environment:
      APP_ENV: "${APP_ENV}"
      CONTAINER_ROLE: app
      FPM_PORT: &php-fpm-port 9000
      FPM_USER: "${UID:-1000}"
      FPM_GROUP: "${GID:-1000}"
    networks:
      - backend-network

  &queue-service queue:
    <<: *app-service-template
    container_name: k4fntr_queue
    restart: always
    hostname: *queue-service
    depends_on:
      - app
    environment:
      CONTAINER_ROLE: queue

  &schedule-service schedule:
    <<: *app-service-template
    container_name: k4fntr_schedule
    restart: always
    hostname: *schedule-service
    depends_on:
      - app
    environment:
      CONTAINER_ROLE: scheduler

  &sportlevel-listener sportlevel_listener:
    <<: *app-service-template
    container_name: k4fntr_sl_listener
    restart: always
    hostname: *sportlevel-listener
    ports:
      - "${SPORTLEVEL_LISTEN_PORT}:${SPORTLEVEL_LISTEN_PORT}"
    depends_on:
      - app
    environment:
      CONTAINER_ROLE: sl_listener

  &php-fpm-service php-fpm:
    <<: *app-service-template
    container_name: k4fntr_php-fpm
    user: 'root:root'
    restart: always
    hostname: *php-fpm-service
    ports: [*php-fpm-port]
    entrypoint: /fpm-entrypoint.sh
    command: php-fpm --nodaemonize
    networks:
      - backend-network
      - frontend-network

  echo-server:
    container_name: k4fntr_echo
    image: oanhnn/laravel-echo-server
    volumes:
     - ./:/app
    environment:
      GENERATE_CONFIG: "false"
    depends_on:
      - app
    ports:
      - "6001:6001"
    networks:
      - backend-network
      - frontend-network

  redis:
    container_name: k4fntr_redis
    image: redis
    restart: always
    command: redis-server
    volumes:
      - ./docker/redis/config/redis.conf:/usr/local/etc/redis/redis.conf
      - ./docker/redis/redis-data:/data:rw
    ports:
      - "16379:6379"
    networks:
      - backend-network

и docker -compose-dev.yml

version: '3.7'

volumes:
  redis-data:
  pg-data:
  k4fntr_sync:
    external: true

services:
  &app-service app: &app-service-template
    container_name: k4fntr_app
    build:
      context: ./docker/php-fpm
      args:
        UID: ${UID?Use your user ID}
        GID: ${GID?Use your group ID}
        USER: ${USER?Use your user name}
    user: "${UID}:${GID}"
    hostname: *app-service
    volumes:
      - /etc/passwd/:/etc/passwd:ro
      - /etc/group/:/etc/group:ro
      - k4fntr_sync:/var/www/k4fntr:nocopy
    environment:
      APP_ENV: "${APP_ENV}"
      CONTAINER_ROLE: app
      FPM_PORT: &php-fpm-port 9000
      FPM_USER: "${UID:-1000}"
      FPM_GROUP: "${GID:-1000}"
    networks:
      - backend-network

  &php-fpm-service php-fpm:
    <<: *app-service-template
    container_name: k4fntr_php-fpm
    user: 'root:root'
    restart: always
    hostname: *php-fpm-service
    ports: [*php-fpm-port]
    entrypoint: /fpm-entrypoint.sh
    command: php-fpm --nodaemonize -d "opcache.enable=0" -d "display_startup_errors=On" -d "display_errors=On" -d "error_reporting=E_ALL"
    networks:
      - backend-network
      - frontend-network

  mail:
    container_name: k4fntr_mail
    image: mailhog/mailhog
    ports:
      - "1025:1025"
      - "8025:8025"
    networks:
      - backend-network

  nginx:
    container_name: k4fntr_nginx
    image: nginx
    volumes:
      - ./docker/nginx/config/default:/etc/nginx/conf.d
      - k4fntr_sync:/var/www/k4fntr:nocopy
    depends_on:
      - *php-fpm-service
    ports:
      - "${NGINX_LISTEN_PORT}:80"
    networks:
      - frontend-network

  database:
    container_name: k4fntr_database
    build: ./docker/postgres
    restart: always
    environment:
      ENV: ${APP_ENV}
      TESTING_DB: ${DB_DATABASE_TESTING}
      POSTGRES_DB: ${DB_DATABASE}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    ports:
      - "15432:5432"
    volumes:
      - ./docker/postgres/prod/:/prod
      - ./docker/postgres/pg-data:/var/lib/postgresql/data:rw
    networks:
      - backend-network

Проблема заключается в том, что при изменении некоторых файлов в моем проекте мне приходится ждать много времени. От 15 до 40 секунд. Это невозможно для местного развития. Как я могу решить эту проблему?

Я узнал некоторую информацию о похожих проблемах с другими ОС, такими как Ma c или Windows, но не могу найти те же проблемы с Linux.

1 Ответ

0 голосов
/ 09 апреля 2020

Проблема заключалась в том, что я думал, что второй файл (docker -compose-dev.yml) переопределил первый файл. Я имею в виду раздел php -fpm. Если вы посмотрите на docker -compose-dev, вы увидите, что есть команда

command: php-fpm --nodaemonize -d "opcache.enable=0" -d "display_startup_errors=On" -d "display_errors=On" -d "error_reporting=E_ALL"

На самом деле я использовал первый файл (что очень сильно, потому что я использовал команду

docker -compose -f docker -compose-dev.yml -f docker -compose.yml up

), и мой opcache был кэширован. Это было главной причиной, почему мне пришлось ждать так долго

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...