使用docker部署优点
-
把所有的环境打包在一块,不再需要考虑开发环境问题。
-
如果上线发生了错误,可以很快回滚到上一个可用的镜像,减少损失
Dockerfile文件编写
编写步骤为
1.构建一个镜像需要一个node环境
#1、基于镜像node,版本选择合适稳定版本即可
FROM node:14.6.0
Dockerfile
2.作者信息
#2、作者
MAINTAINER www.hyz.cool
Dockerfile
3.设置环境为生产环境
#3、参数,node的环境为生产环境
ENV NODE_ENV=production
Dockerfile
4.设置环境HOST
#4、任意ip
ENV HOST 0.0.0.0
Dockerfile
5.需要一个文件夹来存放项目目录
#5、容器内创建目录app
RUN mkdir -p /app
Dockerfile
6.需要把项目复制到镜像里面
#6、复制当前的内容到容器内容部目录app
COPY . /app
Dockerfile
注意上面.
和/
中间有空格
7.需要指定一个命令执行的目录
#7、切换工作目录到app
WORKDIR /app
Dockerfile
8.对外暴漏的端口
#8、暴露端口3000,默认端口
EXPOSE 3000
Dockerfile
9.设置npm远程仓库
npm install 花的时间较长,可以考虑设置成国内环境,让它下载更快一些
#9、配置npm的远程仓库
RUN npm install cnpm -g --registry=https://registry.npm.taobao.org
Dockerfile
10.清除缓存
避免缓存造成的依赖干扰导致构建失败
#10、清除缓存
RUN npm cache clean --force
Dockerfile
11.安装依赖
#11、安装依赖
RUN npm install --no-package-lock
Dockerfile
12.构建项目
#12、构建,生成dist文件
RUN npm run build
Dockerfile
13.start项目
此时项目已经在你的镜像里面构建好了,只需启动即可
#13、start
CMD ["npm","start"]
Dockerfile
完整的Dockerfle
并且亲测可以使用的Dockerfile
#1、基于镜像node,版本选择合适稳定版本即可
FROM node:14.6.0
#2、作者
MAINTAINER www.hyz.cool
#3、参数,node的环境为生产环境
ENV NODE_ENV=production
#4、任意ip
ENV HOST 0.0.0.0
#5、容器内创建目录app
RUN mkdir -p /app
#6、复制当前的内容到容器内容部目录app
COPY . /app
#7、切换工作目录到app
WORKDIR /app
#8、暴露端口3000,默认端口
EXPOSE 3000
#9、配置npm的远程仓库
RUN npm install cnpm -g --registry=https://registry.npm.taobao.org
#10、清除缓存
RUN npm cache clean --force
#11、安装依赖
RUN npm install --no-package-lock
#12、构建,生成dist文件
RUN npm run build
#13、start
CMD ["npm","start"]
Dockerfile
镜像构建
这里采用阿里云的容器镜像服务进行构建,不占用本地资源,且版本管理方便
创建阿里云容器镜像仓库
根目录创建Dockerfile文件
在项目根目录创建Dockerfile文件,将上述内容写入文件并保存
Git上传代码托管平台
阿里云、Github都可以,本文采用阿里云代码托管
打开Terminal,cd回到项目根目录,依次执行一下命令(已经初始化过git项目,如没有可参见阿里云代码托管创建仓库
git add .
git commit -m"Finish the project."
git push -u origin master
git tag release-v1.0
git push -u origin release-v1.0
shell
上传之后阿里云这边就会自动构建,可以前往控制台查看
构建成功之后见下图
docker 部署
拉取镜像
进入自己的镜像仓库详情页首页即可看到登录信息
然后根据详情页步骤1、2即可完成镜像的拉取
运行容器
1.查看镜像名称和版本号
执行docker命令
docker images
shell
查看镜像名称和版本号
2.运行
执行docker命令
docker run -d -p3000:3000 --name=你希望的容器名称 镜像名称:版本号
shell