首先到這裡安裝對應你 OS 版本的 docker,這邊範例使用的版本是 v4.20,Windows 版本安裝好後需要重新開機。
可能會需要更新 WSL
首先我們可以先輸入以下指令:
如果想看有哪些 image 可以安裝可以到 Docker Hub 上找。
安裝好會顯示這樣:
透過 GUI 也可以看到:
透過我們剛剛安裝的 ubuntu
image 讓它跑起來執行變成 container,輸入以下指令:
這個指令的用意:
docker run
: Create and run a new container from an image
-i
, --interactive
: Keep STDIN open even if not attached
-t
, --tty
: Allocate a pseudo-TTY
ubuntu
: image name
bash
: command, 這邊代表
這意味著我們可以在任何作業系統透過 docker 來執行 ubuntu 了。
簡單來說就是把你專案的程式碼跟環境一起打包起來變成一個 image,之後不管在哪一台機器上,只要有安裝 Docker,我們就可以透過 Docker 來開啟這個 image 並建立出 container(就是讓你程式跑起來)。
這邊舉例一個簡單的範例:打包 vite 的範例網站
首先在你的專案跟目錄內建立 Dockerfile
,接著我們要來選擇合適的 base image。
Docker 的 image 有點類似疊積木的方式來建構的,我們可以去 Docker Hub 上找適合你程式碼環境的 base image,然後再慢慢添加其他 image 成你想要的樣子。
例如我這個專案需要使用到 Node.js,所以我會需要一個有 Node.js 環境的 image,可以有兩個選擇:
當然選能做越少事的那一個囉,我們採用第一個方案。
所以我們在 Dockerfile
第一行輸入:
node
代表的是 image name,而冒號後面的是 tag,這邊我選擇的 lts
意思就是 Long-term support 穩定版本;alpine
代表我使用的是基於 Alpine Linux OS,好處是它檔案很小只有 7 MB 左右而已。
如果你只有寫 FROM node:lts
,那此 base image 會是基於 ubuntu,此時檔案大小大概會是 77 MB 左右,差蠻多的。
有了 Node.js 環境接下來就要把我們專案的 code 包進去,首先我們使用 WORKDIR
指令來切換工作目錄。
接著我們把目前專案內的所有檔案都複製到當前工作目錄:
有了環境以及程式碼,現在我們就要來安裝相關的依賴套件,我們可以使用 RUN
來執行指令透過 npm
來安裝 http-server
和專案所需套件,最後再清除 cache ,清除快取的目的是為了讓我們最後 build 出來的 image 不要包含這些 cache,減少 image 檔案大小。
現在我們要把我們專案給跑起來,這邊我用 vite 來當範例,首先我們先跑 npm run build
透過 vite 幫我們建構出生產環境中靜態網站所需的檔案:
透過 vite 建置好後,理論上在專案根目錄下會有一個 ./dist
資料夾,我們需要透過 http-server dist
指令來建立執行靜態伺服器。但這邊特別注意因為該指令是常駐程式,所以不能使用 RUN
,我們需要透過 CMD
這個來執行該指令:
同時我們也需要使用 EXPOSE
來建立監聽 port,這邊將使用 8080(http-server 這個套件預設的 Port):
根據上述所敘,完整版 Dockerfile
如下:
接著我們在終端機輸入以下指令(記得要在專案根目錄),就可以編譯出我們自己的 image 囉:
vue-project-server
這邊是你 image 名稱.
是你 Dockerfile 檔案路徑現在我們有 image 了,要執行的話也很簡單,只需要輸入:
-p
: 指定 Port,這邊我用了一個範例 1234:8080,意思是你連線的 Port 是 :1234 然後對應到的是你這個 image 內部 Port 8080。-rm
: 單純防呆說當有重覆的 container 是打開的就自動刪除--name
: 單純替你的 container 命名vue-project-server
: 你要執行的 image 名稱當你執行後理論上就成功把你的 image 跑起來了,而且會自動建立出靜態伺服器,然後你只需要在瀏覽器上輸入 localhost:1234
就可以瀏覽了!
Docker