Docker 筆記 Part 2 |指令操作

嘖喂
7 min readNov 8, 2017

--

關於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 : 基底image
  • MAINTAINER : 維護者的資訊
  • RUN : 在container建立時執行的動作

接著可以建立image:

docker build -t="ubuntu:v3" .

Usage: docker build [OPTIONS] PATH | URL | -

-t 是指定image的tag;. 則是當前目錄

docker build的運作流程如下:

  1. 首先會將Dockerfile的內容上傳,之後所有操作會依據Dockerfile來執行。
  2. 接著每一步都會建立一個新的容器,執行command 與commit的動作。
  3. 最後回傳一個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 : 更改名稱及tag
  • docker rmi : 移除image
  • docker 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時,背後運行了以下流程:

  1. 檢查本機是否有指定image,若不存在則到registry下載
  2. 使用image建立並啟動container
  3. 分配到一個檔案系統,並在read layer(唯讀層)外掛載一層read-write layer(可讀寫層)
  4. 從原電腦主機設定的網路介面橋接
  5. 執行使用者指定的應用程式
  6. 執行完畢後container被終止
Docker Layers

背景執行

大部分需要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 execdocker 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

參考資料

--

--

嘖喂
嘖喂

No responses yet