利用docker-compsoe部署前后端分離的項(xiàng)目方法
說在前面
我們都知道,docker可以實(shí)現(xiàn)很簡(jiǎn)便的部署環(huán)境?,F(xiàn)在我們有一個(gè)前后端分離的項(xiàng)目,前端基于Vue開發(fā)、利用Webpakc打包為dist文件夾。后端則是一個(gè)Node.js服務(wù),提供API接口,前端和后端是分離的。所以我們肯定是前端項(xiàng)目一個(gè)container,后臺(tái)項(xiàng)目也是一個(gè)container。那么如果是在生產(chǎn)環(huán)境,就會(huì)產(chǎn)生跨域問題。前端的請(qǐng)求要反向代理到后臺(tái)。大家肯定首先想到的就是使用 Nginx 設(shè)置 proxy_pass 。是的沒有錯(cuò)。那么我們有了這些想法。我們?nèi)绾瓮ㄟ^ docker-compose 來實(shí)現(xiàn)呢?
開始動(dòng)手
其實(shí)我也是才開始了解docker的。所以有很多不明白的地方,例如在docker里面,是通過image生成一個(gè)container,那么這個(gè)container,就可以當(dāng)作是一個(gè)獨(dú)立的系統(tǒng),這個(gè)系統(tǒng)也就有自己獨(dú)立的端口。那么就像我們剛剛那樣的需求,假設(shè)我們的前端在 container1 里面暴露80端口,同時(shí)映射到宿主機(jī)的80端口,后端在 container2 里面暴露3000端口,同時(shí)映射到宿主機(jī)的3000端口。那我們反向代理請(qǐng)求的時(shí)候,是通過宿主機(jī)來反向代理呢,還是通過container來實(shí)現(xiàn)呢?我在網(wǎng)上查閱并學(xué)習(xí)了很多其他大佬的文章,還有官網(wǎng)的文檔。發(fā)現(xiàn)直接通過container就可以實(shí)現(xiàn)這種需求。為什么呢?因?yàn)閐ocker-compose,會(huì)將所有的container構(gòu)建在同一網(wǎng)絡(luò)下,我們要找其他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是我們的前端項(xiàng)目,server是我們的后端項(xiàng)目。 下面再來看看我們的 docker-compose.yml :
version: '3' services: music-web: #前端項(xiàng)目的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/ #掛載項(xiàng)目 depends_on: - music-server music-server: #后端項(xiàng)目的service name container_name: 'music-server-container' build: ./server #根據(jù)server目錄下面的Dockerfile構(gòu)建鏡像 restart: always expose: - 3000
可以看見,我們通過 volumes 屬性將宿主機(jī)的 nginx.conf 掛載到容器內(nèi)的nginx配置文件,用來覆蓋原有的配置文件,同時(shí)也將 dist 掛載到容器內(nèi)。我們將前端項(xiàng)目的容器暴露并映射給宿主機(jī)的80端口,我們將后端項(xiàng)目的容器暴露3000端口。那么我們?cè)谀睦飳?shí)現(xiàn)反向代理請(qǐng)求呢?請(qǐng)看 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項(xiàng)目 location / { index index.html index.htm; #添加屬性。 root /usr/share/nginx/html; #站點(diǎn)目錄 } #音樂app項(xiàng)目設(shè)置代理轉(zhuǎn)發(fā) 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 是我們后端項(xiàng)目的服務(wù)名,我們通過服務(wù)名來找到這個(gè)容器,這樣就實(shí)現(xiàn)了反向代理。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Docker部署前后端分離項(xiàng)目的實(shí)現(xiàn)示例
- docker-compose+nginx部署前后端分離的項(xiàng)目實(shí)踐
- 使用Jenkins+docker打包部署后端服務(wù)的實(shí)現(xiàn)
- Docker+Nginx打包部署前后端分離步驟實(shí)現(xiàn)
- 教你使用Docker?Compose一鍵部署前后端分離項(xiàng)目
- 使用Docker部署前后端分離項(xiàng)目的完整步驟
- 手把手帶大家通過Docker部署前后端分離項(xiàng)目(親測(cè)可用)
- Docker部署前后端分離項(xiàng)目的三種方式小結(jié)
- 用docker一鍵部署前后端分離項(xiàng)目的詳細(xì)流程
- Docker部署后端項(xiàng)目的實(shí)現(xiàn)步驟
相關(guān)文章
IDEA集成Docker實(shí)現(xiàn)打包的方法
本文主要介紹了IDEA集成Docker實(shí)現(xiàn)打包的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01基于Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持續(xù)集成交付環(huán)境的詳細(xì)教程
K8S全稱是Kubernetes,是一個(gè)全新的基于容器技術(shù)的分布式架構(gòu)領(lǐng)先方案,這篇文章主要介紹了基于Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持續(xù)集成交付環(huán)境(環(huán)境搭建篇),對(duì)docker K8S持續(xù)集成交付環(huán)境相關(guān)知識(shí)感興趣的朋友一起看看吧2021-05-05docker-compose如何實(shí)現(xiàn)滾動(dòng)更新
這篇文章主要介紹了docker-compose如何實(shí)現(xiàn)滾動(dòng)更新方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05docker安裝Elasticsearch7.6集群并設(shè)置密碼
這篇文章主要介紹了docker安裝Elasticsearch7.6集群并設(shè)置密碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06