美文网首页
编写高可用的docker,node运行环境

编写高可用的docker,node运行环境

作者: 茶艺瑶 | 来源:发表于2019-11-13 23:16 被阅读0次

因为笔者之前都是用docker来跑php的,这里的php用的还是php-fpm,只不过开启opchace,以前跑node.js的时候,我并没有用docker来运行,用的pm2.js。所以并没有在意这些。

现在还在用node.js 8,不过现在看到node.js 13了,我是有点担心node.js的api兼容性问题,所以今天在部署环境的时候,还是考虑用docker来管理node.js版本,你会说,不是有node.js n nvm之类的管理吗?有是有,可是我个人感觉没有docker 直接用镜像的来区分更加方便。

我在编写Dockerfile的时候,会先去github上浏览一下别人的代码,我找了一下,大致很多人的代码,都是Docker,并没有使用docker-compose,也有一些是用上的,不过他们是和他们的项目结构捆绑在一起的docker-compose。我想要的是

image.png image.png

类似自己编写的容器编排程序,nginx 做了负载均衡 代理 nginx_web
和 varnish 静态缓存服务器。

我需要把我的php程序放到我的app文件下就可以运行的docker-compose

于是我就编写了而不是还要参考你项目结构的Dockerfile镜像,我只需要一个纯净的node.js和项目需要的node_models,而不是你项目原先已经规定好的项目结构和已经把我打包的node_models镜像。

image.png

首先我们docker-compose容器编排文件如下

version: "3"
services:
  app:
    build: .
    # image: myphp:latest
    ports:
      - 80:80
    volumes:
      - ./apisocket:/app
    environment:
      - TZ=Asia/Shanghai

networks:
    frontend:
    backend:

Dockerfile 如下

FROM node:8.9-alpine

RUN mkdir /app
VOLUME [ "/app" ]

WORKDIR /app

RUN npm config set unsafe-perm true #如果在docker 不添加这个 会报Error: could not get uid/gid的错误

RUN npm set registry https://registry.npm.taobao.org/

RUN npm install -g pm2 typescript

RUN npm install

CMD ["pm2-docker","dist/app.js"]

EXPOSE 80

可是笔者在运行的时候,发现一个问题,在build的镜像的过程中,死活不能build成功!!!

他会在 npm install中报一个错误!,not cna't open package.json。

由于我以前做的php 容器编排 都是这么处理的呀。怎么的到了编译形式语言就不能node.js就不能呢?

我不是在docker-compose.yml 上把项目路径映射容器了吗???

我对Dockerfile也没有深入了解,也就看来一下Dockerfile几个关键词而已。

我经过半个小时的沉思之后,我猜测一个想法,就是docker-compose在运行的时候,的路径映射是不参与打包镜像里面的。

所以npm install这一类的操作应当放在 docker-compose.yml的command属性中进行操作。

所以后面我的两个文件有进行了修改

# Dockerflie

FROM node:8.9-alpine

RUN mkdir /app
VOLUME [ "/app" ]

WORKDIR /app

RUN npm config set unsafe-perm true
RUN npm set registry https://registry.npm.taobao.org/

RUN npm install -g pm2 typescript

EXPOSE 80


# docker-compose.yml 
version: "3"
services:
  app:
    build: .
    # image: myphp:latest
    ports:
      - 80:80
    volumes:
      - ./apisocket:/app
    environment:
      - TZ=Asia/Shanghai
    command:
      - sh
      - -c
      - |
          npm install
          npm run tsc
          pm2-docker dist/app.js

networks:
    frontend:
    backend:

这样之后,无论你什么node.js项目都好,只要你改名为app文件,
并修改 pm2-docker dist/app.js这里,都可以愉快的运行
只要 sudo docker-compose upsudo docker-compose down
如果切换node.js 只需要去 Dockerfile中修改一下数字
然后 sudo docker images && sudo docker rmi [imageId] 。
之后再运行 sudo docker-compose up 从新制作新的容器镜像。

相关文章

网友评论

      本文标题:编写高可用的docker,node运行环境

      本文链接:https://www.haomeiwen.com/subject/dptlictx.html