试图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.json
将start
脚本设置为使用node app.js
运行应用程序。 请参阅https://github.com/nodejs/docker-node/blob/master/8/onbuild/Dockerfile了解更多信息。