你好,我有多个项目,有自己的dockerfiles和docker-compose.yml文件。我不太熟悉我将如何设置这些项目之间的网络。因此,他们可以共享相同的数据库,并且项目将能够在另一个数据库上进行对话。有谁有建议吗?
现在,在其中一个项目中,我只是将所有dockerfile放入docker-compose.yml中,并设置此yml文件中所有其他项目所需的所有服务。我不认为这是理想的,并且服务之间存在高级别的耦合。
version: "3"
services:
db:
image: mysql/mysql-server
ports:
- 3306:3306
mongo:
image: mongo
restart: always
rails_app:
build:
context: ${RAILS_APP_PATH}
dockerfile: Dockerfile
volumes:
- ${RAILS_APP_PATH}:/application
ports:
- 4000:4000
depends_on:
- db
- mongo
links:
- db
- mongo
frontend:
build:
context: ${FRONTEND_PATH}
ports:
- ${EXPOSED_PORT}:${EXPOSED_PORT}
depends_on:
- go_services
links:
- go_services
go_services:
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:8080"
depends_on:
- db
- mongo
- rails_app
links:
- db
- mongo
- rails_app发布于 2021-08-12 08:21:17
诀窍是使用外部Docker网络。设置网络,容器可以通过它们的服务名称相互通信。
在主机上设置网络
docker network create my-net第一个合成文件
version: '3.9'
services:
mymongo:
image: mongo:latest
restart: unless-stopped
container_name: mongo
environment:
MONGO_INITDB_DATABASE: mymongo
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: password
volumes:
- ./database:/data/db
ports:
- "27017:27017"
networks:
default:
external: true
name: my-net第二个合成文件
version: '3.9'
services:
ui:
build:
context: ./build
dockerfile: Dockerfile_ui
image: ui
restart: "no"
container_name: ui
ports:
- "8005:3000"
command: ["npm", "start"]
networks:
default:
external: true
name: my-net发布于 2021-08-12 11:27:50
在以下情况下,您可以在没有任何特殊合成设置的情况下执行此操作:
进行通信
如果你正在考虑扩大这个项目的规模,这种方法看起来很有吸引力。即使您在不同的主机上运行每个撰写文件,它也可以正常工作,并且它可以很好地转换到Kubernetes等集群环境中。
继续将您的撰写文件拆分成几个独立的文件:
# rails/docker-compose.yml
version: '3.8'
services:
db:
image: mysql/mysql-server
app:
build: .
ports: ['4000:4000']
depends_on: [db]# go/docker-compose.yml
services:
mongo:
image: mongo
service:
build: .
ports: ['8080:8080']
depends_on: [mongo]
environment:
- RAILS_APP_URL这里的最后一行将RAILS_APP_URL环境变量从主机环境传递到容器。
您可以独立启动Rails应用程序:
docker-compose -f ./rails/docker-compose.yml up -d你需要使用find some hostname where the container can call back to the host。在MacOS和Windows主机上,Docker为此提供了一个特殊的主机名host.docker.internal。然后,您可以将客户端容器连接到其服务器的已发布端口:
export RAILS_APP_URL=http://host.docker.internal:4000
docker-compose -f ./go/docker-compose.yml up如果您正在进行开发,则可以在本地运行正在处理的服务及其在容器中的依赖项,并将环境变量指向容器
go build -o ./server ./cmd/server
export RAILS_APP_URL=http://localhost:4000
./server如果要在多台主机上运行此安装程序,但不使用Docker Swarm或Kubernetes等专用集群管理器,请将环境变量设置为指向运行该服务的主机的DNS名称。如果您确实想将其转换为Kubernetes,则可以使用类似的Helm“图表”,它包含单个组件的部署、服务等和依赖关系,并且您可以通过Helm值配置其他服务的URL。
https://stackoverflow.com/questions/68752185
复制相似问题