近幾年來,Docker
技術的應用已經愈來愈流行,目前已經產生前端工程Docker
化,身爲前端開發的我,花了幾天時間研究了下 Docker
的知識點,並實現了 Docker
本地部署 Vue
項目。但願能夠給有須要的同窗一點幫助。javascript
Docker
是一個開源的應用容器引擎,讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的Linux
機器上,也能夠實現虛擬化,容器是徹底使用沙箱機制,相互之間不會有任何接口。簡言之,就是能夠在 Linux
上鏡像使用的這麼一個容器。點擊查看更多能夠了解更多Docker
知識。php
首先,目前產生前端工程 Docker
化的趨勢,學習而且掌握這個技術有利於提升自身競爭力。
其次,前端 Docker
化 有利於前端開發工程師更專一於開發自己,弱化軟件環境,下降項目部署難度。css
brew cask install docker
複製代碼
本人是 mac
電腦,因此介紹下 mac
下的安裝方式,windows
或 其餘系統的同窗,能夠點擊查看更多瞭解其餘安裝方式。html
在載入 Docker app
後,點擊 Next
,可能會詢問你的 macOS
登錄密碼,你輸入便可。以後會彈出一個 Docker
運行的提示窗口,狀態欄上也有有個小鯨魚的圖標。前端
啓動終端後,經過命令能夠檢查安裝後的 Docker 版本。vue
$ docker --version
Docker version 19.03.8, build afacb8b
複製代碼
首先,選擇一個建立好的Vue項目(本案例是採用一個先後端分離的單頁Vue項目)
接下來,運行 npm run build
命令,生成一個打包的 dist
文件(ps:具體打包命名根據項目配置而定。)你會發現,項目中多了一個 dist
文件夾。java
本案例的Vue
項目是一個先後端分離項目,前端界面在服務器上只須要能被外部訪問到便可,因此直接使用 Nginx 的 Docker 來部署就行。nginx
docker pull nginx:alpine
複製代碼
本博主推薦使用 alpine
版本,由於這個體積小,只須要 19.7MB,而 latest
版本須要 127MB。docker
首先,在項目根目錄中新建一個文件,命名爲 Dockerfile
npm
FROM nginx:alpine
複製代碼
FROM
:定製的鏡像都是基於FROM
的鏡像,這裏的nginx
就是定製須要的基礎鏡像。後續的操做都是基於nginx
。
docker build -t vuetest:v1 .
複製代碼
意思是當前目錄的
Dockerfile
建立了一個鏡像,建立鏡像的倉庫是vuetest, 標籤是v1。
docker images
複製代碼
命令執行後,能夠查看鏡像信息。
docker run -P -d vuetest:v1
複製代碼
查看端口信息
docker ps
複製代碼
訪問localhost:32770
納尼?這算哪門子的部署?哈哈哈,小夥伴們莫急,且聽我慢慢道來!在Dockerfile
中咱們只是引入了
nginx
鏡像,咱們開發的代碼並不在其中。因此在打包鏡像時,須要將咱們開發的代碼也打包其中。
FROM nginx:alpine
COPY ./dist/ /usr/share/nginx/html/
複製代碼
在上次的
Dockerfile
文件中,添加了COPY
內容,意思是將dist
文件,複製到/usr/share/nginx/html/
中。其中/usr/share/nginx/html/
是Nginx
的默認文件路徑。
docker build -t vuetest:v1 .
docker images
docker run -P -d vuetest:v1
docker ps
複製代碼
咱們看到終端輸出的
port
是32782,咱們運行 localhost:32782,發現訪問ok,可是頁面一刷新就提示nginx 404
。
這個緣由是由於在Vue
項目中,咱們使用了history
路由模式。這個模式會致使刷新後找不到當前頁面。這邊打算採用官方推薦的作法,在Nginx
中添加一些配置。
點擊瞭解更多查看更多解決方案。
新建並編輯 nginx.conf
文件內容
server {
listen 80;
server_name localhost;
# uding gzip
gzip on;
gzip_min_length 1k;
gzip_buffers 16 64k;
gzip_http_version 1.1;
gzip_comp_level 9;
gzip_types text/plain application/x-javascript application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
}
複製代碼
解決
404
問題主要是try_files $uri $uri/ /index.html =404;
這段代碼的意思是,若是當前訪問的地址不存在,就指向index.html
另外,爲了解決資源過大問題,這邊採用了gzip壓縮。減小體積。
FROM nginx:alpine
COPY ./dist/ /usr/share/nginx/html/
COPY ./nginx.conf /etc/nginx/conf.d/default.conf
複製代碼
COPY /nginx.conf/etc/nginx/conf.d/default.conf 命令的意思是將根目錄下的
nginx.conf
複製到etc/nginx/conf.d/default.conf
,用本地的nginx.conf
配置來替換nginx
鏡像裏的默認配置。
docker build -t vuetest:v1 .
docker images
docker run -P -d vuetest:v1
docker ps
複製代碼
訪問終端生成好的端口號,刷新ok。大功告成!!!
問題1:命令行太多,記不住哇~還有別的方案嗎?
答:咱們以前下載的 Docker
是具備圖形界面的,咱們能夠配合圖形界面來使用,好比:咱們能夠點擊小鯨魚-Dashboard,查看當前容器的運行狀態,還能夠一鍵點擊訪問配置好的項目頁面地址
問題2:運行的容器名稱能夠自定義嗎?我不想使用默認的!!!
答:固然能夠。
docker run -P -d vuetest:v1
複製代碼
將以上命令改成以下就行:
docker run --name myproject -P -d vuetest:v1
複製代碼
該命令的意思爲運行vuetest:v1鏡像,並將運行的容器名稱設置爲myproject,且在後臺運行容器,並返回容器ID
問題3: 博主能夠提供更多常見的命令嗎?或者高階應用?
答:固然能夠,你們能夠點擊查看更多來學習更多命令。