docker commands

Docker 採用與 Git 類似的指令,若有學過 Git 的人,想必對於 Docker 某些指令感到熟悉,以下整理目前 Docker 的所有指令,並依依說明其功能。
以下為 Docker 的子指令分類:
分類名稱
指令
info、version、deamon
create、kill、exec、pause、restart、rm、start、stop、run、unpause
build、images、import、load、rmi、save、tag、commit
login、logout、pull、push、search
attach、export、inspect、port、ps、rename、stats、top、wait、cp、diff
events、history、logs

daemon 服務指令

如果不是檔案庫安裝docker服務,我們就需要使用到該指令,否則可以省略。手動啟動 docker 服務時,可以加入容器的 DNS設定、儲存驅動與執行驅動的參數,如下:
$ export DOCKER_HOST="tcp://0.0.0.0:2375"
$ Docker -d -D -e lxc -s btrfs --dns 8.8.8.8 --dns-search example.com

只有手動啟動需要上述指令,如果是自動只需要執行sudo service docker start 即可,OS X 與 Windows 可以安裝 Docker Toolbox
選項
說明
-d
以服務方式執行 Docker
-D
Debug 模式執行 Docker
-e [option]
指定執行驅動,預設為 libcontainer
-s [option]
強制 Docker 使用指定儲存驅動,預設為 AUFS
--dns [option]
設定所有容器使用的 DNS 伺服器
--dns-search [option]
設定所有容器蒐尋的網域
-H [option]
關連的socket,可以是一個或多個以下格式 tcp://host:portunix:///path/to/socketfd://* 或者 df://socketfd

version 版本指令

使用 version 或者『-v』顯示版本,如下:
$ docker -v
Docker version 1.9.0, build 76d6bc9

$ docker version
Client:
Version:      1.9.0
API version:  1.21
...

info 資訊指令

想列出 docker 服務設定值,如執行驅動、儲存驅動等,可以使用info:
$ docker info
Containers: 0
Images: 22
Server Version: 1.9.0
Storage Driver: aufs
...

run 執行指令

若要執行一個 Container,可以用 run 來執行:
$ docker run [options] IMAGE [command] [args]
範例如:
$ docker run -d -p 8080:80 -p 10022:22 --name apache2 kairen/apache2:1.0.0 /bin/sh -c "/etc/boot_run.sh -d"

選項
說明
-a, --attach=[]
附加 stdin、stdout 或 stderr 檔案
-d, --detach
使容器執行於背景
-i, --interactive
開啟互動模式(保持 stdin 檔案在開啟狀態)
-t, --tty
配置一個虛擬終端機
-p, --publish=[]
對主機開放一個容器內的通訊埠,格式為hostport:containerport
--rm
在容器結束時,自動刪除容器檔案(無法與 -d 共用)
--privileged
給予容器額外特殊權限
-v, --volume=[]
給予特定容器掛載 volume
-w, --workdir=""
設定容器中工作目錄
--name=""
設定容器名稱
-h, -hostname=""
設定容器主機名稱
-u, --user=""
設定容器執行時的使用者帳號
-e, --env=[]
設定環境變數
--env-file=[]
從一個檔案中讀取環境變數
--dns=[]
設定自訂的 DNS 伺服器
--dns-search=[]
設定自訂的搜尋網域
--link=[]
建立與其他容器連結(輸入容器名稱)
-c, --cpu-shares=0
設定 CPU 的相對共用值
--cpuset=""
執行時能使用的 CPU 個數,最小為 0
-m, --memory=""
設定記憶體限制({number}{b\k\m\g})
--restart=""
設定當容器掛點時,重新啟動方式。no:掛了不重啟。on-failure:回傳了非 0 的結束碼自動重啟。always:無論回傳結果如何,都會重啟。
--cap-add=""
取得容器權限能力
--cap-drop=""
禁止容器使用權限能力
--device=""
在容器中掛載設備

exec 執行內部程式

我們可以用 exec 來執行容器內的程式,或者配置虛擬終端機來與容器作互動:
$ docker exec -t -i <CONTAINER>
-t為配置虛擬終端機,-i為互動模式。

start 啟動指令

若容器被停止了,且沒有設定自動重啟,可以使用該指令啟動容器:
$ docker start [-a] [-i] <CONTAINERS>
<containers> 可以是 ID 或 NAME

stop 終止指令

若要關閉正在執行的容器,可以使用該指令,stop 會送出 SIGTERM 與 SIGKILL 訊號至容器,使得一個容器被停止:
$ docker stop [-t/--time] <CONTAINERS>
-t 或 --time 可以設定等待時間。
P.S: SIGTERM 與 SIGKILL 是 Unix 訊號,是一種 Unix 與其他的 POSIX 相容作業系統中行程間通訊協定,收到 SIGTERM 會停止行程,收到 SIGKILL 會殺掉行程。

restart 重啟指令

透過 restart 指令可以重新啟動容器:
$ docker restart <CONTAINERS>

rm 刪除指令

若已停止的容器,並不會被完全刪除,我們必須透過該指令來刪除:
$ docker rm <CONTAINERS>
$ docker rm $(docker ps -a -q)
$ docker ps -a -q | xargs docker rm

kill 終止

若想強制終止容器,可以使用 kill 指令,就會送出 SIGTERM:
$ docker kill <CONTAINER>

build 建立映像檔

若想利用 Dockerfile 建立自己的映像檔,就必須使用到該指令:
$ docker build [options] PATH | URL | -
$ docker build -t="kairen/hadoop:2.6.0" .
.為 Dockerfile 檔案目錄。
選項
說明
-t, --tag=""
這是當建立成功時,映像檔所在檔案庫的名稱
-q, --quiet
不輸出訊息,預設為顯示
--rm=true
當成功建立後,刪除過程中產生的容器
--force-rm
不論成功建立與否,都刪除過程中所產生的容器
--no-cache
在建立過程中不使用快取

