数据库需要保证数据持久化,以及设置秘钥访问。 后端需要持久化保存日志,以及代码热更新。 前段需要代码热更新。

创建个网络:

docker network create multi-network

首先是数据库:

docker run -d --network multi-network --name some-mongo \
	-e MONGO_INITDB_ROOT_USERNAME=admin \
	-e MONGO_INITDB_ROOT_PASSWORD=admin \
	-v mongodb:/data/db
	mongo

在数据库连接的域名前加上 username:password@ 即可,如:

mongodb://admin:admin@mongodb:27017/course-goals

更进一步可以在 dockerfile 中定义 ENV,然后使用 js 代码调用,虽然官方不推荐这么做。

后端:

docker run -d --rm --network multi-network --name multi-backend-app -v multi-logs:/app/backend/logs -v /app/backend/node_modules -v "E:\Study\docker\dockerLearning\1 初识docker\Multi-Container\multi-01-starting-setup\backend:/app/backend" multi-backend

前端:

docker run -d --rm --network multi-network --name multi-frontend-app -p 7749:3000 multi-frontend

React 前端是基于 node.js 环境,而在容器中的 node 仅仅运行 React 本体,实际上代码执行环境是在客户端的浏览器中,因此会导致无法访问docker内部的容器,即 http://multi-backend-app/goals 不会被docker处理。

故我们依然要用 http://localhost/goals,且需要开放后端容器的 80 端口。