使用 Docker Compose 在虚拟机上创建 Node.js 开发(nginx-Node.js-Mongodb)的模板
我尝试创建了一个用于Nodejs开发的虚拟机/容器环境。
这是我们以前在「docker上创建了一个用于开发nginx-Nodejs-Mongodb的模板」的基础上,使用Docker Compose重新创建的版本。
环境
-
- MacOS 10.12.6 (Sierra)
- Vagrant 1.9.7
创建的环境
VM:
centOS7
docker container:
nginx:1.13.3
node:7.10.1
mongo:3.4.7
虚拟机的IP被设置为192.168.33.20。
准备开始
在Mac上使用Vagrant搭建Docker环境。
需要确保已经安装了Vagrant,然后按照上述步骤进行操作。
请注意,在创建新的虚拟机时会自动安装Docker,因此不需要额外的操作。
这道菜的调味汁
请将以下内容完整入您所指定的位置:
https://github.com/manjiii/Vagrant-samples/tree/master/Skeleton-nginx-nodejs-mongodb
请使用git clone或下载方式将其复制到任意目录中。
环境建设
启动流浪者
请使用Skeleton-nginx-nodejs-mongodb的方式进行Vagrant up。
cd /path/to/Skeleton-nginx-nodejs-mongodb
vagrant up
#初回はしばらく時間がかかります。
另外,需要安装vagrant-vbguest、vagrant-gatling-rsync插件。如果没有安装,将在vagrant up时自动安装。
请在启动虚拟机后执行rsync命令,以实现文件的自动更新。
vagrant rsync-auto
请注意,如果忘记执行这个命令,文件将无法在本地、虚拟机和容器之间同步。
确认动作
输入样本数据
我先登录到虚拟机,然后执行预先准备好的用于投入示例数据的shell脚本。
#vmにログイン
vagrant ssh
#vm上で操作
cd /vagrant
docker-compose exec mongodb bash /var/tmp/initialData.sh
各个容器的操作检查
nginx:
打开下方URL,将显示hello nginx页面
http://192.168.33.20/
使用Node.js打开以下URL,将显示“hello node”页面:
http://192.168.33.20/app/
MongoDB:
打开以下URL时,将显示在初始注册时所注册的示例数据(manjiii[1-4])
http://192.168.33.20/app/mongo
使用mongo命令或者适用于mongo的工具从主机连接到192.168.33.20:27017。
使用方式
目录结构
在 Dockers 下面,每个容器都有一个用于使用的文件目录。
Skeleton-nginx-nodejs-mongodb
├── Vagrantfile
├── docker-compose.yml
└── dockers
├── mongodb
├── nginx
└── node
NodeJS (Node.js) – 一个开源的适用于服务器端和网络应用构建的 JavaScript 运行环境
该项目已被安装在Dockers/Node的目录下。
node/
└── src
├── .foreverignore
├── .vscode
│ └── launch.json
├── jsconfig.json
├── modules
│ └── logger.js
├── package.json
├── routes
│ ├── index.js
│ ├── mongo.js
│ └── router.js
├── server.js
└── views
├── error.ejs
├── index.ejs
└── mongo.ejs
在此初始样本中,有一个与MongoDB连接的简单代码。位于node/src目录下的代码在node容器中使用forever运行,如果文件有更新,forever将自动重新启动并应用更改。
另外,我们已经配置了在Visual Studio Core中进行开发的设置(.vscode/launch.json),所以只需打开Visual Studio Core并在本地打开Skeleton-nginx-nodejs-mongodb/dockers/node/src文件夹,即可立即进行开发和调试。
※请参考下述内容了解调试方法。
在Visual Studio Code中调试远程服务器上的Node.js。
如果您想要添加模块或重新执行npm install,可以在容器上运行npm install。
#vmにログイン
vagrant ssh
#docker-composeファイルのディレクトリに移動
cd /vagrant
#container上でnpm install実行させる
docker-compose exec node_app npm install
nginx是一款开源的,高性能的HTTP和反向代理服务器。
dockers/nginx下有安装设置。
nginx
├── conf.d
│ └── default.conf
└── www
└── index.html
www文件夹下的目录是用于静态内容的文件夹。
如果想要更改静态文件,请编辑这里的文件。
更改后会自动反映到docker中。
另外,如果想要更改nginx的设置,
请修改conf.d/default.con文件,然后重新启动container。
#vmにログイン
vagrant ssh
#docker-composeファイルのディレクトリに移動
cd /vagrant
#nginxを再起動
docker-compose restart nginx
目前的状况是将/app代理到node的设置。
location /app/ {
proxy_pass http://node_app:8080/;
}
包含在里面。
MongoDB 可以进行中文本地化。
Dockers/MongoDB已安装在下面。
mongodb/
└── tmp
└── initialData.sh
由于在虚拟机上使用卷进行数据持久化,因此只配置了用于初始数据导入的shell脚本。
尽管被用作初始数据导入,但您也可以在本地编辑initialData.sh,并使用下面的命令将数据重新反映到mongodb中。
#vmにログイン
vagrant ssh
#docker-composeファイルのディレクトリに移動
cd /vagrant
#initialData.shを実行
docker-compose exec mongodb bash /var/tmp/initialData.sh
另外,因为在虚拟机上已经设置了端口,因此可以通过主机上的mongo命令或工具连接到192.168.33.10:27017。
查看日志
日志将输出到每个虚拟机上的log目录。
※不会输出到本地。
您可以在每个docker目录/log中引用它,也可以使用以下命令批量引用。
#vmにログイン
vagrant ssh
#ログ参照
tail -f /vagrant/dockers/*/log/*.log
关于这个环境
我计划随时进行更新。
如果有任何问题、改进意见等,请告诉我,我将非常感激。