Docker 是一種容器化平台,可以讓你打包應用程式和其依賴項,並且能夠確保在不同環境中都能正常運行。每個容器都是一個輕量級、獨立、可執行的軟體單元,包含應用程式及其相依的程式庫、工具、設定等。
註冊docker帳號
Docker官網
為求方便,這邊可以用Google第三方登入就好
Docker Hub : 有許多官方的image,如Ubuntu、Debian等
下載/安裝Docker desktop
常用指令
| 指令 | 用法 | 功能 | 常見選項 | 使用時機 | 
|---|---|---|---|---|
| docker run | docker run [選項] [映像檔名稱] [指令] | 啟動一個新的容器並運行指定的映像檔 | -d:背景模式運行-p [主機端口]:[容器端口]:端口映射-e [環境變數名稱]=[值]:設定環境變數--name [容器名稱]:指定容器名稱 | 創建和運行新容器時使用,設定端口映射、環境變數等選項 | 
| docker build | 在包含 Dockerfile 的目錄中執行 docker build -t [映像檔名稱] . | 根據 Dockerfile 建立新的映像檔 | -t [映像檔名稱]:為生成的映像檔指定名稱 | 當需要定製映像檔或從頭構建映像檔時使用 | 
| docker pull | docker pull [映像檔名稱] | 下載映像檔至本地 | 無 | 當需要使用一個已有的映像檔時使用 | 
| docker ps | docker ps [選項] | 列出目前正在運行的容器 | -a:顯示所有容器-q:僅顯示容器 ID | 查看容器的運行狀態和資訊 | 
| docker exec | docker exec [選項] [容器ID或名稱] [指令] | 在運行中的容器中執行指定指令 | -it:交互式操作,分配虛擬終端並連接 | 當需要在容器內部進行操作或調試時使用 | 
| docker stop | docker stop [容器ID或名稱] | 停止運行中的容器 | 無 | 當需要停止容器時使用 | 
| docker rm | docker rm [容器ID或名稱] | 刪除停止的容器 | 無 | 當需要移除容器時使用 | 
Dockerfile 指令和語法
| 指令 | 用法 | 功能 | 
|---|---|---|
| FROM | FROM [基礎映像檔名稱]:[版本] | 指定基礎映像檔,用於構建新的映像檔 | 
| LABEL | LABEL [key=value] | 添加映像檔的元資料,如維護者信息 | 
| ENV | ENV [環境變數名稱]=[值] | 設定容器內部的環境變數 | 
| RUN | RUN [指令] | 在映像檔內部執行命令,通常用於安裝軟體包、更新系統 | 
| WORKDIR | WORKDIR /path/to/directory | 設置容器內部的工作目錄,後續指令將在此目錄下執行 | 
| COPY | COPY [來源路徑] [目的路徑] | 從主機的來源路徑複製檔案或目錄到容器內部的目的路徑 | 
| CMD | CMD ["指令", "參數1", "參數2", ...] | 設置容器啟動後默認執行的命令 | 
**範例 Dockerfile **
# 指定基礎映像檔
FROM ubuntu:latest
# 維護者信息
LABEL maintainer="your_email@example.com"
# 設定環境變數
ENV MY_VAR=my_value
# 安裝必要的軟體包
RUN apt-get update && apt-get install -y \
    software-properties-common \
    python3 \
    python3-pip \
    && rm -rf /var/lib/apt/lists/*
# 設置工作目錄
WORKDIR /app
# 複製檔案到工作目錄
COPY . .
# 安裝 Python 相依項目,這裡示範使用環境變數
RUN pip3 install --no-cache-dir -r requirements.txt
# 預設指令,這裡也可以使用環境變數
CMD ["python3", "app.py"]
Docker Compose 用於定義和運行多個 Docker 容器應用程式。你可以使用一個 YAML 檔案來配置應用程式的服務,然後使用單個命令來創建和啟動所有服務。
範例 docker-compose.yml
version: '3.8'
services:
  web:
    image: my_web_image
    ports:
      - "8000:8000"
    environment:
      - MY_VAR=my_value
    volumes:
      - .:/code
    depends_on:
      - db
  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: my_database
  - **ports**: 將主機的 8000 端口映射到容器的 8000 端口。
  - **environment**: 設定容器的環境變數,如 `MY_VAR=my_value`。
  - **volumes**: 將主機目錄掛載到容器內部目錄。
  - **depends_on**: 指定服務的依賴關係,`web` 服務依賴 `db` 服務。
db 的服務。
POSTGRES_USER、POSTGRES_PASSWORD 和 POSTGRES_DB。Docker Compose 常用指令
| 指令 | 用法 | 功能 | 使用時機 | 
|---|---|---|---|
| docker-compose up | docker-compose up [選項] | 建立並啟動 Docker Compose 中定義的所有服務 | 當需要啟動定義在 docker-compose.yml中的所有服務時使用 | 
| docker-compose down | docker-compose down | 停止並移除 Docker Compose 中定義的所有服務 | 當需要停止並移除所有服務時使用 | 
| docker-compose build | docker-compose build [服務] | 建立或重新建立服務的映像檔 | 當修改了 Dockerfile 或需要重新構建映像檔時使用 | 
| docker-compose ps | docker-compose ps | 列出當前 Docker Compose 管理的所有容器 | 查看目前運行的服務狀態時使用 | 
| docker-compose logs | docker-compose logs [服務] | 顯示服務的日誌輸出 | 當需要查看某個服務的日誌輸出時使用 | 
| docker-compose exec | docker-compose exec [服務] [指令] | 在指定服務的容器中執行命令 | 當需要在某個服務容器內執行命令時使用 | 
| docker-compose stop | docker-compose stop [服務] | 停止指定的服務 | 當需要停止某個服務時使用 | 
| docker-compose restart | docker-compose restart [服務] | 重啟指定的服務 | 當需要重啟某個服務時使用 | 
Step 1: 建立專案目錄 : 首先,創建一個專案目錄並進入該目錄。
mkdir hello-docker
cd hello-docker
Step 2: 建立 Python 應用程式 : 在專案目錄中,創建一個 Python 檔案,例如 app.py,並寫入以下內容:
# app.py
print("Hello, World!")
Step 3: 建立 Dockerfile
在專案目錄中,創建一個名為 Dockerfile 的文件,並寫入以下內容:
# 使用官方的 Python 3.10 映像檔作為基礎映像檔
FROM python:3.10-slim
# 設置工作目錄
WORKDIR /app
# 複製當前目錄下的所有文件到工作目錄
COPY . .
# 設置容器啟動後執行的命令
CMD ["python", "app.py"]
Step 4: 建立 Docker 映像檔
在專案目錄中,運行以下命令來建立 Docker 映像檔:
docker build -t hello-docker .
Step 5: 運行 Docker 容器
使用以下命令來運行剛剛建立的 Docker 容器:
docker run --rm hello-docker
Step 6: 登入 Docker Hub
使用以下命令登入 Docker Hub:
docker login
後輸入帳號密碼
Step 7: 標籤 Docker 映像檔
將 Docker 映像檔標籤為你的 Docker Hub 儲存庫。假設你的 Docker Hub 使用者名稱是 yourusername,並且你希望將映像檔命名為 hello-docker,你可以這樣標籤映像檔:
docker tag hello-docker yourusername/hello-docker:latest
Step 8: 推送 Docker 映像檔到 Docker Hub
使用以下命令將映像檔推送到 Docker Hub:
docker push yourusername/hello-docker:latest