我是一个 Docker 新手,正试图全神贯注于构建应用程序堆栈。
对于使用 Nginx、MongoDB 和 Redis 在 Linux 上运行的 Node 应用程序,您如何构建堆栈?
在 DockerHub 上,我可以看到 Node 的图像, MongoDB和 Redis那么您是否需要为堆栈中的每个组件提供图像?
您是否将所有这些链接在 Dockerfile 中,然后像这样将各个配置设置放入 docker-compose.yaml gist ?
只是想了解一下总体思路。
最佳答案
Docker 的最佳实践是 run one process per container ,故意让编写运行多个服务的 Dockerfile 变得困难。
Docker Compose 通过为您提供运行多个容器(每个容器运行一项服务)而不是运行多个服务的单个容器所需的工具来解决这个问题。
您可以像这样使用 Compose 设置堆栈:
version: '2'
services:
redis:
image: 'redis'
ports:
- '6379:6379'
nginx:
image: 'nginx'
ports:
- '80:80'
mongodb:
image: 'mongo'
ports:
- '27017:27017'
app:
build: .
ports:
- '3000:3000'
在运行 docker-compose up
后 redis 的库图像, nginx和 mongo将从 Docker 中心拉取。
然后它将尝试从与您的 docker-compose.yml
文件相同的目录中的 Dockerfile
构建一个容器。
如果您正在构建 Node 应用程序,它可能看起来像这样:
FROM node
COPY . /app
RUN npm install
CMD ["npm", "start"]
Docker Compose 还会配置网络,以便您的每个组合服务都获得一个映射到容器 IP 地址的描述性主机。
例如,如果您从 Node 应用程序连接到 Redis,您将不会发现它在 localhost
上运行(因为那是您的容器)。相反,它将位于 redis:6379
。
它是为 Python 编写的,但是 getting started article非常好。
关于node.js - 使用 Docker 构建应用程序堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41873208/