Docker 筆記

基本操作概念與指令整理。

Docker 安裝方式(在Windows 下)

  • Docker Toolbox (這個目前用下來最靈活,但目前官方已不再著手開發)
  • Docker Desktop (需要Hyper-V,Windows 10專業版以上才有的Hyper-V虛擬技術可用)

WSL 2 backend(Windows 需要裝 Linux kernel,可從微軟商店下載):

  • Windows 11 64-bit: Home or Pro version 21H2 or higher, or Enterprise or Education version 21H2 or higher.
  • Windows 10 64-bit: Home or Pro 2004 (build 19041) or higher, or Enterprise or Education 1909 (build 18363) or higher.

Hyper-V:

  • Windows 11 64-bit: Pro version 21H2 or higher, or Enterprise or Education version 21H2 or higher.
  • Windows 10 64-bit: Pro 2004 (build 19041) or higher, or Enterprise or Education 1909 (build 18363) or higher.

註:
目前VMware 、 Virtualbox 、BlueStack是可以在Hyper-V啟動,但啟動的速度有待改善,若有需要同時使用這些軟體的建議用Toolbox的安裝方式。

Docker Desktop 安裝文件
Docker Toolbox 安裝壓縮檔

存放Docker映像檔的地方

  • 官方的Docker Hub: 預設的下載來源
  • 非官方的公開Docker Registry:如果你要從這些地方下載,就必須在下載時指定完整的位址名稱,也可能需要該網站的認證金鑰,或是在Docker執行的設定檔中先設定好
  • 私有的Docker Registry:公司內部可以建立私有的Registry以保證不會用到來源不明的映像檔

Docker Hub的個人映像檔名稱

  • 標準的Docker Hub的個人映像檔名稱格式: /:
    • user name:使用者名稱。在Docker Hub上每個使用者都有一個獨立的名稱
    • repo name:倉庫名稱。在Docker Hub上的每一個使用者,都可以建立自己的倉庫,倉庫中可以放多個映像檔。
    • tag name:要分辨同一個倉庫中的不同映像檔,就要用tag name來區分。
    • 如果該倉庫中只有一個映像檔,則tag name可以省略。
    • 如果該倉庫中有多個映像檔,在沒有指定tag name時,以最新的一個為主。
    • 同一個映像檔可以有多個tag name,從相同的映像檔ID看,可看做是別名,也可利用做版控。

Docker 操作指令

  • docker info : 列出和系統相關的資訊,如image數、Container數、檔案系統目錄、Linux核心版本,使用Linux版本、CPU及記憶體等。

  • docker version : 列出目前Docker的版本

  • docker images: 列出本機image

    • -a:列出完整的image層次資訊。每個映像檔是由不同層次組成的,我們會在稍後說明。
    • -q:只列出image id。這在做映像檔批次處理時很方便。
  • docker pull : 就預設從官方的Registry下載(registry.hub.docker.com)(eg. docker pull ubuntu:latest)

    • -a: 將某一個倉庫的所有image都下載
  • docker save : 打成tarball(eg. docker save -o demo.tar user/demo)

    • -o Write to a file, instead of STDOUT
  • docker load : 載入tarball還原回image(eg. docker load –input demo.tar)

    • -i Read from tar archive file, instead of STDIN
  • docker rmi : 刪除映像檔

    • -f 強迫刪除
    • -no-prune=true這個參數,只殺掉有tag name的image。
  • docker rmi -f $(docker images -aq) : 一次刪掉所有image (Linux的批次指令)

  • docker tag : 給予image 一個tag名稱

  • docker build : 使用 Dockerfile create image

  • docker history : 查看image歷史紀錄

  • docker push: 上傳image (若沒有登入會提示你輸入帳號、密碼及電子郵件,可以先使用docker login 處理)

Docker有關Container的指令

Container和image之間的操作:

  • commit:將Container的改變存入image
  • export:將Container存成快照
  • import:從Container快照恢復成image

Container執行操作:

  • create:建立Container並執行指令
  • run:同create
    • -d 背景執行
    • -p 對外port號(eg. docker run -p 8080:8080 -p 8081:8081 demo)
    • –name Container名稱
    • -t:attach時Container的螢幕會接到原來的螢幕上。
    • -i:attach時鍵盤輸入會被Container接手
      註: docker run -it 會切入到要執行 Container內部終端操作介面
  • kill:刪除執行中的Container,但Container還是存在,只是沒啟動。
  • rm:刪除Container(停止或運行中都行),Container完整移除
  • pause:暫停執行中的Container,仍暫有記憶體停,服務不中斷
  • unpause:恢復暫停中的Container
  • stop:停止執行中的Container,但不暫有記憶體,服務中斷
  • start:啟動停止中的Container
  • restart:重新啟動Container
  • wait:讓Container暫停直到Container停止為止
  • rename: 更名Container

查詢Container的狀態:

  • inspect:檢查Container的狀態
  • stats:查看Container的CPU、記憶體及網路使用
  • port:查看Container的通訊埠使用
  • ps:查看Container使用狀態
  • top:查看Container在主系統中的記憶體使用
  • dip:查看Container的IP
  • dpid:查看Container的pid

Container執行時的操作:

  • docker attach : 進入執行中Container內部終端 (進入可用exit 離開該Container)
    註: 不建議用,該指令受限於啟動時的參數影響之後的操作結果。如果知道了entrypoint或者有程式正在執行,通過docker attach進入之後是不能執行操作的,因為退出就會終止Container的運行(–sig-proxy=false 需下這個參數防止)。
  • docker exec : 在外部向Container內執行指令。推薦使用該指令代替docker attach做日常維運用途
  • docker denter :進入Container
  • docker logs : 將Container內的輸出顯示

Container和主系統之間的操作:

  • cp:複製Container內的檔案到主系統
  • diff:列出兩個Container之間檔案系統差異
  • events:列出某個時間點之前或之後的事件

More info: Docker 命令大全