目錄
前言:為什么需要Docker?
一、Docker能做什么?
二、核心概念解析
1. 鏡像(Image):應用的標準化打包
2. 容器(Container):鏡像的運行實例
3. 鏡像倉庫(Registry):鏡像的集中管理中心
三、Docker的典型工作流程
四、Docker的優勢總結
五、學習建議
前言:為什么需要Docker?
在傳統的應用部署過程中,開發人員經常遇到"在我的機器上能運行,為什么到服務器上就不行?"的經典問題。這個問題的根源在于環境不一致——開發環境、測試環境和生產環境之間的差異導致應用行為不可預測。Docker的出現完美解決了這一痛點,它通過容器化技術實現了"一次構建,處處運行"的理想狀態。
一、Docker能做什么?
Docker的核心價值在于它能夠幫助我們:
- ?快速下載應用鏡像?:就像從應用商店下載安裝包一樣簡單
- ?輕松創建和運行容器?:一鍵啟動完整應用環境
- ?實現快速部署?:從開發到生產環境的一致性保障
二、核心概念解析
1. 鏡像(Image):應用的標準化打包
鏡像是Docker的基石,它包含了:
- 應用代碼本身
- 運行所需的函數庫
- 所有依賴項
- 環境配置參數
?通俗理解?:鏡像就像是面向對象的"類",它定義了容器的初始狀態和行為。
# 查看本地鏡像列表
docker images# 拉取官方鏡像示例
docker pull nginx
2. 容器(Container):鏡像的運行實例
容器是鏡像的運行實體,具有以下特點:
- 輕量級:共享主機操作系統內核
- 可移植:包含運行應用所需的一切
- 隔離性:進程、網絡、文件系統相互隔離
?生命周期管理?:
# 啟動新容器
docker run -d --name ms -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123 mysql
這里做一個命令解讀:
"-d":以后臺(守護進程)模式運行容器。
"--name ms":指定容器名稱為"ms",后續方便使用該名稱直接對容器進行操作。
"-p 3306:3306":端口映射配置【主機端口:容器端口】,這里將主機的3306端口映射到容器的3306端口(MySQL默認端口),允許外部通過主機的3306端口訪問容器內的MySQL服務。
"-e MYSQL_ROOT_PASSWORD=123":設置環境變量,這里是設置MySQL root用戶的密碼為"123",這是MySQL官方鏡像的必需參數,否則容器啟動會失敗。
"mysql":指定使用的鏡像名稱(這里使用官方MySQL鏡像),若本地沒有該鏡像,Docker會自動從Docker Hub下載。
# 查看運行中的容器
docker ps
# 查看運行中的容器(-a:無論容器有沒有啟動都可以查看)
docker ps -a
# 停止容器
docker stop redis
3. 鏡像倉庫(Registry):鏡像的集中管理中心
Docker倉庫分為:
- ?公共倉庫?:如Docker Hub,包含大量官方和社區維護的鏡像
- ?私有倉庫?:企業用于內部鏡像管理
三、Docker的典型工作流程
- ?開發階段?:編寫Dockerfile定義鏡像
- ?構建階段?:
docker build
生成鏡像 - ?測試階段?:
docker run
啟動容器測試 - ?部署階段?:推送到倉庫并部署到生產環境
?示例Dockerfile?(構建一個基于 Python 3.8 的輕量級鏡像,安裝依賴后運行?app.py
?并對外暴露 5000 端口。):
FROM python:3.8-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python", "app.py"]
四、Docker的優勢總結
特性 | 傳統方式 | Docker方式 |
---|---|---|
環境一致性 | 難以保證 | 完全一致 |
資源占用 | 高(完整OS) | 低(共享內核) |
啟動速度 | 分鐘級 | 秒級 |
隔離性 | 較弱 | 強 |
可移植性 | 依賴環境 | 一次構建處處運行 |
五、學習建議
- 從官方文檔開始:https://docs.docker.com
- 實踐基礎命令:run、exec、logs等
- 嘗試構建自己的第一個鏡像
- 進一步可以深入學習Docker Compose管理多容器應用等技術