Docker Compose:初學者指南
你好,未來的 Docker 大師!我很興奮能成為你進入 Docker Compose 世界的導師。作為一個教了多年計算機科學的老師,我見過許多學生在容器化概念上掙扎。但別擔心!在這個教學結束時,你將會像專業人士一樣編排容器。

什麼是 Docker Compose?
在我們深入之前,讓我們從基礎開始。想像你正在計劃一個大型派對(因為誰不喜歡一個好的比喻呢?)你需要協調食物、飲料、音樂和裝飾。Docker Compose 就像你的派對計劃工具,但它是為容器而設的!
從技術角度來說,Docker Compose 是一個用於定義和運行多容器 Docker 應用程序的工具。它讓你可以使用 YAML 檔案來配置你的應用程序服務、網絡和卷,然後使用一個命令從你的配置中創建和啟動所有服務。
Docker Compose - 安裝
現在,讓我們在你的系統上安裝 Docker Compose。這個過程簡單得像派(嗯...派)。
Windows 和 Mac 用戶
如果你已經安裝了 Docker Desktop,恭喜你!你已經有了 Docker Compose。它是安裝的一部分。你可以跳到下一節並做一個快樂的舞蹈。
Linux 用戶
對於我們的 Linux 朋友,你將需要單獨安裝 Docker Compose。這樣做:
- 下載當前穩定版本的 Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose- 對二進制文件應用可執行權限:
sudo chmod +x /usr/local/bin/docker-compose- 驗證安裝:
docker-compose --version如果你看到了版本號,那麼你就可以開始了!
創建你的第一個 Docker-Compose 檔案
現在我們已經安裝了 Docker Compose,讓我們創建我們的第一個 docker-compose.yml 檔案。這個檔案就像你的應用程序的配方 - 它告訴 Docker 你需要哪些原料(服務)以及如何準備它們。
讓我們使用 Python Flask 和 Redis 創建一個簡單的網絡應用程序。別擔心如果你不熟悉這些技術 - 我們會讓它保持簡單!
為你的專案創建一個新目錄並進入它:
mkdir my_first_compose_project
cd my_first_compose_project現在,讓我們創建我們的 docker-compose.yml 檔案:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"讓我們來分解這個:
- 
version: '3':這指定了我們使用的 Docker Compose 檔案格式版本。
- 
services:這個部分定義了我們想要運行的容器。
- 
web:這是我們的 Flask 應用程序服務。
- 
build: .:這告訴 Docker 從當前目錄中的 Dockerfile 建立一個镜像。
- 
ports: - "5000:5000":這將主機上的端口 5000 映射到容器中的端口 5000。
- 
redis:這是我們的 Redis 服務。
- 
image: "redis:alpine":這告訴 Docker 使用 Docker Hub 上的官方 Redis 镜像。
創建 Flask 應用程序
現在,讓我們創建一個簡單的 Flask 應用程序。創建一個名為 app.py 的文件:
from flask import Flask
from redis import Redis
app = Flask(__name__)
redis = Redis(host='redis', port=6379)
@app.route('/')
def hello():
redis.incr('hits')
return f'Hello World! I have been seen {redis.get("hits").decode("utf-8")} times.'
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)這個簡單的應用程序每次訪問頁面時都會在 Redis 中增加一個計數器。
創建 Dockerfile
接下來,我們需要創建一個 Dockerfile 來構建我們的 Flask 應用程序。創建一個名為 Dockerfile 的文件:
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]這個 Dockerfile:
- 從 Python 3.7 Alpine 镜像開始
- 設置工作目錄為 /code
- 設置 Flask 的環境變量
- 安裝必要的依賴
- 复制並安裝 Python 的依賴
- 暴露端口 5000
- 复制當前目錄到容器中
- 設置運行的命令為 Flask
創建需求文件
最後,我們需要指定我們的 Python 依賴。創建一個名為 requirements.txt 的文件:
flask
redis運行你的 Docker Compose 應用程序
現在來到令人興奮的部分 - 運行你的應用程序!在終端中,運行:
docker-compose up你應該會看到 Docker Compose 正在構建你的镜像和啟動你的服務。當它完成時,打開網絡瀏覽器並訪問 http://localhost:5000。你應該會看到你的 "Hello World" 消息,每次刷新頁面時計數器都會增加。
Docker Compose 命令
這裡有一些常見的 Docker Compose 命令:
| 命令 | 描述 | 
|---|---|
| docker-compose up | 創建和啟動容器 | 
| docker-compose down | 停止和移除容器、網絡、镜像和卷 | 
| docker-compose ps | 列出容器 | 
| docker-compose logs | 查看容器的輸出 | 
| docker-compose build | 建立或重建服務 | 
| docker-compose start | 啟動服務 | 
| docker-compose stop | 停止服務 | 
結論
恭喜你!你剛剛使用 Docker Compose 創建並運行了你的第一個多容器應用程序。我們只不過是 touched the surface of what Docker Compose can do,但我希望這個教學已經為你提供了一個堅實的基礎來建立。
記住,學習 Docker 和容器化就像學習烹飪一樣 - 它需要練習,但一旦你掌握了它,你將會很快地就能夠烹飪出複雜的多容器配方!
祝你好運,未來的 Docker 廚師!
Credits: Image by storyset
