使用 Caddy 制作前端 Docker 鏡像

簡介

今年夏天又開始新的創(chuàng)業(yè)項目,忙得沒日沒夜,好久沒寫博客了。
但是也許 Docker 越來越火,知乎的專欄每天都有新的人關注,不抽空寫點太對不起大家。
之前寫過 API 鏡像,今天來說說前端鏡像。
本文適用于任何一個需要編譯的前端框架,我們利用 Docker 的兩段構建,用一個 Dockerfile 一氣呵成的產(chǎn)出不含源碼的生產(chǎn)鏡像。
鏡像內(nèi)用了 Caddy 當作服務器,又經(jīng)過了半年的發(fā)展,雖然版本還沒到1,但 Caddy 已經(jīng)足夠強大和健壯了。

Caddyfile

為了能讓項目在 Caddy 鏡像中被訪問,我們在項目根目錄建一個叫 Caddyfile 的文件,供后續(xù)鏡像內(nèi)啟動服務時使用。

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 服務器。就不再羅嗦這里應該怎么配置了。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容