基本操作概念與指令整理。
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 命令大全