Docker 是一個工具,允許開發人員將他們的應用程式及其所有依賴項打包到一個容器中。然後,這個容器就可以輕鬆地在任何安裝了 Docker 的機器上傳輸和執行,而不必擔心環境的差異。這就像是打包和執行軟體的標準化方式。

容器是什麼?

Docker 容器

容器就像一個小包,其中包含程式執行所需的一切,可以輕鬆地在不同電腦上移動和執行,而不會造成任何麻煩。

最酷的部分是這個迷你電腦(容器)就像一個披著斗篷的超級英雄。它可以在任何電腦上執行,無論它們有多麼不同,因為它自帶特殊的環境。這是一種保持軟體井然有序的方式,並確保它無論在哪裡都能以相同的方式運作。

容器

為什麼我們需要 Docker?

  1. 一致性: Docker 確保軟體在您的電腦、您朋友的電腦或任何電腦上以相同的方式運作。它使事情保持一致。

  2. 可移植性: 您可以將您的軟體及其朋友打包到 Docker 容器中,並且它可以移動到任何地方。這就像將您的遊戲及其所有規則放在手提箱中並在朋友家中玩。

  3. 隔離: Docker 容器就像小氣泡。氣泡內發生的事只會留在氣泡內。這意味著容器中的一個程式不會幹擾容器外的另一個程式。

  4. 效率: Docker有助於節省電腦資源。您可以讓許多容器在同一台電腦上執行,而不會相互妨礙,而不是讓一整台電腦只用於一個程式。

  5. 速度: Docker 讓啟動、停止和共享軟體變得快速、輕鬆。這就像打開和關閉遊戲機一樣 - 快速而簡單。

什麼是 Docker 映像?

Docker 映像

Docker 映像像是程式及其運作所需的所有內容的快照。它是一個打包版本,包括程式碼、工具和設置,就像包含所有成分的餅乾食譜的快照一樣。

圖像是配方,容器是當您按照該配方實際製作和執行程序時所得到的。

一些基本的 Docker 命令。

基本 Docker 指令

  1. docker執行nginx

    • 此命令告訴 Docker 使用「nginx」映像執行容器。這就像告訴 Docker 啟動一個預製程式的新實例(nginx,它是一個 Web 伺服器)。
  2. docker ps

    • 顯示正在執行的容器的清單。這就像檢查當前正在執行哪些程式。
  3. docker ps -a

    • 顯示所有容器的列表,包括已停止的容器。這就像檢查您執行過的所有程式的歷史記錄。
  4. `docker stopsilly_sammet'

    • 停止名為「silly_sammet」的正在運作的容器。這就像關閉當前正在執行的程式。
  5. `docker rmsilly_sammet'

    • 刪除名為「silly_sammet」的已停止容器。這就像丟掉你不再需要的程式的指令一樣。
  6. docker 映像

    • 列出您擁有的所有 Docker 映像。這就像查看您可以執行的所有不同程式的選單一樣。
  7. docker rmi nginx

    • 刪除“nginx”圖像。這就像刪除您不想再使用的程式的配方。
  8. docker拉nginx

    • 從網路下載「nginx」映像。這就像從食譜中獲取新食譜一樣。
  9. docker 執行 ubuntu sleep 5

    • 使用「ubuntu」映像檔執行容器並使其休眠 5 秒。這就像啟動一個程序,只是等待一小會兒,然後就停止了。
  10. docker exectracted_mcclintock cat /etc/hosts

    • 在名為「distracted_mcclintock」的正在執行的容器內執行命令。這就像在食譜書中偷看特定頁面一樣。
  11. docker run -d kodekloud/simple-webapp

    • 從「kodekloud/simple-webapp」鏡像以分離模式執行容器。這就像啟動一個程式並讓它在背景執行。
  12. docker Attach a043d

    • 將您的終端附加到 ID 為「a043d」的正在執行的容器。這就像跳入正在執行的程式來查看發生了什麼。

