我正在尝试在 Docker 多个容器上设置 Node.js 应用程序。我的应用程序目前在一个 Ubuntu DO 液滴上并使用:
- Node.js(表达 4)
- 应用程序数据库的mysql
- 用于键值存储的 redis
- nginx 用于负载平衡并提供静态文件。
我需要对不同的部分进行 dockerize,显然每个容器都有一个,然后使用 Docker-Compose(以前称为 Fig)来简单地描述不同的容器并设置它们之间的链接。我对多容器方法不清楚。
一个用于 nginx
,一个用于 Node.js,我的 express 应用
一个用于 MySql
,一个用于 Redis
Docker-compose.yml 会是什么样子?我猜 nginx、mysql 和 redis 将是未经修改的官方图像?虽然 node.js 将有一个指向 Dockerfile 的构建指令,但它会注意到它基于 node.js 官方图像以及配置说明?例如,我将需要配置/提供 mysql 和 redis,这是否意味着每个都需要与自己的 Dockerfile 分开?
容器之间的链接方式是什么?使用卷将文件复制到其中,设置端口,调整主机文件以将 some.domain.com 映射到 nginx ip?
然后,我需要在全局范围内安装一些 npm 包,如 nodemon 和 PM2 并设置一些 cron 作业......(在 Node.js 容器上?)
这是初稿,如果能帮助我更好地理解这个新设置,我将不胜感激:
Docker-compose.yml
nginx:
image: nginx
links:
- "node"
node:
build: .
volumes:
- "app:/src/app"
ports:
- "3030:3000"
links:
- "db:mysql"
db:
image: mysql:5.6
environment:
- MYSQL_ROOT_PASSWORD=mypassword
Dockerfile
FROM node:0.12
RUN mkdir /src
RUN npm install nodemon pm2 -g
WORKDIR /src
ADD app/package.json /src/package.json
RUN npm install
ADD app/nodemon.json /src/nodemon.json
EXPOSE 3000
CMD npm start
我使用这个简单的项目作为基础,虽然我的应用程序需要