婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 手把手教你實現Docker 部署 vue 項目

手把手教你實現Docker 部署 vue 項目

熱門標簽:淘寶辦理400電話是多少 網絡電話外呼系統開發 福州語音電銷機器人招商 滴滴急救中心地圖標注 北海智能電銷機器人公司 艾澤拉斯地圖標注 外呼線路隨意切換嗎 菏澤自動電銷機器人公司 申請400電話收費標

1.寫在前面:

Docker 作為輕量級虛擬化技術,擁有持續集成、版本控制、可移植性、隔離性和安全性等優勢。本文使用Docker來部署一個vue的前端應用,并盡可能詳盡的介紹了實現思路和具體步驟,以方便有類似需要的同學參考。

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,該容器包含了應用程序的代碼、運行環境、依賴庫、配置文件等必需的資源,通過容器就可以實現方便快速并且與平臺解耦的自動化部署方式,無論你部署時的環境如何,容器中的應用程序都會運行在同一種環境下。(更多詳情請移步docker官網查看docker)

默認已經安裝了 docker,@vue/cli

相關版本:

  • Docker version 18.09.2, build 6247962
  • vue cli --version 3.3.0
  • macOS Mojave Verison 10.14.1

運行環境為macOS,如果與閱讀者操作系統之間存在差異,請自行調整

相關鏡像:

  • nginx:latest
  • node:latest

2.具體實現:

  • 用 vue cli 創建一個vue項目,修改一下創建出來的項目,在頁面上寫一個前端接口請求,構建一版線上資源 ,基于nginx docker鏡像構建成一個前端工程鏡像,然后基于這個前端工程鏡像,啟動一個容器 vuenginxcontainer。
  • 啟動一個基于 node 鏡像的容器 nodewebserver,提供后端接口。
  • 修改 vuenginxcontainer 的 nginx 配置,使前端頁面的接口請求轉發到 nodewebserver 上。
  • 稍作優化和改進。

3 創建 vue 應用

3.1 vue cli 創建一個vue項目

運行命令

yarn serve / npm run serve

訪問 http://localhost:8081

3.2 改寫

稍微改寫一下頁面,在App.vue中 傳入HelloWorld 組件中的 msg 改為Hello Docker ; created 生命周期中加入一個接口請求

import axios from 'axios';

……

axios.get('/api/json', {
 params: {}
}).then(
 res => {
 console.log(res);
 }
).catch(
 error => {
  console.log(error);
 }
)

……

這時候會在頁面控制臺看到一個報錯信息:

/api/json 接口 404,當然此時這個接口還不存在,暫時寫到這里,一會再調這個接口。

3.3 構建vue項目

運行命令

yarn build / npm run build

此時工程根目錄下多出一個 dist

文件夾

如果將該dist目錄整個傳到服務器上,部署成靜態資源站點就能直接訪問到該項目。

接下來就來構建一個這樣的靜態資源站點。

4 構建vue應用鏡像

nginx 是一個高性能的HTTP和反向代理服務器,此處我們選用 nginx 鏡像作為基礎來構建我們的vue應用鏡像。

4.1 獲取 nginx 鏡像

docker pull nginx
  • docker 鏡像(Image)一個特殊的文件系統。Docker鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。 鏡像不包含任何動態數據,其內容在構建之后也不會被改變。
  • docker 鏡像相關操作有: 搜索鏡像 docker search [REPOSITORY[:TAG]] 、拉取鏡像 docker pull [REPOSITORY[:TAG]] 、查看鏡像列表 docker image ls 、刪除鏡像: docker image rm [REPOSITORY[:TAG]] / docker rmi [REPOSITORY[:TAG]] 等等。
  • docker 鏡像名稱由REPOSITORY和TAG組成 [REPOSITORY[:TAG]] ,TAG默認為latest

4.2 創建 nginx config配置文件

在項目根目錄下創建 nginx 文件夾,該文件夾下新建文件 default.conf

