docker--部署vue项目

前戏

当我们在本地开发了一个 vue 项目之后,肯定是想部署到服务器上供其他人访问,之前介绍过使用 cntos7+nginx 部署项目,今天让我们来使用 docker 来部署我们的前端项目,首先你已经安装好了 docker,并熟悉基本的 docker 命令。

部署

获取 nginx 镜像

docker pull nginx

创建 nginx config 配置文件

在项目根目录下创建文件default.conf,写入如下内容

server {
    listen       80;
    server_name  localhost; # 修改为 docker 服务宿主机的 ip

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html =404;
    }
error_page   </span>500 502 503 504  /<span style="color: rgba(0, 0, 0, 1)">50x.html;
location </span>= /<span style="color: rgba(0, 0, 0, 1)">50x.html {
    root   html;
}

}

 该配置文件定义了首页的指向为 /usr/share/nginx/html/index.html, 所以我们可以一会把构建出来的 index.html 文件和相关的静态资源放到/usr/share/nginx/html目录下。

创建 Dockerfile 文件

在项目根目录下创建 Dockerfile 文件,写入下面内容

FROM nginx

MAINTAINER zouzou

RUN rm /etc/nginx/conf.d/default.conf

ADD default.conf /etc/nginx/conf.d/

COPY dist/ /usr/share/nginx/html/

说明

FROM nginx:该镜像是基于 nginx:latest 镜像构建的

MAINTAINER zouzou:添加说明

RUN rm /etc/nginx/conf.d/default.conf:删除目录下的 default.conf 文件

ADD default.conf /etc/nginx/conf.d/:将 default.conf 复制到 /etc/nginx/conf.d/ 下,用本地的 default.conf 配置来替换 nginx 镜像里的默认配置

COPY dist/ /usr/share/nginx/html/:将项目根目录下 dist 文件夹(构建之后才会生成)下的所有文件复制到镜像 /usr/share/nginx/html/ 目录下

生成生成环境包

首先确保安装了 node.js,npm 可用

在项目根目录下执行下面命令(和 package.json 文件同级) 

安装依赖

npm install

构建

npm run build

执行结束之后会在项目根目录下生成一个 dist 的文件夹

构建 docker 镜像

docker build -t zz-mms .

注意不要少了最后的“.”(点)

-t 是给镜像命名,.(点) 是基于当前目录的 Dockerfile 来构建镜像

查看本地镜像

docker images | grep zz-mms

到这里我们的 vue 应用镜像已经创建成功,接下来,我们基于该镜像启动一个 docker 容器

启动 docker 容器

docker run -d -p 9090:80 --name mms zz-mms

docker run:基于镜像启动一个容器

-d:后台方式启动

-p 9090:80: 端口映射,将宿主机的 9090 端口映射到容器的 80 端口

--name:容器名,我起的叫 mms

zz-mms:要启动的镜像名称

查看启动的容器

docker ps

 访问

现在我们已经启动了,访问宿主机的地址:9090 就可以看到我们部署的网站了

跨域

如果你的后端接口是在别的服务器上部署的,这时候我们的 default.conf 就要加一个反向代理,使用下面的 default.conf,然后重新构建 docker 镜像,启动

server {
    listen       80;
    server_name   49.235.160.132; # 修改为 docker 服务宿主机的 ip

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html =404;
    }
    location /pro-api{ # pro-api 是 vue 项目里.env.production 里的地址
    proxy_pass 1.1.1.1;  # 这里写的是你后端接口的地址
    }
error_page   </span>500 502 503 504  /<span style="color: rgba(0, 0, 0, 1)">50x.html;
location </span>= /<span style="color: rgba(0, 0, 0, 1)">50x.html {
    root   html;
}

}