我是Docker的新手,我正在尝试使用它创建一个sails项目。 我有以下疑问:
我只想在容器中安装帆,我不想在主机中运行npm install -g帆,这样做是正确的还是我做错了?
由于我只想将Sails安装在容器中,是否可以使用sails new命令在容器中创建项目结构?
答案 0 :(得分:4)
简短答案
是的,您可以执行任何sails命令,就像在主机上安装了sails一样。运行容器后,可以使用docker exec
命令在容器内执行任何命令,例如:
docker exec container-name sails new my-sails-project
或者您可以连接到容器的外壳并直接执行命令:
docker exec -it container-name /bin/sh
sails new my-sails-project
这两种方法都会在/my-sails-project
目录中的容器内部 中创建一个新的sails项目。
详细答案
如上所述,如果使用这两种方法之一执行sails new
命令,它将在容器内部 中创建项目。如果要访问容器外部(在主机上)的项目,则需要创建一个docker卷将容器内部的文件夹安装到主机,例如:
docker run ... --volume "/some/path/to/dev/folder/on/your/host/machine:/my-sails-project
这将使您可以访问由sails new
在主机上指定目录中创建的所有文件。还有一点需要注意的是,如果您使用sails lift
在容器内运行sails服务器,则需要公开该端口,以便可以在主机上访问该服务器,您可以使用{{1 }}标志来创建端口转发映射,如下所示:
--port
其中端口docker run ... --port 1337:1337
是Sails服务器使用的默认端口。
将它们组合在一起
您可以通过在1337
文件中包含上述启动配置,来简化容器的启动,并使用它来启动容器。 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
文件相同的目录中运行docker-compose up
来启动项目(或使用docker-compose.yml
标志指定其路径)。
如果发现您经常运行-f
命令,则可以将sails
命令放在脚本中,并使用传递给它的任何参数进行调用。如果将此脚本添加到路径中,则可以直接从主机调用rails命令,就像它是本地安装的一样,例如:
docker exec
然后,您可以通过#!/bin/sh
docker exec -it sails-dev sails $*
运行sails
命令。