ch.*_*h.E 5 docker docker-compose
我目前正在使用Postgresql作为数据库开发Spring Boot和一个reactJs应用程序。我的Spring和我的reactJs应用程序在两个单独的项目中。我试图使用docker-compose将应用程序进行docker化。因此,在服务器端,我springboot在docker-compose文件中定义了我的postgresql和服务。哪一个
version: '3'
services:
app:
image: app
depends_on:
- mypostgres
ports:
- "9000:8086"
environment:
- DATABASE_HOST=mypostgres
- DATABASE_USER=root
- DATABASE_PASSWORD=root
- DATABASE_NAME=test
- DATABASE_PORT=5432
mypostgres:
image: postgres:9.6-alpine
container_name: mypostgres
ports:
- "5433:5432"
environment:
- POSTGRES_PASSWORD=root
- POSTGRES_USER=root
- POSTGRES_DB=irooldb
volumes:
- ./postgres-data:/var/lib/postgresql/data
Run Code Online (Sandbox Code Playgroud)
对于Client side,我没有使用docker-compose,而是仅添加了一个Dockerfile并在单独的容器中运行客户端应用程序。
我的问题是:
如何将我的客户端容器链接到服务器端容器?
是否应在服务器端项目中的docker-compose文件中定义客户端服务?或者他们分开运行还可以吗?
我应该在位于服务器端项目的 docker-compose 文件中定义客户端服务吗?
这是一种选择,而且可能是最简单、最直接的选择。默认情况下,docker-compose 会为您在 docker-compose.yml 中定义的服务设置一个 docker 网络。由于所有服务都位于同一网络上,因此它们可以通过主机名相互解析,即您的客户端应用程序将到达后端http://app:9000/api/login/,例如使用 docker-compose 服务名称作为主机。
或者他们分开运行可以吗?
如果您愿意,可以单独运行它们。您需要做一些修改以确保前端可以到达后端。两个选择是:
docker network create,将该网络添加到您的 docker-compose 中,并确保在使用docker run该--network选项时将前端容器放在同一个网络中。同样,您可以在 docker-compose.yml 中定义一个新网络,跳过手动创建它,并将前端容器放入该网络中。这些 #1 选项中的任何一个最终都会变得脆弱,因为您需要在运行前端或可能的 docker-compose 堆栈之前确保您的网络存在。无论如何,这是一个选择。
在默认的网络模式桥接模式下,在容器中引用 localhost 不会引用您的主机。例如,curl localhost:9000从您的前端将尝试在端口 9000 上卷曲前端容器。curl localhost:9000从您的应用程序服务应该会成功,因为它正在卷曲自身。
localhost:<port>互相交谈。如果您没有很好的案例将前端保留在 docker-compose.yml 之外,我鼓励您将其添加到那里并完成。这样做会减轻 docker-compose 的很多思考。如果您使用 CI 管道,它的扩展性也会更好,并且更容易移交给其他开发人员,因为它们都在一个整洁的包中。祝你好运!
| 归档时间: |
|
| 查看次数: |
4518 次 |
| 最近记录: |