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