server {
 listen  80;
 server_name localhost;

 #charset koi8-r;
 access_log /var/log/nginx/host.access.log main;
 error_log /var/log/nginx/error.log error;

 location / {
  root /usr/share/nginx/html;
  index index.html index.htm;
 }

 #error_page 404    /404.html;

 # redirect server error pages to the static page /50x.html
 #
 error_page 500 502 503 504 /50x.html;
 location = /50x.html {
  root /usr/share/nginx/html;
 }
}

該配置文件定義了首頁的指向為 /usr/share/nginx/html/index.html , 所以我們可以一會把構建出來的index.html文件和相關的靜態資源放到 /usr/share/nginx/html 目錄下。

4.3 創建 Dockerfile 文件

FROM nginx
COPY dist/ /usr/share/nginx/html/
COPY nginx/default.conf /etc/nginx/conf.d/default.conf
  • 自定義構建鏡像的時候基于Dockerfile來構建。
  • FROM nginx 命令的意思該鏡像是基于 nginx:latest 鏡像而構建的。
  • COPY dist/ /usr/share/nginx/html/ 命令的意思是將項目根目錄下dist文件夾下的所有文件復制到鏡像中 /usr/share/nginx/html/ 目錄下。
  • COPY nginx/default.conf /etc/nginx/conf.d/default.conf 命令的意思是將nginx目錄下的default.conf 復制到 etc/nginx/conf.d/default.conf,用本地的 default.conf 配置來替換nginx鏡像里的默認配置。

4.4 基于該Dockerfile構建vue應用鏡像

運行命令(注意不要少了最后的 “.” )

docker build -t vuenginxcontainer .

-t 是給鏡像命名 . 是基于當前目錄的Dockerfile來構建鏡像

查看本地鏡像,運行命令

docker image ls | grep vuenginxcontainer

到此時我們的 vue 應用鏡像 vuenginxcontainer 已經成功創建。接下來,我們基于該鏡像啟動一個 docker

容器。

4.5 啟動 vue app 容器

Docker 容器Container: 鏡像運行時的實體。鏡像(Image)和容器(Container)的關系,就像是面向對象程序設計中的類和實例一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等 。

基于 vuenginxcontainer 鏡像啟動容器,運行命令:

docker run \

-p 3000:80 \

-d --name vueApp \

vuenginxcontainer

docker run 基于鏡像啟動一個容器
-p 3000:80 端口映射,將宿主的3000端口映射到容器的80端口
-d 后臺方式運行
--name 容器名 查看 docker 進程

docker ps

可以發現名為 vueApp的容器已經運行起來。此時訪問 http://localhost:3000

應該就能訪問到該vue應用:

目前為止,已經通過 docker容器部署了一個靜態資源服務,可以訪問到靜態資源文件。還有 /api/json這個接口數據沒有,接下來我們來解決一下這個問題。

5 接口服務

再部署一個 node 的容器來提供接口服務

5.1 express 服務

用 node web 框架 express 來寫一個服務,注冊一個返回json數據格式的路由 server.js:

'use strict';

const express = require('express');

const PORT = 8080;
const HOST = '0.0.0.0';

const app = express();
app.get('/', (req, res) => {
 res.send('Hello world\n');
});

app.get('/json', (req, res) => {
 res.json({
  code: 0,
  data :'This is message from node container'
 })
});

app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);

運行該 express 應用需要 node 環境,我們基于 node 鏡像來構建一個新鏡像

5.2 獲取 node 鏡像

docker pull node

5.3 編寫 Dockerfile 將 express 應用 docker

FROM node

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 8080
CMD [ "npm", "start" ]

構建鏡像的時候 node_modules 的依賴直接通過 RUN npm install 來安裝,項目中創建一個 .dockerignore 文件來忽略一些直接跳過的文件:

node_modules
npm-debug.log

5.4 構建 nodewebserver 鏡像

運行構建命令:

 docker build -t nodewebserver .

5.5 啟動 nodeserver 容器

基于剛剛構建的 nodewebserver 鏡像 啟動一個名為 nodeserver 的容器來提供接口服務8080端口,并映射宿主的5000端口

docker run \

-p 5000:8080 \

-d --name nodeserver \

nodewebserver

查看當前docker進程

docker ps

可以發現 nodeserver 的容器也正常的運行起來。訪問以下 http://localhost:5000/json

