使用 Caddy 製作前端 Docker 映象

Muninn發表於2017-10-15

簡介

今年夏天又開始新的創業專案,忙得沒日沒夜,好久沒寫部落格了。
但是也許 Docker 越來越火,知乎的專欄每天都有新的人關注,不抽空寫點太對不起大家。
之前寫過 API 映象,今天來說說前端映象。
本文適用於任何一個需要編譯的前端框架,我們利用 Docker 的兩段構建,用一個 Dockerfile 一氣呵成的產出不含原始碼的生產映象。
映象內用了 Caddy 當作伺服器,又經過了半年的發展,雖然版本還沒到1,但 Caddy 已經足夠強大和健壯了。

Caddyfile

為了能讓專案在 Caddy 映象中被訪問,我們在專案根目錄建一個叫 Caddyfile 的檔案,供後續映象內啟動服務時使用。

0.0.0.0:80
root /www
gzip
log stdout
errors stdout複製程式碼

解釋一下,我們未來會把編譯好的專案放在容器的 /www 目錄。
伺服器在容器的80埠。啟用gzip,並且將日誌輸出在stdout--這是 Docker 的推薦做法。

Dockerfile

然後就開始我們的二段構建了:

# build
FROM node:8 as builder

ADD . /src

WORKDIR /src

RUN npm i && npm run build

# product
FROM abiosoft/caddy

COPY --from=builder /src/dist /www

COPY Caddyfile /etc/Caddyfile複製程式碼

我們首先使用 node 的官方映象對專案進行編譯,工作目錄為 /src ,編譯結果為 /src/dist 。
然後我們再將 dist 資料夾複製為 caddy 映象的 /www 目錄。
最後我們將我們的 Caddyfile 覆蓋映象原版的。

值得一提的是,我們使用的 abiosoft/caddy 這個映象並非官方版本,但是比較活躍,感興趣也可以去看原始碼。

使用映象

如果一臺物理機只准備使用這一個映象,那麼我們之前的 Caddyfile 不應該限定80埠,並且應該指定域名,以此來使用 Caddy 的自動 HTTPS 特性。
做了如此修改後將映象啟動時繫結80和443埠就好。

但是大部分時候,我們只是讓映象的80埠對映在主機的某個埠,主機上還有一層 Web 伺服器。就不再羅嗦這裡應該怎麼配置了。

相關文章