一些 Docker 概念:

  1. 使用標籤執行:

    • 標籤就像程式的版本。它指定您要執行哪個版本。

    • 範例程式碼:docker run nginx:latest

    • 這將執行最新版本的 Nginx 程式。

  2. 使用標準輸入執行:

    • STDIN 就像在鍵盤上打字一樣。有些程式需要您的輸入。

    • 範例程式碼:docker run -i -t ubuntu

    • 這會在 Ubuntu 容器內執行互動終端,讓您可以鍵入命令。

  3. 使用連接埠映射執行:

    • 連接埠就像門。程式使用它們與外界進行通訊。

    • 範例程式碼:docker run -p 8080:80 nginx

    • 這將執行 Nginx,並打開電腦連接埠 8080 上的門,將其連接到容器的連接埠 80。

  4. 使用磁碟區映射執行:

    • 磁碟區就像共用資料夾。它們讓您可以將東西存放在容器之外。

    • 範例程式碼:docker run -v /your/local/folder:/container/folder nginx

    • 這將執行 Nginx 並將電腦上的資料夾連接到容器內的資料夾。

  5. 檢查容器:

    • 檢查就像仔細檢查正在執行的程式。

    • 範例程式碼:docker檢查container_name

    • 這為您提供有關正在執行或已停止的容器的詳細資訊。

  6. 容器日誌:

    • 日誌就像日記。他們記錄程式正在做什麼。

    • 範例程式碼:“docker 日誌容器名稱”

    • 這會向您顯示特定容器的日誌或活動。

環境變數

環境變數就像程式用來尋找重要資訊的便利筆記,有點像是程式可以理解和更好工作的秘密訊息!

  1. Python腳本(app.py)中的環境變數:

    • 假設您有一個用 Python 寫的程式 (app.py)。您可能想要在不更改程式碼的情況下自訂它。您可以使用環境變數。

    • 範例程式碼(app.py):

      import os
      
      app_color = os.getenv("APP_COLOR", "default_color")
      print(f"The app color is {app_color}")
    • 正常運作腳本:python app.py

    • 以特定顏色執行:export APP_COLOR=blue; python 應用程式.py

  2. 在 Docker 中使用 ENV 變數:

    • Docker 容器也可以使用環境變數。這就像是向容器內的程式發出指令。

    • 範例程式碼:

      • docker run -e APP_COLOR=green simple-webapp-color

      • 這會執行 Docker 容器(simple-webapp-color)並將環境變數 APP_COLOR 設為「綠色」。

  3. 檢查環境變數:

    • 有時,您會想要檢查正在執行的容器正在使用哪些環境變數。

    • 範例程式碼:docker檢查blissful_hopper

    • 此命令提供有關名為“blissful_hopper”的容器的詳細訊息,包括其環境變數。

簡單來說,環境變數就像程式(或 Docker 容器)可以讀取以了解如何行為的小註釋。您可以在執行程式之前設定這些註釋,程式將使用它們來自訂自身。第二個範例中的「export」指令就像在執行程式之前寫一條註釋,告訴它如何運作。 “docker Inspect”指令就像是在容器內部查看它有什麼註解。

Docker 映像

Docker 檔案:

Dockerfile 就像是 Docker 建立映像的一組指令。這就像是烤蛋糕的食譜。

# Use the Ubuntu base image
FROM Ubuntu

# Update apt repository
RUN apt-get update

# Install dependencies using apt
RUN apt-get install -y python

# Install Python dependencies using pip
RUN pip install flask
RUN pip install flask-mysql

# Copy source code to /opt folder
COPY . /opt/source-code

# Set the working directory
WORKDIR /opt/source-code

# Specify entry point to run the web server
ENTRYPOINT ["flask", "run"]

建立自己的圖像的步驟:

  1. 使用上述內容建立一個名為「Dockerfile」的檔案。

  2. 將其保存在與原始碼相同的目錄中。

建置 Docker 映像:

在終端機中執行以下命令:

docker build -t your-image-name .

此命令告訴 Docker 使用目前目錄中的 Dockerfile (.) 建置映像,並使用您選擇的名稱對其進行標記 (-t your-image-name)。

分層架構:

