Docker Compose:初學者指南

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

Docker - Compose

什麼是 Docker Compose?

在我們深入之前,讓我們從基礎開始。想像你正在計劃一個大型派對(因為誰不喜歡一個好的比喻呢?)你需要協調食物、飲料、音樂和裝飾。Docker Compose 就像你的派對計劃工具,但它是為容器而設的!

從技術角度來說,Docker Compose 是一個用於定義和運行多容器 Docker 應用程序的工具。它讓你可以使用 YAML 檔案來配置你的應用程序服務、網絡和卷,然後使用一個命令從你的配置中創建和啟動所有服務。

Docker Compose - 安裝

現在,讓我們在你的系統上安裝 Docker Compose。這個過程簡單得像派(嗯...派)。

Windows 和 Mac 用戶

如果你已經安裝了 Docker Desktop,恭喜你!你已經有了 Docker Compose。它是安裝的一部分。你可以跳到下一節並做一個快樂的舞蹈。

Linux 用戶

對於我們的 Linux 朋友,你將需要單獨安裝 Docker Compose。這樣做:

  1. 下載當前穩定版本的 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
  1. 對二進制文件應用可執行權限:
sudo chmod +x /usr/local/bin/docker-compose
  1. 驗證安裝:
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:

  1. 從 Python 3.7 Alpine 镜像開始
  2. 設置工作目錄為 /code
  3. 設置 Flask 的環境變量
  4. 安裝必要的依賴
  5. 复制並安裝 Python 的依賴
  6. 暴露端口 5000
  7. 复制當前目錄到容器中
  8. 設置運行的命令為 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