AI赋能如何从Docker小白快速理解、安装并运行一个实例

AI赋能如何从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 容器 像是大樓裡的一個輕隔間(共用作業系統核心),啟動只要幾毫秒,只佔用極少的資源。

這對你有什麼好處?

  1. 大膽嘗試新技術: 想學 MongoDB?不用在電腦上繁瑣地安裝。docker run mongo,玩壞了就把容器刪掉,電腦完全不留痕跡(沒有垃圾檔案)。
  2. 睡得安穩: 上線部署時,你心裡非常有底,因為你在測試環境跑的那個「盒子」,就是即將在正式環境跑的同一個「盒子」。

老師的課後提問:

理解了「為什麼」之後,我們下一步通常有兩條路:

  1. 動手派: 我們來寫一個簡單的 Dockerfile,把你手邊的一個小程式(比如 "Hello World")打包起來試試?
  2. 架構派: 你想了解 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 網站,這通常需要兩個組件:

  1. WordPress 程式 (網頁伺服器)
  2. 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 老師們最愛用的「經典教材」。

這個小專案包含兩個角色:

  1. Python 網頁程式:負責顯示網頁,並把造訪次數記錄下來。
  2. 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 (指揮官的劇本)

這是最關鍵的一步!我們要把 PythonRedis 組合在一起。在同一個資料夾建立這個檔案:

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

你會看到以下神奇的事情發生:

  1. Docker 開始下載 Redis。
  2. Docker 開始根據你的 Dockerfile 建造 Python 環境。
  3. 兩個容器同時啟動,並自動建立了一個虛擬網路讓彼此通訊。

第四步:驗證結果

  1. 打開瀏覽器,輸入 http://localhost:5001
  2. 你會看到「這個頁面已經被瀏覽過 1 次了」。
  3. 重新整理網頁,數字會不斷增加!這代表 Python 成功把資料存進了 Redis 容器裡。

老師的重點提醒(這就是 Docker 的魔力):

  • 網路連線:app.py 裡,我們連線的主機名稱是 redis。在 Docker Compose 的世界裡,服務名稱就是主機名稱,你不需要記住麻煩的 IP 地址。
  • 不留痕跡: 如果你玩膩了,在終端機按下 Ctrl+C 停止,或者輸入 docker compose down。你的電腦依然乾乾淨淨,沒有殘留任何 Python 套件或 Redis 設定。

老師的下一步建議:

太棒了!你已經完成了一個「微服務架構」的雛形。

你想試試看修改 app.py 的文字 ,看看如何在不重裝環境的情況下,快速更新你的容器嗎?或者你想了解如何讓 Redis 的資料在容器刪除後依然保留下來 (Volumes)

相关推荐
猫头虎3 小时前
OpenClaw相关的开源AI项目汇总大全:本文涵盖近期所有OpenClaw相关的GitHub高星star热门项目
运维·人工智能·macos·docker·容器·开源·github
hhhjjjj3 小时前
SpringCloudAlibaba2025+docker+jdk25搭建可扩展的微服务系统
docker·微服务·容器
予枫的编程笔记3 小时前
【Docker进阶篇】镜像管理不摸瞎:docker tag与push核心用法,私有仓库vs云服务怎么选?
docker·镜像仓库·docker push·容器技术·docker tag·docker私有仓库·阿里云容器镜像服务
DeeplyMind12 小时前
第12章 Docker存储机制(重要)
运维·docker·容器
xuhe214 小时前
Claude Code配合Astro + GitHub Pages:为 sharelatex-ce 打造现代化的开源项目宣传页
linux·git·docker·github·浏览器·overleaf
Mr.小海18 小时前
Docker 容器间依赖管理
运维·docker·容器
❀͜͡傀儡师1 天前
使用 Docker 部署 Puter 云桌面系统
运维·docker·容器
swbook1 天前
k8s1.35.1二进制部署
docker·kubernetes·k8s·kubectl-ai
2501_924878731 天前
中小电商自建直播间成本降47%:AI口播智能体轻量部署(含Docker+OBS链路)
人工智能·docker·容器·排序算法·宽度优先