分層架構

  • 將 Docker 映像視為一個分層蛋糕。 Dockerfile 中的每個指令都會在映像上新增一層。

  • 圖層可重複使用。如果您變更程式碼中的某些內容,Docker 只會重建受影響的層,從而提高效率。

Docker 建置輸出:

  • 當您建置映像檔時,Docker 會顯示流程中的每個步驟。如果發生故障,它會給您錯誤訊息。

你可以容器化什麼?

  • 幾乎所有東西!應用程式、服務、資料庫、網站,基本上任何軟體都可以容器化。

  • 這就像將您的軟體放入一個盒子中,以便它可以在任何地方執行而不會造成麻煩。

什麼是 Docker CMD 與 ENTRYPOINT

Docker 中的CMD

  • 將 CMD 視為啟動容器時程式執行的預設操作。

  • 這就像說,“嘿,當你執行這個容器時,默認執行此操作。”

  • 範例:CMD ["flask", "run"] 表示當容器啟動時,它會自動執行 Flask Web 伺服器。

CMD 範例:

FROM alpine
CMD ["sleep", "5"]

在此範例中,當您使用此映像執行容器時,它會自動休眠 5 秒。

Docker 中的ENTRYPOINT

  • 將 ENTRYPOINT 視為容器所做的主要事情。就好像boss的命令一樣。

  • 它設定一個預設應用程式在容器啟動時執行,但您仍然可以根據需要覆蓋它。

  • 範例:ENTRYPOINT ["flask", "run"] 表示容器主要用於執行 Flask Web 伺服器,但如果需要,您仍可新增更多指令。

入口點範例:

FROM alpine
ENTRYPOINT ["sleep"]
CMD ["5"]

在這裡,主要目的是睡眠,如果您願意,您仍然可以覆蓋睡眠持續時間。

在這兩種情況下,容器在啟動時只會休眠幾秒鐘。主要區別在於如何提供參數以及它們是否可以輕鬆覆蓋。

CMD 就像在說,“這是默認要做的事情”,而 ENTRYPOINT 就像在說,“這是主要要做的事情,但如果你願意,你可以稍微調整一下。”它們都有助於定義容器啟動時執行的操作。

Docker 中的網路:

Docker 網路幫助容器(程式)相互通信,確保它們可以順利地協同工作。

預設網路:

  • Docker 建立預設網路供容器通訊。

  • 範例程式碼:docker run ubuntu --network=host

    • 這使用主機網路執行 Ubuntu 容器,這意味著它與主機共享網路命名空間。

使用者定義的網路:

  • 您可以建立自己的網路以更好地組織和控制。

  • 範例程式碼:

    docker network create --driver=bridge --subnet=182.18.0.0/16 custom-isolated-network
    • 這將建立一個名為「custom-isolated-network」的使用者定義的橋接網絡,具有特定的子網。

上市網路:

  • 您可以查看您擁有的所有網路。

  • 範例程式碼:docker network ls

檢查網路:

  • 您可以檢查特定網路的詳細資訊。

  • 範例程式碼:docker網路檢查blissful_hopper

    • 這顯示有關名為「blissful_hopper」的網路的詳細資訊。

嵌入式 DNS:

  • Docker 有一個內建的 DNS 系統,供容器透過名稱相互查找。

  • 範例程式碼:mysql.connect(mysql)

    • 這可能是程式碼中的一行,其中名為「mysql」的服務使用 Docker 的 DNS 連接到另一個名為「mysql」的服務。

Docker 儲存:

Docker 儲存

Docker 儲存就像使用容器時決定將資料保存在哪裡一樣。您可以將它們保留在容器內,使用磁碟區在容器之間共用它們,或將它們儲存在容器外部以妥善保管。

Docker中的檔案系統:

  • Docker 使用分層架構來建立映像。 Dockerfile 中的每個指令都會在檔案系統中新增一個新圖層。

    # Dockerfile
    FROM Ubuntu
    RUN apt-get update && apt-get install -y python
    RUN pip install flask flask-mysql
    COPY . /opt/source-code
    WORKDIR /opt/source-code
    ENTRYPOINT ["flask", "run"]
  • Dockerfile 中的層:

    • 第 1 層:Ubuntu 基礎層

    • 第 2 層:apt 軟體包的更改

    • 第 3 層:pip 套件的變化

    • 第 4 層:原始碼

    • 第 5 層:使用「flask」指令更新入口點

    • 第 6 層:容器層

