AI赋能如何从Docker小白快速理解、安装并运行一个实例
- 前言
- AI的相关提示词
-
- [第一问:docker desktop的使用方法](#第一问:docker desktop的使用方法)
- 第二问:指定AI的教师角色,让他给我讲明白
-
- [第一個痛苦:那句該死的「在我電腦上明明可以跑!」(It works on my machine)](#第一個痛苦:那句該死的「在我電腦上明明可以跑!」(It works on my machine))
- 第二個痛苦:環境配置的「相依性地獄」 (Dependency Hell)
- 第三個痛苦:新人入職的「第一週魔咒」
- 老師的總結:為什麼是現在?
- 這對你有什麼好處?
- [docker desktop VS docker compose](#docker desktop VS docker compose)
-
-
- [1. 核心角色定義](#1. 核心角色定義)
- [2. 它們的關係:包含與協作](#2. 它們的關係:包含與協作)
- [3. 為什麼我們需要「兩者並存」?](#3. 為什麼我們需要「兩者並存」?)
-
- [**如果只用 Docker Desktop(手動模式):**](#如果只用 Docker Desktop(手動模式):)
- [**如果使用 Docker Compose(自動模式):**](#如果使用 Docker Compose(自動模式):)
- [4. 在 Docker Desktop 介面中看到 Compose](#4. 在 Docker Desktop 介面中看到 Compose)
- 老師的總結
-
- 一个实例
-
- 实例内容
-
- 第一步:準備你的專案資料夾
-
- [1. `app.py` (Python 程式碼)](#1.
app.py(Python 程式碼)) - [2. `requirements.txt` (相依套件清單)](#2.
requirements.txt(相依套件清單)) - [3. `Dockerfile` (定義 Python 的環境)](#3.
Dockerfile(定義 Python 的環境))
- [1. `app.py` (Python 程式碼)](#1.
- [第二步:編寫 `docker-compose.yml` (指揮官的劇本)](#第二步:編寫
docker-compose.yml(指揮官的劇本)) - 第三步:一鍵啟動!
- 第四步:驗證結果
- [老師的重點提醒(這就是 Docker 的魔力):](#老師的重點提醒(這就是 Docker 的魔力):)
前言
AI时代,各种技术爆炸发展。如何在本专业借助AI的东风,稳定航行,持续前进成为一个亟待突破的问题。这次正好因为一个可以自动生成PPT的github项目,需要学习和安装Docker。所以特别记录了一下整个学习过程。
AI的相关提示词
第一问:docker desktop的使用方法
感觉AI生成ppt的github页的使用说明,很可怜的就卡在了第一步的标题。"建议使用Docker"????这是啥。安装完之后。不太会用。于是发出了第一问(如下图所示)。但是感觉每个字都认识,但是没读懂。

第二问:指定AI的教师角色,让他给我讲明白
提示词: 你好,你能以一位经验丰富的docker教师的角色,帮我讲解下为什么要使用docker么。果然,此时AI立马以指定的角色进行输出。觉得例子浅显易懂。第一个例子就狠狠的共情了!!!

全文摘录
你好!快請進,隨便找個位置坐下。很高興你有興趣了解 Docker 的本質,而不僅僅是背誦指令。
作為一名在資訊領域打滾多年的「老司機」,我看過太多開發者在部署應用程式時崩潰的場面。要理解「為什麼要用 Docker」,我們不能只看技術規格,我們得先聊聊在 Docker 出現之前,我們曾經歷過的三大痛苦場景。
第一個痛苦:那句該死的「在我電腦上明明可以跑!」(It works on my machine)
這是我教學生涯中聽過最多次的辯解。
場景是這樣的:
你在自己的筆電上開發了一個網站,用的是 Python 3.8,裝了幾個特定的函式庫。你跑得很順,很開心。
然後你把程式碼傳給負責部署的運維人員(Ops),或者傳給你的同事。
結果他們一跑,報錯了!崩潰了!
為什麼?
- 因為他們的電腦是 Python 3.9。
- 因為他們的 Windows 設定和你的 macOS 不一樣。
- 因為他們少裝了一個你忘了寫在文件裡的套件。
Docker 的解法:
Docker 就像是搬家 。以前搬家,你只搬家具(程式碼),去到新房子(新伺服器)發現牆壁顏色不對、插座不合(環境不相容)。
用了 Docker,你不是搬家具,你是把整棟房子(包含地基、牆壁、水管、家具)直接打包,用直升機吊到新地址放下。
核心價值:一致性 (Consistency) 。Docker 映像檔裡包含了程式碼 + 執行環境 + 所有依賴庫。只要你有這個映像檔,無論在我的 Mac、你的 Windows 還是雲端的 Linux 上,跑起來的結果絕對一模一樣。
第二個痛苦:環境配置的「相依性地獄」 (Dependency Hell)
場景是這樣的:
公司有兩個專案:
- 舊專案 A:五年前寫的,必須用 Node.js 10 才能跑。
- 新專案 B:今天剛開的,想用最新的 Node.js 20。
如果你不用 Docker,你想在同一台電腦上同時開發這兩個專案,你會非常痛苦。你得安裝版本管理工具,小心翼翼地切換,一不小心升級了全域設定,舊專案 A 就掛了。
Docker 的解法:
Docker 創造了一個個獨立的「平行時空」(容器)。
- 容器 A 裡面裝著 Node 10 和舊專案。
- 容器 B 裡面裝著 Node 20 和新專案。
它們雖然在同一台電腦上運行,但彼此完全看不到對方,互不干擾。
核心價值:隔離性 (Isolation)。你可以在一台機器上運行各種版本衝突的軟體,且環境永遠保持乾淨。
第三個痛苦:新人入職的「第一週魔咒」
場景是這樣的:
如果有新同事加入團隊,以前我們是這樣說的:「歡迎加入!這是安裝手冊,你照著做,把資料庫、Redis、編譯器都裝好,大概要花三天,有問題再問我。」
這三天裡,他會遇到各種版本錯誤、權限問題,浪費大量時間。
Docker 的解法:
現在我會說:「歡迎加入!去把專案抓下來,然後打一行指令 docker-compose up。」
Docker 會自動下載編排好的資料庫、快取服務、網頁伺服器。
5 分鐘後,他的電腦上就有了一個和線上環境一模一樣的開發環境。
核心價值:標準化與效率 (Standardization)。環境配置變成了程式碼 (Infrastructure as Code),可以被分享、被版控。
老師的總結:為什麼是現在?
你也許會問:「老師,虛擬機 (VM) 不也能做到這些嗎?」
好問題!但虛擬機太「重」了。
- 虛擬機 (VM) 像是蓋一棟獨立的大樓(包含獨立的作業系統),啟動要幾分鐘,佔用幾 GB 的記憶體。
- Docker 容器 像是大樓裡的一個輕隔間(共用作業系統核心),啟動只要幾毫秒,只佔用極少的資源。
這對你有什麼好處?
- 大膽嘗試新技術: 想學 MongoDB?不用在電腦上繁瑣地安裝。
docker run mongo,玩壞了就把容器刪掉,電腦完全不留痕跡(沒有垃圾檔案)。 - 睡得安穩: 上線部署時,你心裡非常有底,因為你在測試環境跑的那個「盒子」,就是即將在正式環境跑的同一個「盒子」。
老師的課後提問:
理解了「為什麼」之後,我們下一步通常有兩條路:
- 動手派: 我們來寫一個簡單的
Dockerfile,把你手邊的一個小程式(比如 "Hello World")打包起來試試? - 架構派: 你想了解 Docker 是如何利用 Linux 的底層技術(如 Namespaces 和 Cgroups)來實現這種「魔法」的嗎?
你想先聽哪一個?
docker desktop VS docker compose
AI PPT项目中推荐使用 docker compose,但是我根本不知道这个和刚刚安装的deskTOP的区别。于是继续提问
這是一個非常棒的問題!很多初學者會把這兩者搞混,以為它們是競爭關係或是同一個東西。
身為老師,我喜歡用一個**「廚房」**的比喻來解釋它們的關係:
1. 核心角色定義
- Docker Desktop: 這是你的**「全功能廚房」**。
它是一個整合軟體,為你提供了運作容器所需的所有基礎設施(包含 Docker Engine、控制面板、虛擬化環境、磁碟與網路管理)。沒有它,你的電腦就沒有火爐、沒有砧板、沒有冰箱。 - Docker Compose: 這是你的**「食譜組合包」。
它是一個工具(現在已經內置在 Docker Desktop 中),專門用來管理「多個容器」**。當你的餐點不只是一碗白飯(單一容器),而是包含主食、湯品和甜點(多個連動的容器)時,你不需要手忙腳亂地一個個去煮,只要照著這張「食譜組合包」下指令,全部都會一起準備好。
2. 它們的關係:包含與協作
簡單來說:Docker Desktop 包含了 Docker Compose。
當你安裝了 Docker Desktop,你的電腦就自動學會了 docker 指令(單兵作戰)和 docker-compose 指令(團隊作戰)。
| 特性 | Docker Desktop | Docker Compose |
|---|---|---|
| 類別 | 應用程式 / 平台 | 容器編排工具 (Orchestration) |
| 主要功能 | 提供運行環境、圖形化管理介面 | 透過 .yml 檔定義並啟動多個容器 |
| 層級 | 底層基礎(地基) | 上層管理(指揮官) |
| 圖形介面 | 有,可以看到所有容器的狀態 | 無(主要透過命令行或被 Desktop 整合顯示) |
3. 為什麼我們需要「兩者並存」?
想像一下,你要架設一個典型的 WordPress 網站,這通常需要兩個組件:
- WordPress 程式 (網頁伺服器)
- MySQL (資料庫)
如果只用 Docker Desktop(手動模式):
你得先在 Docker Desktop 裡手動啟動一個 MySQL 容器,設定好密碼、網路;接著再手動啟動一個 WordPress 容器,並在設定中告訴它資料庫在哪裡。這就像是你得自己搬磚頭、拌水泥來蓋房子。
如果使用 Docker Compose(自動模式):
你寫好一個 docker-compose.yml 檔案,裡面寫清楚:「我要一個 WordPress,我要一個 MySQL,把它們接在一起」。
然後你在終端機打入:
bash
docker compose up
這時候,Docker Compose 會讀取這份檔案,然後叫 Docker Desktop 去執行所有的開機、連網動作。
4. 在 Docker Desktop 介面中看到 Compose
當你運行了一個 docker-compose.yml,你會發現 Docker Desktop 的 "Containers" 頁面會變得很整潔:它會將屬於同一個專案的容器歸類在同一個群組(Folder)下。
你可以一鍵停止整個群組,也可以單獨查看其中一個容器的日誌。
老師的總結
- Docker Desktop 是舞台,提供空間讓演員表演。
- Docker Compose 是劇本,規定哪些演員(容器)要在什麼時候上場、彼此說什麼話(通訊)。
所以,你不需要在兩者之間做選擇,你是在 Docker Desktop 的環境下,利用 Docker Compose 來簡化你的工作流。
老師的下一步建議:
既然知道了它們的關係,你想試著寫一份簡單的 docker-compose.yml 檔案,親自感受一下「一鍵啟動多個服務」的快感嗎?我可以提供一個最經典的 「Python + Redis 計數器」 範例給你測試!
一个实例
此时根据上一个提问的AI建议。敲入"「Python + Redis 計數器」,please~",第一个例子就来了。哇咔咔咔。
实例内容
沒問題!這個例子是 Docker 老師們最愛用的「經典教材」。
這個小專案包含兩個角色:
- Python 網頁程式:負責顯示網頁,並把造訪次數記錄下來。
- Redis 資料庫:一個極快的記憶體資料庫,負責存儲那個數字。
如果不用 Docker,你得先在電腦裝 Python、裝 Redis、設定網路連通... 聽起來就很麻煩對吧?現在我們用 Docker Compose 一鍵搞定。
第一步:準備你的專案資料夾
請在你的電腦建立一個新資料夾(例如 my-counter),並在裡面準備以下三個檔案:
1. app.py (Python 程式碼)
這是我們的主程式,它會去連線到一個叫做 redis 的主機。
python
import time
import redis
from flask import Flask
app = Flask(__name__)
# 注意:這裡的主機名稱直接寫 "redis",Docker 會幫我們處理網路連線
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return f'你好!我是 Docker 老師。這個頁面已經被瀏覽過 {count} 次了。\n'
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
2. requirements.txt (相依套件清單)
告訴 Docker 我們需要安裝哪些 Python 套件。
text
flask
redis
3. Dockerfile (定義 Python 的環境)
這是製作 Python 映像檔的「食譜」。
dockerfile
# 使用輕量級的 Python 作為基底
FROM python:3.9-slim
# 設定工作目錄
WORKDIR /code
# 複製設定檔並安裝套件
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
# 複製程式碼
COPY . .
# 執行程式
CMD ["python", "app.py"]
第二步:編寫 docker-compose.yml (指揮官的劇本)
這是最關鍵的一步!我們要把 Python 和 Redis 組合在一起。在同一個資料夾建立這個檔案:
yaml
version: '3.8'
services:
web:
build: . # 告訴 Docker 用當前目錄的 Dockerfile 建立映像檔
ports:
- "5001:5000" # 將電腦的 5001 端口對應到容器內的 5000
redis:
image: "redis:alpine" # 直接從網路上抓現成的輕量級 Redis 映像檔
第三步:一鍵啟動!
打開你的終端機 (Terminal / PowerShell),進入這個資料夾,輸入:
bash
docker compose up
你會看到以下神奇的事情發生:
- Docker 開始下載 Redis。
- Docker 開始根據你的
Dockerfile建造 Python 環境。 - 兩個容器同時啟動,並自動建立了一個虛擬網路讓彼此通訊。
第四步:驗證結果
- 打開瀏覽器,輸入
http://localhost:5001。 - 你會看到「這個頁面已經被瀏覽過 1 次了」。
- 重新整理網頁,數字會不斷增加!這代表 Python 成功把資料存進了 Redis 容器裡。
老師的重點提醒(這就是 Docker 的魔力):
- 網路連線: 在
app.py裡,我們連線的主機名稱是redis。在 Docker Compose 的世界裡,服務名稱就是主機名稱,你不需要記住麻煩的 IP 地址。 - 不留痕跡: 如果你玩膩了,在終端機按下
Ctrl+C停止,或者輸入docker compose down。你的電腦依然乾乾淨淨,沒有殘留任何 Python 套件或 Redis 設定。
老師的下一步建議:
太棒了!你已經完成了一個「微服務架構」的雛形。
你想試試看修改 app.py 的文字 ,看看如何在不重裝環境的情況下,快速更新你的容器嗎?或者你想了解如何讓 Redis 的資料在容器刪除後依然保留下來 (Volumes)?