commit 提交

commit 有點像是 Git 的提交,可以將目前的容器檔案系統包裝產生一個新的映像檔:
$ docker commit [options] <CONTAINER> <REPOSITORY:TAG>
選項
說明
-p, --pause
再提交過程中加入暫停(v1.1.1 later)
-m, --message=""
指定提交的訊息,描述映像檔的用途
-a, --author=""
指定映像檔作者資訊

images 映像檔

若要查看所有映像檔,可以只用該指令:
$ docker images [options] [NAME]
$ docker images | head
選項
說明
-a, --all
顯示所有映像檔,包括中間層
-f, --filter=[]
提供篩選功能
--no-trunc
不切斷映像檔 ID
-q, --quiet
只顯示映像檔 ID

rmi 刪除

若想刪除不需要的映像檔,會將所有依賴的相關映像等一起刪除:
$ docekr rmi [option] <IMAGE>
選項
說明
-f, --force
強制刪除映像檔
--no-prune
不刪除沒標籤的上層映像檔

save 儲存

save 可以將一個映像檔儲存成 tar 封裝檔,並輸出至標準輸出(stdout),保存了這映像檔的父檔層與元資料:
$ docker save -o ubunut.tar ubuntu
$ docker save ubuntu > ubunut.tar

load 載入

若要載⼊一個 image 可以使⽤以下⽅式:
$ docker load < kairen-apache2.tar
$ docker load --input kairen-apache2.tar

import 匯入

import 會先建立一個空的映像檔,再將 tar 封裝檔的內容匯入:
cat ubuntu.tar | docker import - kairen/ubuntu:14.04

如果想從網路匯入可以使用以下:

$ docker import URL|- [REPOSITORY:TAG]
$ docker import http://example.com/exampleimage.tgz example/ imagerepo

tag 標籤

若要對映像檔下標籤,來對映像檔做版本資訊,可以使用以下方式:
$ docker tag <IMAGE> [REGISTRYHOST/][USERNAME/][NAME:TAG]
$ docker tag kairen/apache:1.0.0
一般下標籤會遵守以下格式:username/repository:tag

search 查詢網路資源庫 images

我們可以用 search 指令來搜尋公開的資源庫中的 docker 映像檔,例如以下:
$ docker search python | less
NAME                        DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
python                      Python is an interpreted, interactive, obj...   449       [OK]

pull 取下指令

若要抓取想要的映像檔,可以使用 pull 指令來達到,預設會到官方資源庫搜尋:
$ docker pull ubuntu
$ docker pull ubuntu:14.04
若為加:則會抓取最新版本,若加:可以指定版本。

login 登入 docker hub

使用該指令可以讓 docker client 登入 docker hub:
$ docker login [options] [SERVER]
選項
說明
-e, --email=""
指定 Email
-p, --password=""
指定密碼
-u, --username=""
指定帳號

logout 登出 docker hub

使用該指令可以讓 docker client 登出 docker hub:
$ docker logout

push 上傳 docker hub

若想將建立好的 docker 送交至公開的資源庫或私人的資源庫,可以用該指令:

$ docker push NAME:TAG


ps 容器狀態

列出容器清單,可以加入選項:
$ docker ps [options]
選項
說明
-a, --all
顯示所有容器,包含已停止
-q, --quiet
只顯示 ID
-s, --size
顯示容器佔用空間
-l, --latest
只顯示最新的容器
-n=""
顯示最新的 n 個容器
-before=""
顯示特定名稱容器之前的容器
-after=""
顯示特定名稱容器之後的容器

inspect 檢閱

該指令可以列出容器或者映像檔的詳細資訊,回傳格式為 JSON:
$ docker inspect <CONTAINER/IMAGE>
$ docker inspect -f '{{.NetworkSettings.IPAddress}}' <CONTAINER>
-f 後面可以接著使用 GO 語言板模表示法。

top 行程資訊

top 指令可以顯示容器內的行程與統計資料,與 Unix top 類似:
$ docker top <CONTAINER>

attach 附加

該指令讓我們附接一個正在執行的容器:

$ docker run -dit --name ubuntu ubuntu:14.04

$ docker attach ubuntu

cp 複製

若想從容器複製檔案或目錄到主機的路徑,可以使用以下:

$ docker run -it --name ubuntu ubuntu:14.04 /bin/bash

$ touch $(echo -e '\007')

$ docker cp ubuntu:/$(echo -e '\007') $(pwd)

diff 差異

若要查看一個容器與映像檔之間的狀態被修改了哪些,可以使用該指令:
$ docker diff <CONTAINER>

export 匯出

若要將容器的檔案系統儲存為 tar 封裝檔,並將內容輸出至標準輸出,他將容器內所有檔案層整合包裝,因此映像檔歷史記錄與metadata 不會被儲存:
docker export <container_id> > ubuntu.tar

wait 等待

該指令能夠暫停工作直到容器停止,並輸出結束碼:

$ docker wait <CONTAINER>

logs 檢視

使用 logs 來查看容器的 log 資訊:
$ docker logs [--tail] [-t] <CONTAINER>
--tail 追蹤一個容器,-t查看 log 時間。

history 歷史紀錄

history 指令可以列出一個映像檔的歷史紀錄:

$ docker history <IMAGE>

events 事件

若想知道 docker 服務的事件,可以使用該指令:
$ docker events [options]
選項
說明
--since=""
顯示由什麼時間開始的事件
--until=""
顯示到什麼時間為止的事件





留言

這個網誌中的熱門文章

Json概述以及python對json的相關操作

Docker容器日誌查看與清理

遠程控制管理工具ipmitool