iT邦幫忙

1

[ 猩猩也會用 ] docker 筆記

  • 分享至 

  • xImage
  •  

Docker 是一種容器化平台,可以讓你打包應用程式和其依賴項,並且能夠確保在不同環境中都能正常運行。每個容器都是一個輕量級、獨立、可執行的軟體單元,包含應用程式及其相依的程式庫、工具、設定等。

註冊docker帳號
Docker官網
為求方便,這邊可以用Google第三方登入就好

Docker Hub : 有許多官方的image,如Ubuntu、Debian等

下載/安裝Docker desktop
https://ithelp.ithome.com.tw/upload/images/20240715/20115086QnjCWEzggG.png

Docker 的核心概念

  • Image(映像檔):容器的模板,包含了運行應用所需的所有資源和設定。官方的Docker Hub 提供了許多官方的映像檔,這些映像檔包含了已經預先配置好的環境。只需從 Docker Hub 拉取相應的映像檔,就能立即使用,這大大簡化了環境配置的過程。
  • Container(容器):Image 的一個運行實例,實際執行應用程式。
  • Dockerfile:一種文本文件,包含了構建 Docker image 的指令。

常用 Docker 指令與使用方式

指令 用法 功能 常見選項 使用時機
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 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: 定義一個名為 db 的服務。
    • image: 指定要使用的 PostgreSQL 映像檔。
    • environment: 設定 PostgreSQL 的環境變數,如 POSTGRES_USERPOSTGRES_PASSWORDPOSTGRES_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 [服務] 重啟指定的服務 當需要重啟某個服務時使用

Docker hello world
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

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言