试图dockerize一个风帆JS项目

我正在尝试使用Docker和Docker Compose为sails js创build一个项目。 我想要的是在Docker中生成sails代码并在当前目录中生成结构。

当我尝试生成它时,因为目录不是空的,因为我有一个Dockerfile和一个docker-compose.yml ,我得到一个错误,说该目录不是空的。

这是Dockerfile

 FROM node:8.9.3 RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY . /usr/src/app RUN npm install -g sails RUN sails new . RUN sails lift 

有了这个configuration我得到当前目录的错误不是空的。

思考它我试图生成的代码和复制它。

 ... RUN npm install -g sails RUN sails new . # I do the COPY after generating the code COPY . /usr/src/app RUN sails lift 

这似乎工作,因为我没有得到我的本地环境中的任何错误,我没有生成的代码。

也许这个过程是错误的,我应该安装它作为依赖项,然后与docker-compose运行docker-compose一个容器来生成的代码,但我想我会有同样的问题,试图生成在非空目录中的代码。

这是一个使用两个独立的图像的想法。 一个图像是你的帆实用程序图像,另一个将是实际的应用程序。

实用程序图像

首先,Sails实用程序图像。 这很简单。 这只是一个基于Node.js和Sails安装的图像。 在一个新目录中创build以下Dockerfile

 FROM node:8.9.3 RUN npm install -g sails WORKDIR /usr/src/app ENTRYPOINT ["sails"] 

然后build立它:

 docker build -t sails . 

这甚至可以成为一个公众形象。 这里没有任何特定的项目。 我们只是要用它来做sails命令。

应用

现在,创build另一个新文件夹并导航到它。 它将需要是空的。 使用如下命令创build新的sails项目:

 docker run -it --rm -v $PWD:/usr/src/app sails new . 

这将使用实用程序映像在当前目录中创buildSails项目。 这是我们新的Sails项目的根源。

我们来为这个Sails项目创buildDockerfile.dockerignore文件。 为此,我们只需要依赖node图像的-onbuild变体来处理大部分繁重的工作。 创build以下Dockerfile

 FROM node:8.9.3-onbuild EXPOSE 1337 

并附带.dockerignore文件:

 node_modules 

现在我们可以构build应用程序:

 docker build -t myproject 

在构build应用程序后,我们可以使用以下命令启动它

 docker run -p 1337:1337 myproject 

Node.js映像的-onbuild变体将为我们执行npm install ,并将npm start作为默认命令。 默认的Sails package.jsonstart脚本设置为使用node app.js运行应用程序。 请参阅https://github.com/nodejs/docker-node/blob/master/8/onbuild/Dockerfile了解更多信息。