Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用Docker构建应用程序堆栈_Node.js_Docker - Fatal编程技术网

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

Node.js 使用Docker构建应用程序堆栈,node.js,docker,Node.js,Docker,我是一名码头工人新手,正在努力构建一个应用程序堆栈 对于使用Nginx、MongoDB和Redis在Linux上运行的节点应用程序,如何组合堆栈 在DockerHub上,我可以看到的图像,所以堆栈中的每个组件都需要一个图像吗 您是否将所有这些链接在Dockerfile中,然后像这样将各个配置设置放在docker-compose.yaml中 只是想了解一下大概情况。Docker的最佳实践是,故意让编写运行多个服务的DockerFile变得困难 Docker Compose通过为您提供运行多个容器(

我是一名码头工人新手,正在努力构建一个应用程序堆栈

对于使用Nginx、MongoDB和Redis在Linux上运行的节点应用程序,如何组合堆栈

在DockerHub上,我可以看到的图像,所以堆栈中的每个组件都需要一个图像吗

您是否将所有这些链接在Dockerfile中,然后像这样将各个配置设置放在docker-compose.yaml中


只是想了解一下大概情况。

Docker的最佳实践是,故意让编写运行多个服务的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'
FROM node

COPY . /app
RUN npm install
CMD ["npm", "start"]
运行
docker compose后
的库图像,并将从docker hub中提取

然后,它将尝试从
Dockerfile
中构建一个容器,该文件与您的
docker compose.yml
文件位于同一目录中

如果您正在构建一个节点应用程序,它可能如下所示:

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'
FROM node

COPY . /app
RUN npm install
CMD ["npm", "start"]
Docker Compose还配置网络,以便您的每个组合服务都获得映射到容器ip地址的描述性主机

例如,如果您从节点应用程序连接到Redis,您将不会发现它在
localhost
上运行(因为那是您的容器)。相反,它将位于redis:6379


它是为Python编写的,但是非常好。

对于每个dockerfile,您只需构建一个应用程序,并且基于其他图像确实是一个很好的实践。具体来说,如果你想运行node,你不需要Ubuntu。只需选择作为起点,例如
节点/6.9

(甚至可以查看基于alpine的图像以获得较小的内存占用。)

如果您需要mysql,如果您需要nginx,请使用

第一个错误之一是使用一个通用的“将它们全部规则化”容器。初学者喜欢将图像建立在Ubuntu上,然后通过
apt-get
或运行安装脚本来安装所有工具。这是太多的体力劳动了

虽然有时仍有必要对图像进行微调,但通过使用特定图像作为起点,您可以从docker生态系统中获得更多好处。通常,仅通过环境变量配置映像的容器就足够了

仅使用
docker
链接是可能的,但相当困难。docker compose不是构建堆栈的必要工具,但却是一个方便的工具

将容器链接在一起不会发生在
Dockerfile
中,而是发生在
docker compose.yml


docker compose是一种工具,用于编排整个堆栈,并将不同的图像链接在一起,这些图像可以是构建的,也可以是拉到一起的。这是如何让您的nginx和nodejs图像相互对话。

我在周末一直在玩这个,并且取得了良好的进展。看起来最难的部分是为您的特定用例找到最好的图像,并将其绑定到docker compose文件中。谢谢您的解释。我能够使用Node、Nginx、Redis和Mongo使用docker-compose.yaml构建一个堆栈。这不是100%没有麻烦,但经过一些尝试和错误,我得到了堆栈运行。