影像圖層:

  • 當您建立 Docker 映像時,它由唯讀層組成。每一層代表影像的變化或加入。

    • 第 1 層:Ubuntu 基礎層

    • 第 2 層:apt 軟體包的更改

    • 第 3 層:pip 套件的變化

    • 第 4 層:原始碼

    • 第 5 層:使用「flask」指令更新入口點

# Build the Docker image
docker build -t mmumshad/my-custom-app .

容器層:

  • 當您執行 Docker 容器時,會在唯讀映像層上方新增一個讀寫層。該層特定於正在執行的容器。

    • 第 6 層. 容器層
      # Run the Docker container
      docker run mmumshad/my-custom-app

數量:

  • 卷是一種在容器外部保存資料的方法。它們就像外部記憶體。
# Create a Docker volume
docker volume create data_volume

# Use the volume in a container
docker run -v data_volume:/var/mysql mysql
  • 您也可以使用「-v」將特定目錄從主機掛載到容器:
# Mount a host directory to a container directory
docker run -v /path/on/host:/var/mysql/mysql -d mysql
  • docker run --mount 指令用於將主機上的特定目錄或檔案掛載到正在執行的 Docker 容器中。
    docker run --mount type=bind,source=/mysql,target=/var/mysql mysql

儲存驅動程式:

  • Docker 使用儲存驅動程式來管理資料的儲存和存取方式。一些常見的儲存驅動程式包括 AUFS、ZFS、BTRFS、Device Mapper、Overlay 和 Overlay2。

在 Docker 管理資料

關於儲存驅動程式

Docker 組合

Docker Compose

Docker Compose 是一個方便的工具,可幫助您輕鬆執行和連接不同的軟體服務,就好像它們都是同一事件的一部分一樣。

Docker Compose 基礎:

  1. 執行單一容器:

    • 通常,您可以像這樣執行單獨的 Docker 容器:
      docker run mmumshad/simple-webapp
      docker run mongodb
      docker run redis:alpine
      docker run ansible
  2. Docker 撰寫文件(docker-compose.yml):

    • Docker Compose 允許您在一個簡單的檔案中定義所有這些服務:

      # docker-compose.yml
      version: '3'
      
      services:
      web:
       image: 'mmumshad/simple-webapp'
      database:
       image: 'mongodb'
      messaging:
       image: 'redis:alpine'
      orchestration:
       image: 'ansible'
    • 此檔案描述您要執行的服務(「web」、「database」、「messaging」、「orchestration」)、它們各自的映像以及任何其他配置。

  3. 使用 Docker Compose 執行:

    • 要一起啟動所有這些服務:

      docker-compose up
    • Docker Compose 負責啟動「docker-compose.yml」檔案中定義的所有容器。

  4. 使用 Docker Compose 建置:

    • 您也可以使用 Docker Compose 建置映像:

      docker-compose build
    • 此指令建置「docker-compose.yml」檔案中指定的映像。

執行連結容器:

  • 如果您要透過連結執行單一容器:

     docker run -d --name redis redis
     docker run --name voting-app -p 5000:80 --link redis:redis voting-app
     docker run --name result-app -p 5001:80 --link db:db result-app
     docker run -d --name worker --link db:db --link redis:redis worker
  • 在 Docker 中撰寫:

     # docker-compose.yml
     version: '3'
    
     services:
       vote:
         image: 'voting-app'
         ports:
           - '5000:80'
         links:
           - 'redis:redis'
       result:
         image: 'result-app'
         ports:
           - '5001:80'
         links:
           - 'db:db'
       worker:
         image: 'worker'
         links:
           - 'db:db'
           - 'redis:redis'
       db:
         image: 'db'
       redis:
         image: 'redis'

