expressjs 在Docker 中开发环境的部署

介绍expressjs 在Docker 中开发环境的部署

节点介绍

  • nodejs 容器,
  • mongodb 容器
  • docker 是运行于wsl 中的

镜像及容器配置

  • 配置网络桥接
    • run docker network create my-net
      创建一个桥接网络,默认情况下docker 会有一个bridge网络,但是这个网络有个问题,容器之间不能通过容器名互相访问,例如nodejs 容器通过容器名访问不到mongodb 的容器。之前被这个坑死了,环境都配好了,就是访问不了数据库。后来参考了这个链接link1,link2
  • nodejs 容器
    • docker pull node:17.9.1-alpine3.15 使用改命令拉取node 的image,我使用的版本是17.9.1-alpine3.15
    • 启动这个容器 docker run -v /code/project:/project -p 4200:3000 --name nodejs --network my-net node:17.9.1-alpine3.15
      • v:是用来挂载volumne, 将wsl 里面的/code/project 卷挂载到nodejs 容器里面的/project 卷。Volume
      • p:将nodejs 中的3000端口映射到wsl 的4200,这样本地的浏览器才可以访问nodejs
      • network:指明使用的网络,不加使用默认的网络,这样无法使用容器名访问其他的容器,比较不方便
      • name:指定容器的名称
    • 再唠一句,还有一种模式,代码跟node_modules 分开。都通过volume的方式挂载到nodejs,命令如下
      • 首先在另一个容器中创建一个volume,这里我们使用alpine 镜像
        docker pull alpine 拉取镜像
        docker run -itd -v /project/node_modules --name node_modules alpine
        创建容器,同时创建了一个叫 /project/node_modules的数据卷。
      • 在我们的nodejs 中使用这个创建的卷
        docker run -v /code/project:/project --volumes-from node_modules -p 4200:3000 --name nodejs --network my-net node:17.9.1-alpine3.15
        通过 --volumes-from参数,我们指定容器名,就可以使用其他容器的数据卷来挂载到当前容器中
      • 然后我们可以在nodejs 中拉起环境
        docker exec -w /project nodejs npm run start
  • Mongo 容器
    • docker pull mongo:latest
    • docker run -itd -p 27017:27017 -v /localdb:/data/db --name db mongo:latest
posted @ 2023-03-08 07:07  kongshu  阅读(114)  评论(0编辑  收藏  举报