今天是第 Day 27 天!To-do List API 的功能差不多完成了, 昨天也幫專案加上了環境變數 .env
檔案,為了讓這個 To-do List 到處都可以跑 😆😆😆,最後這幾天會介紹 Docker 和 雲端部署!
這兩項技術也是鼎鼎有名,相信大家應該都有聽過~
那我們就開始吧!
今日大綱:
有沒有看過一隻藍色鯨魚的圖案 🐳 ? 沒錯,它就是 Docker!
Docker 是一個用來「封裝、分發、執行應用程式」的平台,它讓我們的應用程式可以在任何環境下執行,而不用擔心系統的差異。
這跟前面說的 .env
檔案有什麼差別?.env
檔案也是讓我們可以在不同環境下跑。
對~沒錯!.env
檔案的存在也是方便我們可以在不同環境下順利執行程式,不過它跟 Docker 之間的差別是:.env
檔案提供的是「 資料庫或專案上需變動的參數調整 」的需求,讓我不用改程式,只要變更檔案中的設定,就可以跑服務;而 Docker 則是針對「 執行程式的系統環境 」需求,因為已經打包好了,所以把它丟到不同的電腦都可以跑。
Docker 讓你的程式 + 執行環境變成一個可以隨身攜帶的小電腦。
所以為什麼需要 Docker?
在開發中,可能會遇到:
而這些問題,只要交給 Docker 就解決了:
問題 | 解決方式 |
---|---|
環境不一致 | 打包成容器,哪裡都能跑 |
安裝麻煩 | 一行指令就可部署整個系統 |
更新風險高 | 版本固定在 Image 中,不會衝突 |
維護成本高 | 每個服務(API、DB、前端)都可獨立容器化 |
Docker 把你的程式和執行環境(OS、套件、設定)全部打包成一個容器(Container),而其他人只要有 Docker,就能一鍵啟動這個容器。
就像打包一個「 可以自己運作的迷你電腦 」一樣,非常容易!
前面有提到 Docker 就像小型電腦一樣,可以隨身帶著走。所以具備了以下優點:
Docker 有幾個比較核心的概念說明和比喻:
名稱 | 說明 | 比喻 |
---|---|---|
Dockerfile | 告訴 Docker 如何做出 Image 的說明書 | 寫食譜的步驟 |
Image(映像檔) | 描述如何建立容器 | 蛋糕食譜 |
Container(容器) | 按照 Image 內容,實際執行起來的結果 | 按照食譜做出來的蛋糕 🍮 |
而 Docker 的主要功能則是:
功能 | 說明 | 範例 |
---|---|---|
打包應用程式 | 將程式、套件、設定全部打包 | Go + PostgreSQL API |
快速啟動環境 | 幾秒內就可以啟動服務 | docker run -p 8080:8080 app |
一致的執行環境 | 不受系統差異影響 | Windows / macOS / Linux |
版本管理 | Image 有版本標籤(tag) | app:1.0 、app:latest |
多容器協作 | 用 docker-compose 同時啟動多個服務 |
API + Database |
方便部署到雲端 | 雲端主機支援 Docker 原生部署 | AWS ECS、GCP Cloud Run、Azure Container Apps |
了解 Docker 之後,就來安裝吧!
👉 Docker 官網:https://www.docker.com/
安裝 Docker :
apt install docker
或 yum install docker
啟動之後,可在終端機測試:
docker --version
docker run hello-world
Docker 的實際應用:
這邊附上一些常用的指令給大家參考:
指令 | 說明 |
---|---|
docker ps |
列出正在運行的容器 |
docker ps -a |
列出所有容器(包含停止的) |
docker stop <container_id> |
停止容器 |
docker start <container_id> |
啟動容器 |
docker restart <container_id> |
重新啟動容器 |
docker rm <container_id> |
刪除容器(刪除前,必須先停止容器) |
docker logs <container_id> |
查看容器輸出日誌 |
指令 | 說明 |
---|---|
docker images |
列出所有映像檔 |
docker pull <image> |
從 Docker Hub 下載映像檔 |
docker build -t <name> . |
從 Dockerfile 建立映像檔,-t 取名 |
docker rmi <image_id> |
刪除映像檔 |
指令 | 說明 |
---|---|
docker run -it <image> /bin/bash |
以互動模式啟動容器並打開 shell |
docker run -p 8080:8080 <image> |
對應容器端口到本機端口(API 開發必用) |
docker run -d <image> |
在背景執行容器 |
最後要來介紹 Docker 和雲端部署!由於很多服務現在都會希望可以不受網路的限制,在各個地方都可以連線使用,所以幾乎所有的雲平台都支援 Docker!
像是:
所以,只需要上傳 Docker Image,就可以直接啟動服務了! 是不是很方便~