Docker Compose 可讓您在單一檔案中描述整個應用程式堆疊,從而輕鬆管理、執行和連接不同的服務。這就像在一份計劃中寫下活動的所有任務,然後 Docker Compose 為您處理設定。

Docker Compose 概述

Docker 撰寫文件

Docker 註冊表

Docker 註冊表

Docker 註冊表是人們儲存和分享 Docker 映像的地方,使其他人可以輕鬆使用和執行他們的軟體。它就像一個大型線上程式庫,可以輕鬆下載並在不同電腦上使用。

Docker 註冊表基礎知識:

  1. 公共登記處:

    • Docker 映像可以在 Docker Hub 等公共註冊表中儲存和共用。

    • 例:

      docker pull nginx
  2. 私人登記處:

    • 有時,您可能希望將圖像保存在您自己的私人註冊表中。

    • 例:

      • 登入私人註冊表:
bash
       docker login private-registry.io
 - 從私有註冊表中的映像執行容器:
       docker run private-registry.io/apps/internal-app
  1. 部署您自己的私有註冊表:

    • 您可以為您的團隊或公司部署自己的私人註冊表。

    • 例:

      • 在您的電腦上執行私有註冊表:

        docker run -d -p 5000:5000 --name registry registry:2
      • 為私人註冊表標記您的圖像:

        bash
        docker image tag my-image localhost:5000/my-image
      • 將映像推送到您的私人註冊表:

        bash
        docker push localhost:5000/my-image
      • 從您的私人註冊表中提取映像:

        bash
        docker pull localhost:5000/my-image 
  2. 從遠端私有註冊表中提取:

    • 您也可以使用 IP 位址或網域從遠端私有註冊表中提取映像。

    • 例:

      docker pull 192.168.56.100:5000/my-image

Docker 註冊表就像一個儲存空間,人們在其中保存和共享 Docker 映像。您可以將公用註冊表用於廣泛使用的映像,也可以根據您的特定需求設定自己的私人註冊表。它就像一個用於共享和儲存軟體藍圖(圖像)的特殊庫。

Docker 引擎

Docker 引擎

想像一下,你有一個魔盒(Docker Engine),可以為你執行和管理各種程式(容器)。 Docker Engine 就像是這個魔盒的大腦。

  1. Docker 守護程式:

    • 守護程式就像魔法盒的看門人。它始終在那裡,隨時準備接受指示並確保一切順利進行。
  2. REST API:

    • 將 REST API 視為一組允許您與魔盒對話的規則。它就像你和守護程式用來溝通的語言。你告訴守護程式要做什麼,它會理解,因為你們說的是同一種語言。
  3. Docker CLI(命令列介面):

    • Docker CLI 就像是用來命令守護程式的魔杖。您輸入指令,守護程式就會按照您的指示進行操作。這就像說「Abracadabra」就能讓事情發生。

連線到遠端 Docker 引擎:

連接到遠端 Docker 引擎可讓您控制另一台機器上的容器,且設定約束可確保容器僅使用指定的資源。

  1. Docker主機IP:

    • 您可以使用 IP 位址和連接埠連接到不同電腦上的 Docker 引擎。

    • 例:

      docker -H=remote-docker-engine:2375 run nginx
    • 這告訴您的本機 Docker CLI 與遠端 Docker 引擎進行通訊。

  2. 有約束地執行容器:

    • Docker 允許您設定容器的資源限制,例如 CPU 和記憶體限制。

    • 例:

      docker run --cpus=0.5 ubuntu
      docker run --memory=100m ubuntu
    • 這些指令限制容器僅使用半個 CPU 核心和 100 MB 記憶體。

當然,讓我們簡化一下PID命名空間的概念:

命名空間PID:

PID 命名空間可讓您為容器中的進程(如程式或任務)建立單獨的區域,因此它們有自己的一組「票號」(進程 ID),不會與容器外的進程發生衝突。

範例程式碼:

  1. 使用主機 PID 命名空間執行容器:

    • 這表示容器與主機共用相同的「票號」。
      docker run --pid=host ubuntu
  2. 執行具有隔離 PID 命名空間的容器:

    • 這表示容器有自己的一組獨立於主機的「票號」。
      docker run --pid=container ubuntu