能訪問到前面寫的json數據

到目前為止,后端接口服務也正常啟動了。只需最后把頁面請求的接口轉發到后端接口服務就能調通接口。

6. 跨域轉發

想要將 vueApp 容器 上的請求轉發到 nodeserver 容器上。首先需要知道 nodeserver 容器的 ip 地址和端口,目前已知 nodeserver 容器內部服務監聽在 8080 端口,還需要知道 ip 即可。

6.1 查看 nodeserver 容器的 ip 地址:

查看容器內部 ip 有多種方式,這里提供兩種:

進入容器內部查看

docker exect -it 02277acc3efc bash
cat /etc/hosts

docker inspect [ containerId ] 直接查看容器信息:

docker inspect 02277acc3efc

在其中找到 Networks 相關配置信息:

記錄下node服務容器對應的ip,一會兒配置nginx轉發的時候會用到。

6.2 修改 nginx 配置

Nginx 配置 location 指向 node 服務 default.conf (前端想要了解的Nginx,關于Nginx的配置已經 location 的具體寫法可以參考(一文弄懂Nginx的location匹配 ))

添加一條重寫規則,將 /api/{path} 轉到目標服務的 /{path} 接口上。 在前面的nginx/default.conf文件中加入:

location /api/ {
 rewrite /api/(.*) /$1 break;
 proxy_pass http://172.17.0.2:8080;
}

修改完了之后意識到一個問題:vueApp 容器是基于 vuenginxcontainer 這個鏡像運行的,而在一開始構建鏡像的時候是將 nginx配置 default.conf 直接構建進去了。因此如果需要修改 default.conf 還得再重新構建一個新的鏡像,再基于新鏡像來運行新的容器。

7. 改進

能不能每次修改配置文件后直接重啟容器就能讓新配置生效,答案當然是有。

在構建鏡像的時候 不把 Nginx 配置復制到鏡像中,而是直接掛載到宿主機上,每次修改配置后,直接重啟容器即可。

7.1 修改 Dockerfile 文件

把 vueclidemo 項目下的 Dockerfile 修改一下

FROM nginx
COPY dist/ /usr/share/nginx/html/
COPY nginx/default.conf /etc/nginx/conf.d/default.conf

COPY nginx/default.conf /etc/nginx/conf.d/default.conf 命令刪除,nginx配置都通過掛載命令掛載在宿主機上。再看 COPY dist/ /usr/share/nginx/html/ 命令,如果每次構建的項目dist/下的內容變動都需要重新走一遍構建新鏡像再啟動新容器的操作,因此這條命令也可以刪除,使用掛載的方式來啟動容器。

7.2 重新運行vue應用容器

直接基于nginx鏡像來啟動容器 vuenginxnew ,運行命令:

docker run \

-p 3000:80 \

-d --name vuenginxnew \

--mount type=bind,source=$HOME/SelfWork/docker/vueclidemo/nginx,target=/etc/nginx/conf.d \

--mount type=bind,source=$HOME/SelfWork/docker/vueclidemo/dist,target=/usr/share/nginx/html \

nginx
  • --mount type=bind,source={sourceDir},target={targetDir} 將宿主機的sourceDir 掛載到容器的 targetDir 目錄上。
  • 此處運行的命令較長,如果每次重新輸入難免麻煩,我們可以將完整的命令保存到一個 shell 文件 vueapp.sh 中,然后直接執行 sh vueapp.sh 。

這樣就能每次修改了nginx配置或者 重新構建了vue應用的時候,只需重啟容器就能立馬生效。 此時我們再訪問 http://localhost:3000/api/json 能看到接口能正常返回,說明轉發生效了。

至此接口服務的轉發也調通了。

7.3 配置負載均衡

后端服務一般都是雙機或者多機以確保服務的穩定性。我們可以再啟動一個后端服務容器,并修改 nginx 的配置 來優化資源利用率,最大化吞吐量,減少延遲,確保容錯配置。

基于前面 4.5 節的類似操作,新啟動一個容器,并基于 5.1 節類似的操作,查看到 新容器的 IP (172.17.0.3)

