2025年2月8日 星期六

docker run 詳解

 docker run 是 Docker 的一個核心命令,用於創建並運行容器。它結合了 拉取映像 (pull)創建容器 (create)  啟動容器 (start) 的功能,提供了快速啟動容器的能力。

以下是 docker run 的主要功用及功能介紹:


主要功用

  1. 創建容器

    • 基於指定的 Docker 映像創建一個新的容器實例。
  2. 運行容器

    • 啟動創建的容器並執行指定的命令(默認為映像內的 ENTRYPOINT 或 CMD)。
  3. 自動下載映像

    • 如果指定的映像尚未本地存在,docker run 會自動從 Docker Hub 或其他註冊伺服器拉取。
  4. 容器配置與運行管理

    • 支援傳入多種參數,讓用戶可以靈活地配置容器(如網路、端口映射、環境變數等)。

基本語法

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • OPTIONS:可選參數,用於配置容器的運行行為。
  • IMAGE:指定用於創建容器的映像。
  • COMMAND 和 ARG:可選,覆蓋默認的命令或傳遞額外參數。

常見功能與用法

1. 前台運行容器

默認情況下,docker run 會啟動容器並附加到當前終端,顯示容器內的輸出。

docker run ubuntu echo "Hello, Docker!"
  • 使用 ubuntu 映像,運行 echo 命令。

2. 後台運行容器 (-d)

使用 -d 選項讓容器在後台運行(即 分離模式)。

docker run -d nginx
  • 在後台啟動一個 Nginx 容器。

3. 設置端口映射 (-p)

使用 -p 選項將容器內的服務端口映射到主機端口。

docker run -d -p 8080:80 nginx
  • 主機的 8080 埠映射到容器內的 80 埠,這樣主機可通過 http://localhost:8080 訪問容器中的 Nginx。

4. 設置環境變數 (-e)

通過 -e 傳遞環境變數到容器中。

docker run -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql
  • 設置 MySQL 的 root 密碼。

5. 掛載卷(數據持久化) (-v)

使用 -v 選項將主機目錄掛載到容器內部。

docker run -d -v /my/data:/data nginx
  • 主機的 /my/data 目錄掛載到容器內的 /data,實現數據共享與持久化。

6. 命名容器 (--name)

通過 --name 為容器指定一個名稱,方便管理。

docker run --name my-nginx -d nginx
  • 創建一個名稱為 my-nginx 的 Nginx 容器。

7. 限制資源 (--memory--cpus)

可以通過選項限制容器使用的 CPU 和內存資源。

docker run --memory=512m --cpus=1 nginx
  • 限制容器最多使用 512MB 的內存和 1 個 CPU 核心。

8. 交互模式 (-it)

使用 -it 啟動容器,進入交互式終端。

docker run -it ubuntu bash
  • 啟動一個 Ubuntu 容器並進入其終端,允許用戶直接執行命令。

9. 自定義網絡 (--network)

可以指定容器所屬的網絡。

docker run --network=my-network nginx
  • 將容器連接到名為 my-network 的自定義 Docker 網絡。

10. 臨時容器(自動刪除) (--rm)

使用 --rm 選項讓容器在退出時自動刪除。

docker run --rm ubuntu echo "This is a temporary container."
  • 適用於執行短暫任務的容器。

常見場景應用

  1. 測試新映像

    • 使用 docker run 快速啟動容器測試映像功能。
  2. 部署應用

    • 配合 -d-p-v 等選項快速部署 Web 服務、數據庫等應用。
  3. 臨時任務

    • 使用 --rm 和 -it 運行臨時容器進行測試或診斷。
  4. 多容器協作

    • 與 Docker 網絡結合,使用 --network 將多個容器連接在一起,實現複雜應用部署。


使用案例

以下是一些常見的 docker run 使用案例,展示如何啟動容器並執行不同的操作。


1. 運行一個交互式的容器

啟動一個 Ubuntu 容器,並進入容器內的交互式 Shell 環境。

docker run -it ubuntu
  • 選項說明
    • -i:允許交互式輸入。
    • -t:分配一個虛擬終端。
    • ubuntu:要運行的映像名稱。

2. 在容器中執行一個命令

啟動一個 Alpine 容器,執行命令後自動退出。

docker run alpine echo "Hello from Docker!"
  • 結果:顯示 "Hello from Docker!",然後容器自動停止。

3. 後台運行容器

啟動一個 Nginx 容器並在後台運行。

docker run -d nginx
  • 選項說明
    • -d:以後台模式運行容器(detached mode)。
    • nginx:要運行的映像名稱。

4. 指定容器名稱

為容器指定一個自定義名稱。

docker run --name my-nginx -d nginx
  • 結果:容器名稱為 my-nginx,而不是 Docker 默認分配的隨機名稱。

5. 綁定主機端口

將主機的 8080 端口映射到容器的 80 端口。

docker run -d -p 8080:80 nginx
  • 選項說明
    • -p 8080:80:將主機的 8080 端口映射到容器的 80 端口。
  • 結果:可通過瀏覽器訪問 http://localhost:8080

6. 掛載主機目錄到容器

將主機上的目錄掛載到容器內。

docker run -d -v /host/path:/container/path nginx
  • 選項說明
    • -v:指定掛載的目錄(主機路徑:容器內路徑)。
  • 應用場景:例如共享配置文件或數據。

7. 設置環境變量

為容器設置環境變量。

docker run -d -e ENV_VAR_NAME=value nginx
  • 選項說明
    • -e:設置環境變量。

8. 限制資源使用

限制容器使用的 CPU 和內存資源。

docker run -d --memory="512m" --cpus="1.0" nginx
  • 選項說明
    • --memory:限制內存使用(如 512MB)。
    • --cpus:限制 CPU 使用數量(如 1 核心)。

9. 連接到指定的網絡

啟動容器並連接到指定的 Docker 網絡。

docker network create my-network
docker run --network my-network -d nginx
  • 應用場景:適用於容器之間需要通信的場景。

10. 自動刪除容器

運行容器後自動刪除它。

docker run --rm ubuntu echo "Temporary container"
  • 選項說明
    • --rm:在容器退出後自動刪除。

範例:運行 MySQL 容器

啟動一個 MySQL 容器,並設置數據庫密碼。

docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.7
  • 選項說明
    • --name:為容器命名為 my-mysql
    • -e:設置環境變量 MYSQL_ROOT_PASSWORD
    • mysql:5.7:使用 MySQL 5.7 映像。

沒有留言:

張貼留言

[Docker]Docker Compose 如何安裝?需要有 Docker Desktop 嗎?

Docker Compose 安裝方式 Docker Compose 是一個 獨立的工具 ,用來編排和管理多個 Docker 容器。 你 不一定需要 Docker Desktop ,但 Docker Compose 需要 Docker Engine 來運行容器。 1️⃣ Dock...