關於Docker環境建置與執行,其中包含許多指令的使用。
Docker安裝
直接到 Docker官網 下載軟體進行安裝。支援MacOS、Windows 10、Linux,以及AWS與Azure等雲端服務。
安裝完後可以執行 docker run hello-world
指令
示範執行後,顯示 Hello from Docker!
等訊息,表示安裝成功。
接著期望能試點更進階的內容,就是執行一個ubuntu系統!
Docker Image操作
列出本機Images
使用 docker images
指令,可顯示本機已有的images:
REPOSITORY TAG IMAGE ID CREATED SIZEubuntu latest dd6f76d9cc90 4 days ago 122MBhello-world latest 725dcfab7d63 4 days ago 1.84kB
其中tag
用來標記同一個repository的不同image。
(image可能具有相同的image id
。表示這些是相同的image)
取得Image
前面docker在執行container前會去檢查是否本機有對應的image。如果不存在,則會去registry下載。
可使用docker pull
指令,從registry取得所需的image。
首先執行
docker pull ubuntu:latest
Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]
表示會從registry下載一個ubuntu
的image,tag為 latest
由於預設的registry是Docker Hub,因此該指令等同於
docker pull registry.hub.docker.com/ubuntu:latest
表示會從registry.hub.docker.com
下載一個hello-world
的image,tag為 latest
建立Image
可以直接建立一個,或從Docker Hub取得並修改。
docker run -t -i ubuntu /bin/bash# apt-get update
# apt-get install git
執行完後,container已經被改變,因此commit更新。
docker commit -m "Added Git package" -a "Starter" 88400ddfbf99 ubuntu:v2
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-m
後面附帶commit的說明訊息-a
可以附加作者的資訊- 剩下附帶參數分別是container id以及tag
利用Dockerfile建立image
除了 docker commit
外,還可以使用 docker build
來建立image。
# Dockerfile
FROM ubuntu
MAINTAINER Docker Starter <starter@docker.com>
RUN apt-get update
RUN apt-get install zip -y
Dockerfile的語法介紹
#
: 註解FROM
: 基底imageMAINTAINER
: 維護者的資訊RUN
: 在container建立時執行的動作
接著可以建立image:
docker build -t="ubuntu:v3" .
Usage: docker build [OPTIONS] PATH | URL | -
-t
是指定image的tag;.
則是當前目錄
docker build的運作流程如下:
- 首先會將Dockerfile的內容上傳,之後所有操作會依據Dockerfile來執行。
- 接著每一步都會建立一個新的容器,執行command 與commit的動作。
- 最後回傳一個image id,並將中間步驟所產生的container都會被刪除。
上傳Image
可透過 docker push
的方式將image上傳到registry與其他使用者共享。
docker push ubuntu:v3
Usage: docker push [OPTIONS] NAME[:TAG]
儲存/載入Image
docker save
可將image存到本機檔案。
docker save -o ubuntu.tar ubuntu:v3
-o
: 表示是寫入檔案;預設為寫入STDOUT
docker load
可將載入image從本機檔案載入docker images。
docker load -i ubuntu.tar
-i
: 表示讀取tar檔;預設為使用STDIN。
其他指令
docker tag
: 更改名稱及tagdocker rmi
: 移除imagedocker rm
: 移除container
(待續:Docker Image如何實作)
Docker Container操作
啟動Container
可使用 docker run
指令。
以下指令啟動一個ubuntu的bash終端
docker run -t -i ubuntu /bin/bash
上面參數包含:
-t
:讓Docker分配到一個虛擬終端(pseudo-tty),並綁定到容器的標準輸入上。-i
:則是讓容器的標準輸入(STDIN)保持開啟狀態。/bin/bash
:是執行ubuntu中的應用程式
當使用 docker run
來建立container時,背後運行了以下流程:
- 檢查本機是否有指定image,若不存在則到registry下載
- 使用image建立並啟動container
- 分配到一個檔案系統,並在read layer(唯讀層)外掛載一層read-write layer(可讀寫層)
- 從原電腦主機設定的網路介面橋接
- 執行使用者指定的應用程式
- 執行完畢後container被終止
背景執行
大部分需要Docker container以背景方式執行。此時會需要 -d
參數。
例如以下指令,在背景執行一個程式,啟動後會返回一個container id
docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
其他指令
要查看docker的container id,也可以透過 docker ps
指令查詢,可列出所有container清單。
可以透過 docker logs
指令來查看container的輸出訊息
docker logs [container id]
終止Container
使用 docker stop
結束container的運行。
如果要將已結束的container再次啟動,可使用 docker start [container id]
指令。
進入Container
可執行 docker exec
或 docker attach
指令。
docker exec允許在執行中的container當中輸入命令
Usages: docker exec [OPTIONS] CONTAINER_ID COMMAND
docker exec -ti 243c32535da7 bash
docker attach將標準輸入輸出綁定於執行中的container。
匯入與匯出Container
docker export
將容器存成本機檔案
docker export 243c32535da7 > ubuntu.tar
docker import
將容器匯入為image
docker import ubuntu.tar - ubuntu:v3.5