修改一下 nginx/default.conf (新增 upstream ,修改 location /api/ 中的 proxy_pass):

 upstream backend {
  server 172.17.0.2:8080;
  server 172.17.0.3:8080;
 }

 ……

 location /api/ {
  rewrite /api/(.*) /$1 break;
  proxy_pass backend;
 }

8. 寫在后面

不習慣命令行的同學可以選用Kitematic 來管理 docker 容器的狀態、數據目錄和網絡。所有對容量的操作都可以可視化的操作,這里就不做過多介紹了,有興趣的同學可以自行體驗下。

9 總結

docker提供了非常強大的自動化部署方式與靈活性,對多個應用程序之間做到了解耦,提供了開發上的敏捷性、可控性以及可移植性。本文以vue項目為例實現一個前后分離項目使用docker部署的完整步驟,希望能給想要擁抱 docker 的同學帶來一點幫助。

參考資源

docker 官網
nginx 官網
docker 從入門到實踐
Kitematic user guide
前端想要了解的Nginx
一文弄懂Nginx的location匹配

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:滄州 亳州 三沙 延安 資陽 混顯 賀州 丹東

巨人網絡通訊聲明:本文標題《手把手教你實現Docker 部署 vue 項目》,本文關鍵詞  手把手,教你,實現,Docker,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《手把手教你實現Docker 部署 vue 項目》相關的同類信息!
  • 本頁收集關于手把手教你實現Docker 部署 vue 項目的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    精品视频全国免费看| 欧美丝袜丝nylons| 中文字幕亚洲电影| 91精品久久久久久久久99蜜臂| 国产盗摄一区二区三区| 看国产成人h片视频| 日本va欧美va瓶| 蜜臀国产一区二区三区在线播放| 亚洲精品国产成人久久av盗摄| 欧美国产一区视频在线观看| 久久嫩草精品久久久精品一| 91精品综合久久久久久| 欧美日韩一区二区三区四区| 欧美日韩一级二级| 56国语精品自产拍在线观看| 欧美亚洲自拍偷拍| 在线视频欧美精品| 欧美伊人久久久久久久久影院| 91免费看视频| 欧美三级视频在线观看| 欧美群妇大交群的观看方式| 91精品久久久久久久久99蜜臂| 777欧美精品| 欧美精品一区视频| 国产欧美精品在线观看| 国产日韩在线不卡| 亚洲人成网站色在线观看| 一区二区三区中文字幕电影| 亚洲国产美国国产综合一区二区| 亚洲国产精品综合小说图片区| 五月激情综合网| 国产一区二区三区四区五区美女 | 亚洲国产成人porn| 午夜欧美一区二区三区在线播放| 偷窥少妇高潮呻吟av久久免费| 麻豆精品视频在线| www.久久精品| 欧美日韩国产经典色站一区二区三区| 欧美日韩不卡一区| 国产无一区二区| 亚洲摸摸操操av| 日本伊人色综合网| 国产在线不卡一区| 在线免费精品视频| 精品国产亚洲在线| 亚洲欧洲美洲综合色网| 午夜精品久久久久久久久久| 韩国精品主播一区二区在线观看 | 日韩av一级片| 国产精品99久久久久久有的能看| 成人激情免费视频| 日韩一级高清毛片| ●精品国产综合乱码久久久久 | 成人免费高清在线观看| 色婷婷久久一区二区三区麻豆| 91精品国产麻豆| 国产精品99久久久| ...xxx性欧美| 日本韩国一区二区三区| 亚洲精品亚洲人成人网| 91精品国产综合久久精品| 99国产麻豆精品| 欧美日韩国产欧美日美国产精品| 欧美精品一区二区久久婷婷| 亚洲国产精品成人久久综合一区| 蜜臀精品久久久久久蜜臀| 国产真实乱子伦精品视频| 国产精品进线69影院| 另类小说视频一区二区| 一区二区三区欧美| 成人综合婷婷国产精品久久| 国产亚洲精品久| 日韩电影在线观看网站| 国产精品一区久久久久| 亚洲成人一区二区| 国产在线麻豆精品观看| 成人国产亚洲欧美成人综合网| 亚洲综合一二区| 国产69精品一区二区亚洲孕妇| 亚洲二区在线观看| 亚洲欧美日韩精品久久久久| 午夜电影久久久| 日韩一区二区电影| 国产乱人伦偷精品视频不卡 | 欧美日精品一区视频| 亚洲欧美综合另类在线卡通| 久久日韩精品一区二区五区| 一区二区三区不卡视频在线观看 | 国产欧美一区二区精品仙草咪| 五月天亚洲精品| 成人三级在线视频| 午夜日韩在线观看| 精品久久久久久久久久久久久久久| 成人免费高清视频| 91久久精品国产91性色tv| 国产精品久久久久久久久久免费看| 国产在线乱码一区二区三区| 国产嫩草影院久久久久| 欧美成人国产一区二区| 午夜精品福利一区二区三区av| 91精品国产一区二区三区| 国产精品毛片久久久久久久| 精品久久久久久久久久久久久久久久久 | 欧美国产日本韩| 麻豆91在线看| 欧美大片国产精品| 美女视频一区二区| 精品久久久久一区| 国产精品系列在线观看| 欧美高清在线精品一区| gogo大胆日本视频一区| 99热在这里有精品免费| 国产精品剧情在线亚洲| 99国产精品久| 亚洲成人精品影院| 91精品国产福利在线观看| 麻豆91在线看| 中文字幕在线免费不卡| 欧美性感一类影片在线播放| 日韩成人精品在线| 国产日产亚洲精品系列| 粉嫩绯色av一区二区在线观看| 中文字幕中文乱码欧美一区二区 | 激情伊人五月天久久综合| 久久色视频免费观看| 91久久精品日日躁夜夜躁欧美| 美女视频黄久久| 综合久久久久久| 欧美一区二区三区影视| 国产91丝袜在线观看| 亚洲线精品一区二区三区| 精品粉嫩aⅴ一区二区三区四区| www.在线欧美| 蜜臀av国产精品久久久久| 国产精品视频观看| 欧美日韩免费观看一区二区三区| 黄网站免费久久| 亚洲一区二区三区中文字幕在线| 日韩一区二区三区免费观看| 国产成人在线网站| 午夜亚洲福利老司机| 中文字幕一区二区三区视频| 欧美一级片在线看| 欧美主播一区二区三区| 国产成人午夜视频| 日韩精品成人一区二区三区 | 日韩伦理免费电影| 日韩欧美精品三级| 欧美日韩综合色| 成人国产精品免费网站| 免费观看日韩av| 亚洲一区二区av在线| 亚洲国产精品精华液2区45| 91精品欧美一区二区三区综合在| 99r国产精品| 国产成人午夜电影网| 美女看a上一区| 亚洲成人av一区二区三区| 中文字幕在线不卡| 国产嫩草影院久久久久| 久久久国产精品不卡| 日韩午夜av一区| 欧美日韩国产高清一区二区三区| av一二三不卡影片| 成人永久免费视频| 国产老女人精品毛片久久| 久久99九九99精品| 精品一区二区国语对白| 日本欧洲一区二区| 日韩电影在线观看一区| 日韩激情一二三区| 美女看a上一区| 激情五月激情综合网| 精品无人码麻豆乱码1区2区| 久久国产日韩欧美精品| 韩国三级电影一区二区| 国产夫妻精品视频| 成人动漫在线一区| 99久久精品国产网站| 色噜噜狠狠色综合中国| 欧美在线观看一二区| 欧美丰满少妇xxxxx高潮对白| 欧美电影影音先锋| 日韩欧美高清在线| 久久久亚洲精品一区二区三区| 26uuu精品一区二区| 久久精品亚洲乱码伦伦中文| 国产欧美日韩在线视频| 欧美激情综合网| 一区二区在线免费| 亚洲不卡av一区二区三区| 日韩精品一级二级| 国产一区999| 色综合久久中文综合久久97| 欧美日韩激情一区二区| 欧美成人三级电影在线| 国产农村妇女毛片精品久久麻豆| 亚洲女性喷水在线观看一区| 三级在线观看一区二区| 国产一区二区精品在线观看|