尝试对一个 sails js 项目进行 docker 化
Trying to dockerize a sails js project
我正在尝试使用 Docker 和 Docker Compose 为 sails js
创建一个项目。我想要的是在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
使用此配置我得到当前目录不为空的错误。
考虑到这一点,我尝试生成代码并复制它。
...
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
一个容器来生成代码,但我想我会遇到同样的问题在非空目录中生成代码。
这是一个使用两个单独图像的想法。一张图片是您的 Sails 实用程序图片,另一张是实际的应用程序。
实用图片
首先,Sails 实用程序映像。这非常简单。它只是一个基于 Node.js 并安装了 Sails 的图像。在新目录中创建以下 Dockerfile
:
FROM node:8.9.3
RUN npm install -g sails
WORKDIR /usr/src/app
ENTRYPOINT ["sails"]
然后构建它:
docker build -t sails .
这甚至可以是 public 图片。这里没有任何特定于您的项目的内容。我们只是用它来执行 sails
命令。
申请
现在,创建另一个新文件夹并导航到其中。它需要为空。使用如下命令创建新的 sails 项目:
docker run -it --rm -v $PWD:/usr/src/app sails new .
这将使用实用程序映像在当前目录中创建 Sails 项目。这是我们新的 Sails 项目的根。
让我们为这个 Sails 项目创建 Dockerfile
和 .dockerignore
文件。为此,我们将仅依靠 node
图像的 -onbuild
变体来处理大部分繁重的工作。创建以下 Dockerfile
:
FROM node:8.9.3-onbuild
EXPOSE 1337
还有随附的 .dockerignore
文件:
node_modules
现在我们可以构建应用程序了:
docker build -t myproject
构建应用程序后,我们可以使用以下方式启动它:
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。
我正在尝试使用 Docker 和 Docker Compose 为 sails js
创建一个项目。我想要的是在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
使用此配置我得到当前目录不为空的错误。
考虑到这一点,我尝试生成代码并复制它。
...
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
一个容器来生成代码,但我想我会遇到同样的问题在非空目录中生成代码。
这是一个使用两个单独图像的想法。一张图片是您的 Sails 实用程序图片,另一张是实际的应用程序。
实用图片
首先,Sails 实用程序映像。这非常简单。它只是一个基于 Node.js 并安装了 Sails 的图像。在新目录中创建以下 Dockerfile
:
FROM node:8.9.3
RUN npm install -g sails
WORKDIR /usr/src/app
ENTRYPOINT ["sails"]
然后构建它:
docker build -t sails .
这甚至可以是 public 图片。这里没有任何特定于您的项目的内容。我们只是用它来执行 sails
命令。
申请
现在,创建另一个新文件夹并导航到其中。它需要为空。使用如下命令创建新的 sails 项目:
docker run -it --rm -v $PWD:/usr/src/app sails new .
这将使用实用程序映像在当前目录中创建 Sails 项目。这是我们新的 Sails 项目的根。
让我们为这个 Sails 项目创建 Dockerfile
和 .dockerignore
文件。为此,我们将仅依靠 node
图像的 -onbuild
变体来处理大部分繁重的工作。创建以下 Dockerfile
:
FROM node:8.9.3-onbuild
EXPOSE 1337
还有随附的 .dockerignore
文件:
node_modules
现在我们可以构建应用程序了:
docker build -t myproject
构建应用程序后,我们可以使用以下方式启动它:
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。