tags: CI/CD

Docker-練習

  • Docker Hub 與 Docker Registry

    • Docker Hub:Docker官方營運的Docker Registry
    • Docker Registry:發布映像檔的場所
      • Registry(儲存空間):image的儲存空間。e.g:公司部門
      • Repository(儲存庫):儲存空間再進一步細分。e.g:公司部門內,再以軟體單位架設的空間
  • Dockerfile 與 Docker Compose

    • Dockerfile:建立image
    • Docker Compose:建立容器、網路、卷宗
  • 掛載(mounting) : 是指可讀寫的連接狀態

  • 卷宗 : 容器可掛載的儲存空間

  • Docker網路 : 指Docker間彼此連接的虛擬網路

  • 指令:

    • name: 指定名稱
    • -p:指定埠號
    • -v:掛載卷宗
    • net:容器連接網路
    • -e:環境變數名稱=值
    • -d:在背景執行
    • -i:容器對應操作裝置(鍵盤)
    • -t:可使用特殊鍵
    • -dit:d + -i + -t
    • -help:提示用法
    • -p 主機的埠號:容器的埠號:設定連接埠。e.g. -p 8080:80
    • httpd:Apache的映像檔名稱。若未指定版本號,會直接下載最新版(latest)
  • 複製指令:

    • 複製製容器(主機->容器):docker cp 主機端路徑 容器名稱 : 容器端路徑(>docker cp C:\Users\LIU\OneDrive\桌面\Documents\index.html apa000ex19:/usr/local/apache2/htdocs/Successfully copied 2.05kB to apa000ex19:/usr/local/apache2/htdocs/)
    • 由容器複製(容器->主機):docker cp 容器名稱:容器端路徑 主機端路徑(docker cp apa000ex19:/usr/local/apache2/htdocs/index.html C:\Users\LIU\OneDrive\桌面\DocumentsSuccessfully copied 2.05kB to C:\Users\LIU\OneDrive\桌面\Documents)
    • 複製的指令碼:docker cp 複製源頭的路徑 複製目的地的容器名稱:容器端的路徑

  • Docker: 是可隔離資料、程式的工具

  • image(映像檔): 是容器的設計圖,用以建立容器。也可以以容器建立image

  • 容器的生命週期與資料儲存

    • 生命週期: 建立→啟動→停用→捨棄=生命週期。(捨棄容器前,務必檢查有無重要資料)
    • 資料儲存:檔案存在容器裡,會跟著容器消失。因此會掛載Docker實體主機(電腦)的硬碟,將資料存在該硬碟。
  • Docker:

    • 優點:可隔離容器
      • 1.彼此獨立
      • 2.可建立映像檔
      • 3.容器『不含核心部分』:可減少電腦資源
    • 缺點: 使用Linux系統技術
      • 1.不支援Windows伺服器
      • 2.單一實體主機承載眾多伺服器,主機故障時,所有容器皆會受到影響
      • 3.若使用單一容器,無法展現其優點
    • 應用:
      • 1.向全員提供一致的開發環境(=建置多個相同環境)
      • 2.方便測試新的版本(OS、函式庫等)(=利用完全隔離的性質)
      • 3.容易建置多個相同的伺服器(=利用彼此獨立的性質)
  • 安裝:需啟用WSL2

  • 啟用、停用Doker Engine:

    • Doker指令:都是「Doker」開頭,接著輸入「主體(上級指令)」、「動作(副指令)」(選項,可有可無)、「對象(容器、映像檔名稱)」(參數,可有可無)
  • 容器的建立、刪除、啟動與停用:

    • docker run : docker pull + docker create + docker start
    • 捨棄容器前得先停用,無法刪除正在運行的容器
    • 停用:docker stop 容器名稱
    • 刪除:docker rm 容器名稱
    • 容器:
      • 僅單次執行
      • 以常駐程式的方式執行:若沒加上-d,會一直佔據控制,無附加-i、-t,無法使用鍵盤操作容器的內容
    • 與容器溝通:須以實體主機的連接埠與容器通訊
    • 刪除image:刪除容器不會一併刪除image;容器存在時,無法刪除image。刪除指令:docker image rm 映像檔名稱 映像檔名稱 映像檔名稱‧‧‧‧‧‧

  • 複製檔案:

    • 檔案可從容器複製到主機(底層電腦),也可從主機複製至容器。
  • 繫結掛載:

    • 將文件夾、桌面等不在Docker Engine 管理下的既存目錄掛載至容器,也可以檔案單位進行掛載。
    • 常用來存放需要頻繁使用的檔案。
  • 卷宗掛載:

    • 難以直接操作
    • 卷宗:儲存空間中的一個切割區域。
    • 掛載:掛上載入,將連結對象至於作業系統、軟體的支配之下。可想像為USB掛載至電腦
    • 通常用來放置「想要臨時使用的資料」、「少用但不可刪除的資料」。
  • 暫存檔案系統(tmpfs)掛載:

    • 掛載的對象為記憶體,主要用於高速存取,但會隨著Docker Engine停用、主機重新開機而消滅。
  • 以容器建立imgae:

    • 以commit建立映像檔
    • 以Dockerfile建立映像檔
  • 改造容器:

    • 方法:
        1. 檔案傳輸
        1. 以Linux指令下達命令
  • Docker Compose:

    • 用於想要同時啟動資料庫與應用程式的時候、想要大量生產執行環境的時候。

    • YAML格式:

      • 大項目
        • 新增名稱
          • 設定內容
    • 指令:禁止使用Tab鍵縮排,YAML空白有意義,Tab鍵無意義。

      • up:建立、啟動
      • down:停用、刪除
      • 建立容器、運行環境的指令「docker-compose up」
        • docker-compose -f 定義檔的路徑 up 選項
        • 例: docker-compose -f C:\Users\LIU\OneDrive\桌面\Documents\com_folder\docker-compose.yml up -d
      • 刪除容器、網路的指令「docker-compose down」
        • docker-compose -f 定義檔的路徑 down 選項
        • 例:>docker-compose -f C:\Users\LIU\OneDrive\桌面\Documents\com_folder\docker-compose.yml down
      • 停用容器的指令「docker-compose stop」
        • docker-compos -f 定義檔的路徑 stop 選項
        • 例:
  • Kubernetes(K8S):

    • 是以多台伺服器運行容器時的「調度管理工具」,可有效處理建立、管理容器等繁雜事務的工具

    • 節點:

      • 叢集(Cluster):主要節點 + 工作節點,管理員僅會對主要節點進行初期設定、調整,不會直接由管理員的電腦管理工作節點。
      • 主要節點:管理容器,不會運行容器,不須安裝Docker Engine
      • 工作節點:相當於實體伺服器,必須安裝Docker Engine
    • Docker Compose 與 K8S

      • Docker Compose:建立用完即捨棄
      • K8S:保持相同的理想狀態
    • K8S讀取定義檔後以指令直接調整容器,會發生手邊的定義檔與etcd上的資訊內容有所出入,建議嚴格管理運用

    • 構成與用語:

      • Pod(容器組):管理容器的單位,也就是成套的容器和卷宗,可以有一個或多個容器。
      • Service(服務):統籌管理Pod的功能,可想像成管束Pod的班長(負責處理通訊)。一個Service管理同種類的Pod。
      • Deployment(部署):用來管理Pod的部屬(配置、展開),內含是否使用映像檔等與Pod有關的資訊,為ReplicaSet的上司。
      • ReplicaSet(副本集):負責管理Pod數量的班長,當Pod因故障停用時,增加不足的數量;下修定義檔中的Pod數量時,則減少相應的數量。常與Deployment一併使用。
    • 清單(manifest):Pod、Service等相關設定。

    • 清單檔案(定義檔):編寫該清單的檔案,須以YAML格式或者JSON格式編寫。

      • K8S:會照定義檔的內容建立Pod,該「理想狀態」會寫進資料庫(etcd),維持伺服器的「理想狀態」。
      • 大項目:
        • apiVersion:API群組與版本
        • kind:資源的種類
        • metadata:元資料
          • 輸入資源的名稱、標籤
        • spec:規格
          • 建立什麼樣的資源設定資訊