介绍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
阅读(
128)
评论()
编辑
收藏
举报