laravel - 如何让来自不同项目的 docker 容器相互通信
问题描述
我已经开发和对接了两个应用程序 web (react) 和 api (laravel, mysql),它们有单独的代码库和单独的目录。
有人可以帮忙解释一下如何让我的 web 应用程序在使用 docker 的同时与我的 api 对话
更新:最终我想要实现的是让我的前端和后端都在端口 80 上运行,而不必让两个 Web 服务器作为容器运行,这样我的 docker 开发环境就可以像使用 valet 或 mamp 等一样工作。
解决方案
对于开发,您可以使用docker-compose。
主要优势:
- 在 YAML 中配置应用的服务。
- 创建/启动此配置上定义的服务的单个命令。
- Compose 会为您的应用程序创建一个默认网络。每个容器都加入这个默认网络,它们可以互相看到。
我对项目使用以下结构。
projectFolder
|_backend (laravel app)
|_frontend (react app)
|_docker-compose.yml
|_backend.dockerfile
|_frontend.dockerfile
我的 docker-compose.yml
version: "3.3"
services:
frontend:
build:
context: ./
dockerfile: frontend.dockerfile
args:
- NODE_ENV=development
ports:
- "3000:3000"
volumes:
- ./frontend:/opt/app
- ./frontend/package.json:/opt/package.json
environment:
- NODE_ENV=development
backend:
build:
context: ./
dockerfile: backend.dockerfile
working_dir: /var/www/html/actas
volumes:
- ./backend:/var/www/html/actas
environment:
- "DB_PORT=3306"
- "DB_HOST=mysql"
ports:
- "8000:8000"
mysql:
image: mysql:5.6
ports:
- "3306:3306"
volumes:
- dbdata:/var/lib/mysql
environment:
- "MYSQL_DATABASE=homestead"
- "MYSQL_USER=homestead"
- "MYSQL_PASSWORD=secret"
- "MYSQL_ROOT_PASSWORD=secret"
volumes:
dbdata:
应用程序的每个部分都由 docker-compose 文件中的服务定义。例如
- 前端
- 后端
- mysql
Docker-compose 将创建一个默认网络并将每个容器添加到其中。每个容器的主机名将是 yml 文件中定义的服务名称。
例如,后端容器访问名为 mysql 的 mysql服务器。您可以在服务定义本身上看到这一点:
backend:
...
environment:
- "DB_PORT=3306"
- "DB_HOST=mysql" <-- The hostname for the mysql container is the name of the service
有了这个,在反应应用程序中,我可以在 package.json 中设置代理配置,如下所示
"proxy": "http://backend:8000",
最后一件事,正如 David Maze 在评论中提到的那样。将后端添加到您的主机文件中,以便浏览器可以解析该名称。
例如 ubuntu 上的 /etc/hosts
127.0.1.1 backend
推荐阅读
- kubernetes - helm:按顺序删除版本
- tesseract - tesseract 无法读取清晰的单行
- sql - SQL 查询:连接 sql 中的列:Oracle
- java - 从具有 nativeQuery true JPARepository 的 @Query 注释中获取两列
- javascript - 关于承诺的问题
- git - 我们可以在 docker 镜像中包含 git 命令吗?
- neo4j - Neo4J Android 对 Graph DB 的支持
- ios - 无法将 String 类型的值转换为指定类型 NSManagedObjectContext Swift 4
- python - 无法在 Azure 机器学习工作室中打开新的 Python 或 R 笔记本
- javascript - 交易视图绘图