运行 在 docker 集装箱内航行新船

Run sails new inside a docker container

我是 Docker 的新手,我正在尝试使用它创建一个 sails 项目。 我有以下疑问:

我只想在容器中安装 sails,我不想 运行 在我的主机中 npm install -g sails,这样做是正确的还是我错了?

由于我只想在容器中安装sails,是否可以使用sails new 命令在容器中创建项目结构?

简答

是的,您可以执行任何 sails 命令,就像您在主机上安装了 sails 一样。一旦有了容器运行ning,就可以使用docker exec命令在容器内执行任何命令,例如:

docker exec container-name sails new my-sails-project

或者你可以连接到容器的shell并直接执行命令:

docker exec -it container-name /bin/sh
sails new my-sails-project

这两种方法都将在 /my-sails-project 目录中的容器 创建一个新的 sails 项目。

长答案

如上所述,如果您使用这两种方法之一执行 sails new 命令,它将在 inside 容器中创建项目。如果你想访问容器外的项目(在你的主机上),你需要创建一个docker卷来将你容器内的文件夹挂载到你的主机上,例如:

docker run ... --volume "/some/path/to/dev/folder/on/your/host/machine:/my-sails-project

这将使您能够访问主机上指定目录中 sails new 创建的所有文件。还要注意的另一件事是,如果您 运行 容器内的 sails 服务器使用 sails lift,您将需要公开该端口以便可以在您的主机上访问该服务器,您可以使用--port 标志创建端口转发映射如下:

docker run ... --port 1337:1337

其中端口 1337 sails 服务器使用的默认端口。

集于一身

您可以通过将上述启动配置包含在 docker-compose 文件中来简化容器的启动,并使用它来启动容器。 Docker Compose 是一种工具,可让您装饰性地指定容器 运行,docker-compse.yml 文件的示例:

version: '3'
container_name: sails-dev
ports:
  - 1337:1337
volumes:
  - /some/path/to/dev/folder/on/your/host/machine:/my-sails-project

然后你可以通过 运行ning docker-compose up 从与 docker-compose.yml 文件相同的目录启动你的项目(或使用 -f 标志指定路径到它)。

如果您发现自己经常 运行 使用 sails 命令,您可以将 docker exec 命令放在脚本中,并使用传递给它的任何参数调用它。如果您将此脚本添加到您的路径,您可以直接从您的主机调用 rails 命令,就像它是本机安装的一样,例如:

#!/bin/sh
docker exec -it sails-dev sails $*

然后你可以运行 sails命令通过./sails.sh some-sails-command.