我可以将Xdebug存储在单独的docker容器中吗?

Fitzima

我是Docker和docker-compose的新手。我已经知道最好将每个过程放在单独的容器中。所以我把诸如Composer,npm,artisan,Redis,pma之类的东西放在单独的容器中。

现在,我正在尝试集成Xdebug,并在PhpStorm中使用它。无法理解如何分开放置。我真的应该吗?我了解这种范例对吗?

我的docker-compose.xml:

version: '3'

networks:
  laravel:

services:
  nginx:
    image: nginx:stable-alpine
    container_name: nginx
    ports:
      - "8088:80"
    volumes:
      - ../src:/var/www/html
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php
      - mysql
    networks:
      - laravel

  mysql:
    image: mysql:5.7.22
    container_name: mysql
    restart: unless-stopped
    tty: true
    ports:
      - "3306:3306"
    volumes:
      - ./mysql:/var/lib/mysql
    environment:
      MYSQL_DATABASE: test
      MYSQL_USER: root
      MYSQL_PASSWORD: secret
      MYSQL_ROOT_PASSWORD: secret
      SERVICE_TAGS: dev
      SERVICE_NAME: mysql
    networks:
      - laravel

  php:
    build:
      context: ./php
      dockerfile: Dockerfile
    container_name: php
    volumes:
      - ../src:/var/www/html
    ports:
      - "9000:9000"
    networks:
      - laravel

  pma:
    image: phpmyadmin/phpmyadmin
    container_name: pma
    environment:
      PMA_HOST: mysql
      PMA_PORT: "3306"
    ports:
      - "7760:80"
    links:
      - mysql
    networks:
      - laravel

  redis:
    image: redis:5-alpine
    container_name: redis
    command: redis-server --bind 0.0.0.0 --requirepass secret@123
    networks:
      - laravel
    ports:
      - "6379:6379"
    restart: unless-stopped
    volumes:
      - ./redis:/data

  queues:
    build:
      context: ./queues
      dockerfile: Dockerfile
    container_name: queues
    command: php /var/www/html/artisan queue:listen
    depends_on:
      - nginx
      - redis
    volumes:
      - ../src:/var/www/html
    networks:
      - laravel

  laravel-echo-server:
    image: oanhnn/laravel-echo-server
    container_name: laravel-echo-server
    depends_on:
      - redis
    environment:
      LARAVEL_ECHO_SERVER_AUTH_HOST: http://localhost:8088
      LARAVEL_ECHO_SERVER_DEBUG: 'true'
      LARAVEL_ECHO_SERVER_DB: redis
      REDIS_HOST: redis
      REDIS_PORT: 6379
      REDIS_PREFIX: laravel_
      REDIS_PASSWORD: secret@123
      REDIS_DB: 0
    networks:
      - laravel
    ports:
      - 6001:6001
    restart: unless-stopped

  artisan:
    build:
      context: ./php
      dockerfile: Dockerfile
    container_name: artisan
    volumes:
      - ../src:/var/www/html
    depends_on:
      - php
      - mysql
    working_dir: /var/www/html
    entrypoint: ['php', '/var/www/html/artisan']
    networks:
      - laravel

  xdebug:
    build:
      context: ./xDebug
      dockerfile: Dockerfile
    container_name: xdebug
    depends_on:
      - php
    working_dir: /var/www/html
    networks:
      - laravel

  composer:
    image: composer:latest
    container_name: composer
    volumes:
      - ../src:/var/www/html
    working_dir: /var/www/html
    networks:
      - laravel

  npm:
    image: node:latest
    container_name: npm
    volumes:
      - ../src:/var/www/html
    working_dir: /var/www/html
    entrypoint: ['npm']
    networks:
      - laravel

  git:
    image: alpine/git
    container_name: git
    volumes:
      - ../src:/var/www/html
    working_dir: /var/www/html
    networks:
      - laravel
川本古斯塔沃

不,您应该在要调试的容器(包括Laravel或任何其他PHP应用程序)中包含Xdebug。

实际上,您不应该将应用程序中每个组件的每个部分分解为不同的容器,而应根据应用程序内部关注点分离的概念(通常基于它们在应用程序体系结构中的作用)来设置容器。

示例(每个项目符号是一个容器):

  • 具有用于API的HTTP路由的应用程序服务器
  • 工匠尾巴
  • 带有Angular / React / etc的静态内容服务器(这也可以与第一个捆绑在一起)
  • Redis数据库
  • MySQL数据库

并分别安装运行/调试/配置应用程序所需的所有内容(即mysql + mysql-cli或PHP + composer + Xdebug)。

您可以在此答案中阅读更多内容

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我可以从远程容器存储库中“补水” Docker构建缓存吗?

我可以将Docker容器部署到Azure Webapp吗

我们可以将容器部署到docker swarm中的特定节点中吗

我可以将现有的Docker容器导出到Dockerfile中吗?

我可以在Docker容器中运行Xcode吗?

我可以在Docker容器环境中运行主机命令吗?

我可以在Docker容器中运行多个程序吗?

我可以在Linux Docker容器中运行JetBrains dotCover吗?

我可以在Docker容器中获取IP地址吗?

我可以暂停/恢复 docker 容器吗?

我可以将Outlook的PST文件存储在Dropbox中吗

我可以将 jQuery 事件存储在变量中吗?

Kubernetes - 我可以将 PodID 传递给我的 Docker 容器吗?

我可以重新启动docker ps -a输出中列出的Docker容器吗?

我可以从Google Cloud Storage项目存储桶中删除容器映像吗?

我可以将包含Jenkins设置的Docker容器移动到其他服务器吗?

Android,我可以将AsyncTask放在单独的类中并进行回调吗?

我可以将所有导入声明隐藏到单独的文件中吗?

我可以将模型的不同字段中的数据作为单独的HTML元素返回吗?(Django 2.1)

我可以将表达式放在单独的模块中以更新表格吗?

我可以在Mac的Docker容器中运行Visual Studio和.Net Framework吗?

我可以运行在Docker容器中的IIS上托管的dotnet应用吗?

在Azure上,我可以在ASE中运行Windows Docker容器吗?

我可以在Microsoft Iot Edge中运行任何docker容器吗?

我可以在容器外部的docker compose中运行cmd命令吗?

我可以将12.04发行版安装在16.04发行版托管的Docker容器中吗

我可以将Jenkins配置存储在项目存储库中(例如Travis CI)吗?

我可以将Docker存储库/映像放在GitHub / Bitbucket上吗?

我可以通过172.17.42.1从Docker容器连接到主机吗?