本文使用Docker来部署一个vue的前端应用,后台是express提供的接口。更多的实践docker命令,上篇文章有关于Docker更详细的介绍.
部署node服务
运行本地express
这个后台服务就用很早之前写的项目,项目地址在github上。运行该 express 应用需要 node 环境,我们基于 node 镜像来构建一个新镜像.
拉取node镜像
docker pull node
docker 镜像名称由REPOSITORY和TAG组成 [REPOSITORY[:TAG]],TAG默认为latest。查看所有镜像docker image ls
编写Dockerfile文件
在express项目的根目录创建Dockerfile文件。
1 | #基于 node:latest 镜像而构建的 |
这里的端口是指容器端口-p <宿主端口>:<容器端口>
跟运行并没有关系。
构建镜像
docker build -t nodeWebServer .
-t 是给镜像命名 . 是基于当前目录的Dockerfile来构建镜像
启动容器
基于该镜像启动一个docker容器。
1 | docker run \ |
docker run 基于镜像启动一个容器
-p 8088:8082 端口映射,将宿主的8088端口映射到容器的8082端口
-d 后台方式运行
--name 容器名
查看 docker 进程docker container ls -a
进入这个已经启动的容器docker exec -it containerID bash
可以看到Dockerfile指定的工作目录和copy过来的文件。
访问
http://localhost:8088
部署前端应用
vue项目
将前端项目运行起来并打包npm run build
现在将这个生成的dist静态文件部署到docker上。
拉取nginx镜像
docker pull nginx
这次就基于nginx这个基础镜像部署项目(node项目是新建了一个镜像)。
创建nginx config配置文件
在项目根目录下创建nginx文件夹,该文件夹下新建文件default.conf
1 | server { |
这个文件可以看到首页的指向为 /usr/share/nginx/html/index.html, 所以我们可以一会把构建出来的index.html文件和相关的静态资源放到/usr/share/nginx/html目录下。
还将上面node服务代理出去了。容器内部 ip 通过查看docker inspect containerID
启动容器
1 | docker run \ |
1 | $HOME是指项目所在系统盘位置 |
访问localhost:8000/api/*就可以请求到node的后台服务了。
编写sheel脚本
每次启动容器运行的命令较长,如果每次重新输入难免麻烦,我们可以将完整的命令保存到一个shell文件。
1 | !/bin/sh |