我是新手,正在尝试使用Docker创建一个sails项目。
我有以下疑问:
我想仅在容器中安装sails,而不想在我的主机上运行npm install -g sails,这样做是正确的吗?还是我错了?
由于我只想在容器中安装sails,所以是否可以使用sails new命令在容器中创建项目结构?
简短回答
是的,您可以执行任何Sails命令,就像在主机上安装了Sails一样。一旦您运行了一个容器,您可以使用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
命令,则会在容器内创建该项目。如果您想在容器外(在您的主机上)访问该项目,则需要创建一个Docker卷将容器内的文件夹挂载到您的主机上,例如:
docker run ... --volume "/some/path/to/dev/folder/on/your/host/machine:/my-sails-project
这将让你在指定目录中访问由sails new
创建的所有文件。还有一件需要注意的事情是,如果你使用sails lift
在容器内运行sails服务器,那么你需要暴露该端口,以便在主机上访问该服务器,你可以通过使用--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
然后,您可以在与docker-compose.yml
文件相同的目录中运行docker-compose up
来启动项目(或使用-f
标志指定其路径)。
如果您经常运行sails
命令,您可以将docker exec
命令放入脚本中,并使用传递给它的任何参数调用该脚本。 如果您将此脚本添加到您的路径中,您可以像本地安装一样直接从主机调用rails命令,例如:
#!/bin/sh
docker exec -it sails-dev sails $*
然后,您可以通过./sails.sh some-sails-command
来运行sails
命令。