在第一個範例中,容器與進程交互,就好像它與主機位於同一空間中一樣。在第二個範例中,容器有自己的進程隔離空間。這就像在大型活動中擁有一個私人區域,您的團隊有自己的一套票號,讓您可以獨立於活動的其餘部分進行操作。

容器化概念:

  1. 進程 ID 命名空間:

    • 容器有自己獨立的流程 ID (PID) 空間,因此容器內的流程與容器外的流程是分開的。

    • 例:

      docker run --pid=host ubuntu
      • 此指令使用主機的 PID 命名空間來執行容器,因此它共用相同的程序。
  2. 網路命名空間:

    • 容器也有自己獨立的網路命名空間,這意味著它們可以有自己的網路配置。

    • 例:

      docker run --net=host nginx
      • 此指令使用主機的網路命名空間來執行容器。
  3. Unix分時命名空間:

    • 此命名空間允許容器擁有自己的時間視圖,與主機和其他容器分開。

    • 例:

      docker run --uts=host ubuntu
      • 此指令使用主機的 Unix 時間共用命名空間來執行容器。
  4. 進程間掛載命名空間:

    • Mount命名空間隔離檔案系統,讓容器擁有自己的檔案系統視圖。

    • 例:

      docker run --mount=type=bind,source=/host/folder,target=/container/folder ubuntu
      • 此指令將主機中的資料夾安裝到容器中。

當然!我們來簡化一下cgroup的概念:

C組:

cgroup(控制組的縮寫)可協助在不同進程或容器之間管理和分配系統資源,例如 CPU 和記憶體。它們確保沒有任何一個進程或容器耗盡所有可用資源,從而保持一切平衡。

範例程式碼:

  1. 使用 Cgroup 設定 CPU 限制:

    • 這就像說聚會上的每位客人只能吃一定數量的食物。

      docker run --cpus=0.5 ubuntu
    • 這限制容器僅使用一半的 CPU 核心。

  2. 使用 Cgroup 設定記憶體限制:

    • 這就像說每位客人只能在舞池上佔據一定的空間。

      docker run --memory=100m ubuntu
    • 這限制容器僅使用 100 MB 記憶體。

Docker 引擎概述

使用 Docker Engine API 進行開發

執行時指標

Linux容器與Windows容器的概念:

Linux 容器(預設):

Linux 容器是一種打包和執行軟體及其所需一切的方法,它們最適合執行 Linux 的電腦。

Windows 容器:

Windows 容器是一種打包和執行軟體的方式,就像 Linux 容器一樣,但它們設計用於執行 Windows 的電腦。

Windows 容器基礎:

  1. 集裝箱類型:

    • Windows 容器有兩種主要類型:Windows Server Core 和 Nano Server。

      • Windows Server Core: 將其視為功能更齊全的容器,適合各種應用程式。

      • Nano Server: 將其視為一個輕量級容器,專為特定的、簡約的用例而設計。

  2. 基礎鏡像:

    • 基礎映像就像是建立容器時開始使用的空白畫布。

      • 例:

        docker pull mcr.microsoft.com/windows/servercore:ltsc2019
      • 此指令擷取 Windows Server Core 基礎映像。

      • 例:

        docker pull mcr.microsoft.com/windows/nanoserver:ltsc2019
      • 此命令提取 Nano Server 基礎映像。

  3. 支援的環境:

    • Windows 容器可以在特定版本的 Windows 作業系統上運作。

      • 例:

      • 您可以在 Windows Server 2016 上執行 Windows 容器。

      • 例:

      • 您可以在 Windows 10 專業版和企業版上執行 Windows 容器,並使用 Hyper-V 隔離容器進行額外隔離。

容器編排

容器編排

容器編排是一種管理和協調多個容器的方法,確保它們無縫協作來執行應用程式,就像一個超級智能的管理器確保所有機器人一起工作來建置完美的塔一樣。

