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 的常見指令,這些指令用於操作和管理容器、映像以及 Docker 相關功能。以下是詳細說明:


Usage:

docker [OPTIONS] COMMAND
  • docker:Docker 的主命令。
  • [OPTIONS]:命令選項,用於調整或修改命令行的行為。
  • COMMAND:Docker 支援的具體操作指令。

A self-sufficient runtime for containers

  • Docker 是一個完全獨立的容器運行時環境,負責管理和運行容器化應用。

Common Commands(常見指令)

1. run

  • 功能:創建並運行一個新的容器。
  • 語法:
    docker run [OPTIONS] IMAGE [COMMAND]
  • 範例:
    docker run -it ubuntu
    • 啟動一個交互式的 Ubuntu 容器。

2. exec

  • 功能:在運行中的容器內執行命令。
  • 語法:
    docker exec [OPTIONS] CONTAINER COMMAND
  • 範例:
    docker exec -it my-container bash
    • 在名為 my-container 的容器內啟動一個 Bash Shell。

3. ps

  • 功能:列出當前運行中的容器。
  • 語法:
    docker ps [OPTIONS]
  • 範例:
    docker ps -a
    • 列出所有容器(包括停止的)。

4. build

  • 功能:從 Dockerfile 建立一個新的映像。
  • 語法:
    docker build [OPTIONS] PATH | URL
  • 範例:
    docker build -t my-image .
    • 使用當前目錄的 Dockerfile 建立映像並命名為 my-image

5. pull

  • 功能:從 Docker Registry(默認為 Docker Hub)下載映像到本地。
  • 語法:
    docker pull [OPTIONS] IMAGE[:TAG]
  • 範例:
    docker pull mysql:5.7
    • 下載 MySQL 5.7 的映像。

6. push

  • 功能:將本地的映像上傳到 Docker Registry。
  • 語法:
    docker push [OPTIONS] IMAGE[:TAG]
  • 範例:
    docker push my-image:1.0
    • 將名為 my-image:1.0 的映像上傳至默認的 Docker Hub。

7. images

  • 功能:列出本地存儲的所有映像。
  • 語法:
    docker images [OPTIONS]
  • 範例:
    docker images
    • 顯示本地所有的映像及其標籤和大小。

8. login

  • 功能:登錄到 Docker Registry(如 Docker Hub)。
  • 語法:
    docker login [OPTIONS] [SERVER]
  • 範例:
    docker login
    • 提示輸入 Docker Hub 的用戶名和密碼。

9. logout

  • 功能:從 Docker Registry 登出。
  • 語法:
    docker logout [SERVER]
  • 範例:
    docker logout
    • 從默認的 Docker Hub 登出。

10. search

  • 功能:在 Docker Hub 上搜索映像。
  • 語法:
    docker search [OPTIONS] TERM
  • 範例:
    docker search nginx
    • 搜索與 nginx 相關的映像。

11. version

  • 功能:顯示 Docker 的版本信息。
  • 語法:
    docker version
  • 範例:
    docker version
    • 顯示客戶端和伺服器的版本資訊。

12. info

  • 功能:顯示系統範圍內的 Docker 信息。
  • 語法:
    docker info
  • 範例:
    docker info
    • 顯示當前 Docker 的配置、運行容器數量等詳情。


kali linux 如何獲得及變更root密碼

 在 Kali Linux 中, 獲取或變更 root 密碼 需要根據不同的情況來操作。 1. 檢查 root 是否已啟用 在 Kali Linux 2020.1 之後, root 帳戶 預設是禁用的 ,所以需要先啟用 root 。 檢查當前用戶是否為 root : ...