文章目录
之前一文中也详细叙述了搭建node容器的挂载目录方面的步骤,注意我们的目的是将nginx容器作为一个及拉及用软件,而不是将其作为一个VM,在其中大刀阔斧的修改配置。
建议看看前面一文《Docker nodejs镜像搭建》,Dockerfile搭建node容器。
为了缩小node容器的大小,接下来使用Linux的轻型发行版本:Alpine
一、配置相关挂载目录及其文件
1、 创建需要挂载的相应的挂载目录
/root/nodejsdocker_alpine/
| server.js
| run.sh
| package.json
| docker-compose.yml
| .dockerignore
2、nodejs服务器
server.js
const express = require('express');
// Constants
const PORT = 8081;
const HOST = '0.0.0.0';
// App
const app = express();
app.get('/api', (req, res) => {
res.send('Hello World');
});
app.get('/api/test', (req, res) => {
res.send('Hello World api/test');
});
app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);
3、依赖包package.json
package.json
{
"name": "docker_web_app",
"version": "1.0.0",
"description": "Node.js on Docker",
"author": "First Last <first.last@example.com>",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"express": "^4.16.1"
}
}
4、.dockerignore
.dockerignore
这将避免你的本地模块以及调试日志被拷贝进入到你的 Docker 镜像中,以至于把你镜像原有安装的模块给覆盖了。
node_modules
npm-debug.log
5、run.sh
run.sh
脚本文件,启动服务器
cd /code/
npm install
node /code/server.js
二、编写容器编排文件
docker-compose.yml,注意格式缩进
version: '3'
services:
node:
image: node:alpine
container_name: node
ports:
- "8080:8080"
volumes:
- /root/nodejsdocker_alpine/:/code/
privileged: true
restart: always
command: sh /code/run.sh
三、运行及查看
[root@iZ2ze5ot8cnsficuqqnoj5Z /root/nginxdocker/]# docker-compose up -d
启动错误!,查看错误日志
docker logs [容器ID]
查看镜像,我只能说小的一批!
[root@iZ2ze5ot8cnsficuqqnoj5Z conf.d]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
node alpine 48de5d16038c 6 days ago 113MB
[root@iZ2ze5ot8cnsficuqqnoj5Z conf.d]# docker-compose ps
Name Command State Ports
----------------------------------------------------------------------
node docker-entrypoint.sh sh /c ... Up 0.0.0.0:8080->8080/tcp
宿主机上测试接口
[root@iZ2ze5ot8cnsficuqqnoj5Z nodejsdocker_alpine]# curl localhost:8080/api
Hello World
外网测试接口
访问:http://47.****.82:8080/api/
访问:http://47.****.82:8080/api/test/
进步ing