為什麼要編曲?

  1. 多項任務,一名經理:

    • 想像一下您有許多機器人(容器)執行不同的工作。編排就像有一位超級聰明的經理(編排者),他告訴每個機器人該做什麼,並確保一切順利進行。
  2. 一致性:

    • 編排確保所有任務每次都以相同的方式完成。這就像為您的機器人提供了一套要遵循的指令,以確保其行為的一致性。
  3. 效率:

    • 編排有助於優化任務,確保資源(如時間和材料)有效利用。這就像經理確保所有機器人一起工作而不浪費能源。
  4. 縮放比例:

    • 當您需要完成更多工作時,編排可以輕鬆建立額外的機器人(容器)。這就像當有很多事情需要完成時神奇地召喚更多機器人來提供幫助。
  5. 可靠性:

    • 編排確保任務可靠地完成,即使機器人(容器)出現故障。這就像製定備份計劃來確保無論如何都能完成工作。
  6. 協調:

    • 編排協調任務,確保機器人無縫協作。這就像經理確保每個機器人都知道自己的角色並協作以實現總體目標。

容器編排程式碼:

# Create a Docker service with 100 replicas (instances) of a Node.js application
docker service create --replicas 100 --name my-nodejs-app nodejs

在這個例子中:

  • docker service create:該指令告訴 Docker 建立一個服務,該服務是一組正在執行的容器。

  • --replicas 100:此標誌指定您需要 100 個服務實例(副本)。

  • --name my-nodejs-app:此標誌為您的服務提供名稱,在本例中為「my-nodejs-app」。

  • nodejs:這是 Node.js 應用程式的圖片或配方。這就像是烘焙紙杯蛋糕的藍圖。

因此,這段簡單的程式碼就像告訴您神奇的廚師助手 (Docker Swarm) 建立 Node.js 應用程式的 100 個副本,確保您有大量容器正在執行並準備好提供服務。

Docker 群

Docker Swarm

Docker Swarm 是一個工具,可以幫助協調和管理一組電腦(節點)作為一個機器人團隊一起工作,使它們能夠以協調的方式部署和執行多個容器。這就像有一個首席機器人經理,確保所有單一機器人一起建造出偉大而令人驚嘆的東西。

設定 Docker Swarm:

  1. 群組管理器:

    • 想像你有一個首席機器人(Swarm Manager)來領導團隊。主機器人決定需要做什麼,並指導其他機器人(節點)如何協同工作。
      # Initiate Docker Swarm on the Swarm Manager
      docker swarm init
  2. 節點工作人員:

    • 現在,您的工作機器人(節點工作人員)已準備好加入團隊。 Swarm Manager 共享一個特殊的程式碼(令牌)來邀請他們一起工作。
      # Join a Node Worker to the Docker Swarm
      docker swarm join --token <token> <Swarm Manager IP>

Docker Swarm 服務:

現在您已經有了一個協調的團隊,您想要建立一項服務,例如與您的機器人團隊一起建造塔:

# Create a Docker service (a group of containers) with 3 replicas (instances)
docker service create --replicas 3 --network frontend --name my-web-server my-web-image
  • --replicas 3:此標誌告訴 Docker 建立服務的三個實例(副本)。

  • --network frontend:此標誌指定您的服務屬於名為「frontend」的網路。

  • --name my-web-server:這會為您的服務命名,在本例中為「my-web-server」。

  • my-web-image:這是您的網頁伺服器的圖片或藍圖。這就像建造塔樓的配方。

您建立了一個由隊長(Swarm Manager)和工作機器人(Node Workers)組成的機器人團隊。然後,您指示他們建立一個執行您的 Web 伺服器應用程式的服務(容器群組)。主機器人確保建立 Web 伺服器的三個副本並將其連接到「前端」網路。這就像有一個首席機器人經理在工作機器人的幫助下監督多個塔(貨櫃)的建造。

圖片描述

好的,這就是本文的內容。

另外,如果您對此或其他任何問題有任何疑問,請隨時在下面的評論中或在 InstagramFacebookTwitter

感謝您閱讀這篇文章,我們下一篇再見! ❤️


原文出處:https://dev.to/abhixsh/docker-for-the-absolute-beginner-3h1p


共有 0 則留言