使用docker优雅的部署你的nuxtjs项目

使用docker部署项目的好处

把所有的环境打包在一块,不再需要考虑开发环境问题。
如果上线发生了错误,可以很快回滚到上一个可用的镜像,减少损失

那么我们怎么来部署呢?

可能当你尝试的时候会遇到一些问题
  • nuxt 是 ssr方式,不能指定静态文件根目录,我怎么配置访问的目录呢?
  • 官网提供的启动方式,默认是127.0.0.1:3000 我怎么在外部容易访问呢?
  • 启动容器的时候执行什么shell呢?
当你自己尝试的时候构建的思路可能是
构建一个镜像需要一个node环境,于是会想到以下命令
FROM node:8.2.1
需要一个文件夹来存放项目目录,于是
RUN mkdir -p /app
需要把项目复制到镜像里面,于是
COPY . /app
需要指定一个命令执行的目录
WORKDIR /app
对外暴漏的端口
EXPOSE 3000
一切就绪,此时把代码复制过来了,指定了命令执行的目录,那么迫不及待的是不是想,跑项目了跑项目之前按照惯例 npm install
RUN npm install
然后构建
RUN npm run build
此时项目已经在你的镜像里面构建好了

并且生成一个.nuxt 文件夹,顺理成章的想 执行 npm start
这个命令在docker 怎么弄呢?想到 CMD 容器启动的时候需要执行的命令,务必记住,只能写一个

CMD ["npm","start"]
此时完整的dockerfile 文件

RUN mkdir -p /app
COPY . /app
WORKDIR /app
EXPOSE 3000
RUN npm install
RUN npm run build

CMD [ "npm", "start" ]

ok!!!,一切就绪,此时耐不住性子肯定想构建这个镜像了
于是

docker build -t nuxt-demo .

经过漫长的构建,主要是npm install 花的时间最长,于是你会思考,能否设置成国内环境,让它下载更快一些 于是 把下面的命令写在了 npm install 之前

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

重新构建的时候的确比上次快了

此时肯定想体验一下自己的劳动成果了
docker run -it --rm -p 8080:3000 nuxt-demo

创建了一个一个基于 nuxt-demo镜像的容器并且对外暴漏的是8080端口

于是愉快的使用浏览器访问
127.0.0.1:8080

突然发现根本打不开,产生了一丝的挫败感,为什么,到底为什么!

经过思考后发现,容器内部映射的是127.0.0.1:3000 而不是对外暴漏的ip

怎么办? 去百度? 谷歌? Stack Overflow 无济于事,发现这个东西太新,还没有类似的问题, 于是想主动去提问
算了,还是先找找别人的项目吧, 打开github 搜索 docker-nuxt 找到了自己想要的项目

https://github.com/wsdo/docke...

太棒了,他就是我想要的,如获珍宝,白自己搞了那么久,

于是把这个项目拉下来,按照readme 跑了一遍

git clone https://github.com/wsdo/docker-nuxt 

先构建镜像

docker build -t nuxt-demo .

然后启动容器

docker run -dt -p 8080:3000 nuxt-demo

打开浏览器访问

127.0.0.1:8080

打开了nuxt express项目

瞬间感觉终于拨开迷雾见到了明月

于是研究了项目发现找到了解药
ENV NODE_ENV=production
ENV HOST 0.0.0.0 
比自己的dockerfile多了两行,这不就是自己想要的嘛!

于是完整的dockerfle 并且亲测可以使用的Dockerfile

FROM node:8.2.1
MAINTAINER stark.wang
ENV NODE_ENV=production
ENV HOST 0.0.0.0
RUN mkdir -p /app
COPY . /app
WORKDIR /app
EXPOSE 3000
#If the environment in China build please open the following comments
#如果在中国环境下构建请把下面注释打开
#RUN npm config set registry https://registry.npm.taobao.org
RUN npm install
RUN npm run build
CMD ["npm", "start"]

言归正传 How to use?

在你的项目中新建一个Dockerfile文件写入最后Dockerfile上面文件

# build image
$ docker build -t nuxt-demo .

# serve at localhost:8080
$ docker run -dt -p 8080:3000 nuxt-p

note:

对于此教程,模拟构建思路,如果在操作过程中有什么问题的可以通过以下方式联系。

about me

author:
blog:http://blog.shudong.wang/
github: wsdo

WechatIMG17.png

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值