MacOs,Docker sync,Laravel 5.8,邮递员-性能

MacOs,Docker sync,Laravel 5.8,邮递员-性能,laravel,macos,docker,docker-compose,postman,Laravel,Macos,Docker,Docker Compose,Postman,导言 我在Mac上使用Docker。我决定使用Docker sync,因为绑定挂载在Mac上速度很慢。我成功地把整个事情安排好了。之后我看到的情况让我怀疑它是否值得在Mac上使用Docker。我希望这是我的设置或什么的错误 配置 docker-sync.yml version: "2" options: verbose: true syncs: appcode-native-osx-sync: # tip: add -sync and you keep consistent names

导言

我在Mac上使用Docker。我决定使用Docker sync,因为绑定挂载在Mac上速度很慢。我成功地把整个事情安排好了。之后我看到的情况让我怀疑它是否值得在Mac上使用Docker。我希望这是我的设置或什么的错误

配置

docker-sync.yml

version: "2"

options:
  verbose: true
syncs:
  appcode-native-osx-sync: # tip: add -sync and you keep consistent names as a convention
    src: '../'
    # sync_strategy: 'native_osx' # not needed, this is the default now
    sync_excludes: ['vendor', 'node_modules']

docker-compose.yml

version: '3.7'
services:
  webapp:
    build:
      context: ./php/
      dockerfile: Dockerfile
    container_name: webapp
    image: php:7.3-fpm-alpine
    volumes:
      - appcode-native-osx-sync:/srv/app:nocopy
  apache2:
    build:
      network: host
      context: ./apache2/
      dockerfile: Dockerfile
    container_name: apache2
    image: httpd:2.4.39-alpine
    ports:
      - 8080:80
    volumes:
      - appcode-native-osx-sync:/srv/app:nocopy
  mysql:
    container_name: mysql
    image: mysql:latest
    command: mysqld --default-authentication-plugin=mysql_native_password
    ports:
      - 13306:3306
    volumes:
      - mysql:/var/lib/mysql
    environment:
      MYSQL_ROOT_USER: root
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: dbname
      MYSQL_USER: blogger
      MYSQL_PASSWORD: secret

volumes:
  mysql:
    driver: local
  appcode-native-osx-sync:
    external: true

问题(我想)

设置Docker sync应该使其在性能方面更像本机设置/Linux设置

从我的角度来看,我注意到了一些事情,使整个事情变得毫无用处

我们开始吧

没有DOCKER-SYNC

  • 我通过邮递员(缓存控制:无缓存)发出1个请求,需要约6.8秒才能完成。这只是几行文字,没有其他内容。我只是从数据库中得到一篇虚假的短博客文章,然后吐出JSON
  • 如果我立即提出后续请求,则每次请求的时间将降至~1.4s。如果我继续到达终点,它将保持在这个水平
  • 如果在两次请求之间等待几秒钟,则此暂停后的第一次请求将返回到~6.8s 使用DOCKER-SYNC

  • 我通过邮递员(缓存控制:无缓存)发出1个请求,这需要约5.1秒(所以不会更好)才能完成。与上次的数据完全相同
  • 如果我立即提出后续请求,则每个请求的时间将降至~100ms(原文如此!)。如果我继续到达终点,它将保持在这个水平
  • 如果我在两个请求之间等待几秒钟,则此暂停后的第一个请求将返回到~5.1s 问题

  • 你认为这个请求是由Docker、Laravel、邮递员缓存的吗?我确实注意到Symfony 3.4在工作中存在类似的问题,但我不会在工作中维护类似的东西。这是我的个人项目,也是我第一次深入Docker的世界

  • 就像我提到的,我使用Docker sync来提高速度。通常,当我工作时,它看起来是这样的:写几分钟的代码,点击端点,然后重复。在这一点上,我回到了~5.1秒,我必须等待-有没有办法解决第一个请求如此缓慢的问题?也许我误解了Docker sync背后的想法,但我确信它可以帮助我快速完成所有请求

  • 我个人谴责拉威尔。谁能解释一下问题的真正根源是什么

  • 结语

    我确实在我的Mac上安装了Linux,只是为了在Linux上试用它。然而,当涉及到数小时的编码时,很少有东西能让Linux变得不那么吸引人(不管怎样,我还是喜欢Linux!)

    更新日期:2019年8月21日

    我刚刚用Docker在Ubuntu18上做了同样的测试。。。80毫秒!(8.8秒)/(80毫秒)=110-这太可怕了

    更新日期:2019年9月3日


    我昨天做了一些测试-我尝试使用不同的同步策略-
    rsync
    unison
    。这似乎没有任何效果。其他人也有同样的问题吗?也许我们可以一起做

    我相信这是mac+docker的问题,而不是Laravel的问题。我以前从未使用过Docker sync,但看到一些人在他们的撰写文件中使用了缓存卷。它实际上对我没有多大帮助,所以我没有为开发人员登记。我在DevOps方面,所以我将源代码打包到映像中,而不是在mac上以闪电般的速度装载卷。我认为,在Laravel中,使后续请求更快的是opcache,它将编译后的php代码执行后存储在内存中。不幸的是,我没有为您的用例提供解决方案。昨天我花了大约4个小时在上面,我认为这不是Laravel-就像您说的,它必须是Mac上的docker。不管我做什么,它只是不在乎它,只是保持缓慢。我认为关于opcache,你也是对的。没关系,我会再尝试几次,如果什么都没有出现,我会继续使用Ubuntu,直到问题解决为止。这是一个遗憾,尽管Linux是一个很棒的系统,但它也有它的缺点。谢谢你的意见,非常感谢。我相信这是mac+docker而不是Laravel的问题。我以前从未使用过Docker sync,但看到一些人在他们的撰写文件中使用了缓存卷。它实际上对我没有多大帮助,所以我没有为开发人员登记。我在DevOps方面,所以我将源代码打包到映像中,而不是在mac上以闪电般的速度装载卷。我认为,在Laravel中,使后续请求更快的是opcache,它将编译后的php代码执行后存储在内存中。不幸的是,我没有为您的用例提供解决方案。昨天我花了大约4个小时在上面,我认为这不是Laravel-就像您说的,它必须是Mac上的docker。不管我做什么,它只是不在乎它,只是保持缓慢。我认为关于opcache,你也是对的。没关系,我会再尝试几次,如果什么都没有出现,我会继续使用Ubuntu,直到问题解决为止。这是一个遗憾,尽管Linux是一个很棒的系统,但它也有它的缺点。谢谢你的意见,非常感谢。