利用docker-compsoe部署前后端分离的项目方法

 更新时间:2019年08月29日 08:25:57   作者:写夜子  
这篇文章主要介绍了利用docker-compsoe部署前后端分离的项目方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

说在前面

我们都知道,docker可以实现很简便的部署环境。现在我们有一个前后端分离的项目,前端基于Vue开发、利用Webpakc打包为dist文件夹。后端则是一个Node.js服务,提供API接口,前端和后端是分离的。所以我们肯定是前端项目一个container,后台项目也是一个container。那么如果是在生产环境,就会产生跨域问题。前端的请求要反向代理到后台。大家肯定首先想到的就是使用 Nginx 设置 proxy_pass 。是的没有错。那么我们有了这些想法。我们如何通过 docker-compose 来实现呢?

开始动手

其实我也是才开始了解docker的。所以有很多不明白的地方,例如在docker里面,是通过image生成一个container,那么这个container,就可以当作是一个独立的系统,这个系统也就有自己独立的端口。那么就像我们刚刚那样的需求,假设我们的前端在 container1 里面暴露80端口,同时映射到宿主机的80端口,后端在 container2 里面暴露3000端口,同时映射到宿主机的3000端口。那我们反向代理请求的时候,是通过宿主机来反向代理呢,还是通过container来实现呢?我在网上查阅并学习了很多其他大佬的文章,还有官网的文档。发现直接通过container就可以实现这种需求。为什么呢?因为docker-compose,会将所有的container构建在同一网络下,我们要找其他container,我们只需通过docker-compose里面的 service name 即可找到。 下面先来看看我们的目录:

vueMusic
 ├─ .git
 ├─ .gitignore
 ├─ LICENSE
 ├─ README.md
 ├─ babel.config.js
 ├─ dist
 ├─ docker-compose.yml
 ├─ docs
 ├─ nginx.conf
 ├─ package-lock.json
 ├─ package.json
 ├─ public
 ├─ server
 ├─ src
 └─ vue.config.js

dist是我们的前端项目,server是我们的后端项目。 下面再来看看我们的 docker-compose.yml :

version: '3'
 services:
 music-web: #前端项目的service name
   container_name: 'music-web-container' #容器名称
   image: nginx #指定镜像
   restart: always
   ports:
   - 80:80
   volumes: 
   - ./nginx.conf:/etc/nginx/nginx.conf #挂载nginx配置
   - ./dist:/usr/share/nginx/html/  #挂载项目
   depends_on:
   - music-server
 music-server:  #后端项目的service name
   container_name: 'music-server-container'
   build: ./server #根据server目录下面的Dockerfile构建镜像
   restart: always
   expose:
   - 3000

可以看见,我们通过 volumes 属性将宿主机的 nginx.conf 挂载到容器内的nginx配置文件,用来覆盖原有的配置文件,同时也将 dist 挂载到容器内。我们将前端项目的容器暴露并映射给宿主机的80端口,我们将后端项目的容器暴露3000端口。那么我们在哪里实现反向代理请求呢?请看 nginx.conf :

#user nobody;
 worker_processes 1;
 events {
   worker_connections 1024;
 }
 http {
   include    mime.types;
   default_type application/octet-stream;
   sendfile    on;
   #tcp_nopush   on;
   #keepalive_timeout 0;
   keepalive_timeout 65;
   #gzip on;
   gzip on;
   gzip_min_length 5k;
   gzip_buffers   4 16k;
   #gzip_http_version 1.0;
   gzip_comp_level 3;
   gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
   gzip_vary on;
   server {
     listen 80;
     server_name www.xieyezi.com;
     #音乐app项目
     location / {
     index index.html index.htm;  #添加属性。 
     root /usr/share/nginx/html;  #站点目录
     }
     #音乐app项目设置代理转发
     location /api/ {
     proxy_pass http://music-server:3000/;
     }
     error_page  500 502 503 504 /50x.html;
     location = /50x.html {
       root  /usr/share/nginx/html;
     }
   }
 }

可以看上面的 proxy_pass http://music-server:3000/; 。其中 music-server 是我们后端项目的服务名,我们通过服务名来找到这个容器,这样就实现了反向代理。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 在docker容器中调用和执行宿主机的docker操作

    在docker容器中调用和执行宿主机的docker操作

    这篇文章主要介绍了在docker容器中调用和执行宿主机的docker操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Docker之cAdvisor的安装使用方式

    Docker之cAdvisor的安装使用方式

    这篇文章主要介绍了Docker之cAdvisor的安装使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Ubuntu 16.04安装使用Docker教程

    Ubuntu 16.04安装使用Docker教程

    本篇文章主要介绍了Ubuntu 16.04安装使用Docker教程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Docker配置MySql环境的实现步骤

    Docker配置MySql环境的实现步骤

    通过使用Docker,开发人员可以更容易地构建、测试和交付应用程序,同时减少了环境配置和依赖项管理的复杂性,本文主要介绍了Docker配置MySql环境的实现步骤,文中通过示例代码介绍的非常详细,感兴趣的可以了解一下
    2024-02-02
  • Docker的基本使用笔记

    Docker的基本使用笔记

    Docker是一种可以把应用程序自动部署到容器的开源引擎,他和虚拟化相比具有轻量和快速部署删除的特点,可以使软件开发偏向于微服务架构方向。从资源成本和管理方式上都比传统的虚拟化有着太多的优势,但是对运行环境的要求较高。
    2017-04-04
  • 用docker一键部署前后端分离项目的详细流程

    用docker一键部署前后端分离项目的详细流程

    这篇文章主要介绍了如何用docker一键部署前后端分离项目的详细流程,通过图文结合的方式给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-03-03
  • 使用Dockerfile构建docker镜像

    使用Dockerfile构建docker镜像

    这篇文章主要介绍了使用Dockerfile构建docker镜像的方法,帮助大家更好的理解和学习使用docker,感兴趣的朋友可以了解下
    2021-04-04
  • docker内的容器如何与宿主机共享IP的方法

    docker内的容器如何与宿主机共享IP的方法

    本文主要介绍了docker内的容器如何与宿主机共享IP的方法,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 写给前端的nginx配置指南基于docker所有配置秒级运行(最新讲解)

    写给前端的nginx配置指南基于docker所有配置秒级运行(最新讲解)

    这篇文章主要介绍了写给前端的nginx配置指南基于docker所有配置秒级运行,通过 docker 高效学习 nginx 配置,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • docker-compose启动mysql双机热备互为主从的方法实现

    docker-compose启动mysql双机热备互为主从的方法实现

    本文主要介绍了docker-compose启动mysql双机热备互为主从的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07

最新评论