dockerfile 打包生成全新的mynodeapi镜像 多容器通信 docker-compose 编排多容器项目
dockerfile 打包生成全新的mynodeapi镜像
用过宝塔或手动部署node-api项目就知道
有多少时候是因为生产环境上node的版本与我们提交的node版本过高或过低导致无法运行的 为了统一化使用docker搭建集成镜像就很有必要了
这几天玩docker随便把我原先的项目尝试打包镜像部署下
1.确保你的package.json中script有命令执行
我这里serve的nodemon是开发环境使用的更改持久化动态刷新
start的node在生产环境使用
{
"name": "server",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"serve": "nodemon index.js",
"start": "node index.js"
},
"author": "NanKe",
"license": "ISC",
"dependencies": {
"axios": "^0.26.1",
"bcryptjs": "^2.4.3",
"dayjs": "^1.10.7",
"express": "^4.17.3",
"express-async-errors": "^3.1.1",
"express-jwt": "^6.1.1",
"jsonwebtoken": "^8.5.1",
"log4js": "^6.4.4",
"mongoose": "^6.2.9",
"multer": "^1.4.4",
"node-schedule": "^2.1.0",
"nodemailer": "^6.7.3",
"socket.io": "^4.4.0"
}
}
2.上传你的node项目到服务器(我这边是openwrt软路由)

3.在当前node项目手动创建Dockerfile文件
内容如下:
#设置基础镜像
FROM node:16.13.0
#创建镜像目录,保存我们的代码
RUN mkdir -p /usr/src/mynodeapi
#设置工作目录(注意:这个文件路径是镜像内部的文件路径)
WORKDIR /usr/src/mynodeapi
#把当前目录下的所有文件拷贝到镜像的/usr/src/mynodeapi文件夹下
COPY . /usr/src/mynodeapi
#上一次提示要升级
RUN npm install -g npm@9.3.0
#编译运行node项目,使用npm安装程序的所有依赖
RUN npm install
#暴露container的端口
EXPOSE 5000
#运行命令
ENTRYPOINT ["npm", "run"]
CMD ["start"]
4.当前Dockerfile下 打包成一个名为mynodeapi的镜像
不指定版本默认latest
docker build -t mynodeapi .
指定版本v1
docker build -t mynodeapi:v1 .

5.docker images看下

有啦 是真的大 940M!
6.根据镜像启动容器
不挂载
docker run -d -p 5000:5000 --name="mynodeapi" mynodeapi
挂载:解决添加新功能重新build和run的痛点 修改代码不用重新build和run 只需重启立即生效
docker run -d -p 5000:5000 -v 你服务器开发环境复制到生产环境存储代码的目录:/usr/src/mynodeapi --name="mynodeapi" mynodeapi
小处理
成功启动

记得打开openwrt的端口后重启容器

通过post请求我的接口发现无响应
查看日志发现

由于mongo在另一个容器 而我mynodeapi并没有与其建立通信连接
这就导致了mynodeapi无法找到mongo服务
这边手动修改db.js的mongoip地址

重新上面的打包步骤

可以啦!

多容器通信
为了解决上面手动修改mongo服务地址
我们可以通过创建虚拟网络的方式进行容器之间的通信
docker network create mynet
附上前面docker部署mongo步骤
https://www.cnblogs.com/NanKe-Studying/p/17048504.html
那么上面mongodb链接的部署代码应该修改为
docker pull mongo:latest
mkdir -p /usr/docker/mongodb/data
mkdir -p /usr/docker/mongodb/conf
docker run -d \
-p 27017:27017 \
--name mongo \
--network mynet \
--network-alias mongodb \
-v /usr/docker/mongodb/data:/data/db \
-v /usr/docker/mongodb/conf:/etc/mongo
--restart always \
mongo:latest --auth
mynodeapi的部署代码应该修改为
docker run -d -p 5000:5000 --network mynet -v 你服务器开发环境复制到生产环境存储代码的目录:/usr/src/mynodeapi --name="mynodeapi" mynodeapi
无需修改db.js即可容器之间连接
最后到portainer查看日志或调试验证
docker-compose编排多容器项目
由于项目的复杂性 需要同时提供web服务、mongodb数据库服务、peer服务
在上一个多容器通信显得就不是那么方便 而且每个容器运行还要写一大堆的run命令
所以 我们可以根据dockerfile上面我们自己打包的多个镜像
使用docker-comper编排镜像一键部署
在上传到服务器上的文件夹的根目录新建docker-compose.yml
例如:

vi编辑

浙公网安备 33010602011771号