node.js - 使用 Docker 构建应用程序堆栈

标签 node.js docker

我是一个 Docker 新手,正试图全神贯注于构建应用程序堆栈。

对于使用 Nginx、MongoDB 和 Redis 在 Linux 上运行的 Node 应用程序,您如何构建堆栈?

在 DockerHub 上,我可以看到 Node 的图像, MongoDBRedis那么您是否需要为堆栈中的每个组件提供图像?

您是否将所有这些链接在 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 upredis 的库图像, nginxmongo将从 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/

相关文章:

c# - Visual Studio 2015 100% 的 CPU 使用率与 Node

docker - 端口映射不适用于一项服务

macos - 在 Mac 上找不到 Docker 容器日志文件

docker - 如何在这个 meteor docker 镜像中部署应用程序?

docker - 如何处理 Docker 登录到具有多个并发作业的 Gitlab 容器注册表?

node.js - 如何等待同步 nodejs 函数中的 promise ?

node.js - CORS 将 HTTP 请求锁定到在 Firebase 上提供的 Angular 上的 Elasticsearch 服务器

javascript - 您是否对您开发的 Javascript API 包装器方法的参数执行任何验证?

node.js - MongoDB 错误 "can' 无法从对象中提取地理键,几何形状错误?”

docker - SQL1032N 未发出启动数据库管理器命令。 SQLSTATE=57019