Docker循序漸進

楠槡發表於2018-01-07

上一篇大致介紹了什麼是Docker和其安裝(以Ubuntu為例)。這篇來說說,Docker的基本操作。

非Root使用者授權

上一篇的演示中使用的都是預設登入了Root許可權後的操作,而實際的開發運維情況下,我們一般極少使用Root許可權,所以Docker提供了一個許可權組,我們只需要把當前使用者加入到Docker使用者組中。

一共需要三條指令:

$ sudo groupadd docker
$ sudo gpasswd -a ${USER} docker
$ sudo service docker restart
複製程式碼

三條指令的意思分別是:

  • 新增docker使用者組,一般會預設建立,提示已存在
  • 將使用者新增到docker使用者組
  • 重啟docker服務

示例如下

user

注意 重啟服務後,仍需推出當前使用者,重新登陸使使用者許可權生效!

容器的基本操作

本內容僅提供常用操作命令及引數,並非完整內容,具體可以參考官方文件或三方手冊補全。

推薦參考菜鳥教程(RUNOOB.COM)的-Docker命令大全

啟動容器

$ docker run IMAGE [COMMAND] [AGR…]
複製程式碼
  • run 在新容器中執行的命令
  • IMAGE 啟動容器所使用的作業系統的映象
  • [COMMAND] 容器啟動後的執行命令
  • [AGR] 命令引數

示例:

一個執行單一指令的基本容器

$ docker run ubuntu echo 'Hello world!'
複製程式碼

hello

啟動互動式容器

$ docker run -i -t IMAGE /bin/bash
複製程式碼
  • -i 開啟標準輸入(互動) --interactive = true | false 預設是false
  • -t 分配偽tty終端 --tty = true | false 預設是false

示例:

$ docker run -i -t ubuntu /bin/bash
複製程式碼

itrun

docker建立了一個允許使用bash互動的系統,當執行exit時推出,釋放資源。

檢視容器

PS 列舉

$ docker ps [OPTIONS]
複製程式碼
  • -a 檢視所有容器
  • -l 檢視最近建立的容器
  • 無參 正在執行的容器

ps

inspect 檢視容器資訊

docker inspect NAME|ID [NAME|ID...]
複製程式碼

引數為 ps列舉出的ID /NAME

執行後列舉出容器的元資訊,此處略過。

順帶一提:

前文中run指令中未提到,給容器指定名稱的方法:

$ docker run --name=自定義名 -i -t IMAGE /bin/bash
複製程式碼

重新啟動停止的容器

很多時候並不需要不停的建立容器,而是可以將已經停止的容器重啟來使用。

$ docker start [-i] 容器名
複製程式碼
  • -i 互動模式

示例如下:

start

刪除停止的容器

$ docker rm 容器名
複製程式碼

示例如下:

rm

守護式容器

區別於互動式容器,守護式容器有如下特點:

  • 能長期執行
  • 沒有互動式會話
  • 適合執行應用程式和服務

以守護形式執行容器

推出互動模式,後臺執行:

使用快捷鍵 Ctrl+P + Ctrl+Q

退出互動

退出互動後,容器仍在執行,使用docker ps檢視

直到執行exit,容器被釋放

附加到執行中的容器

$ docker attach 容器名
複製程式碼

執行指令後重新進入容器互動介面,圖略

建立守護式容器

直接使用run來建立互動式容器

$ docker run -d IMAGE [COMMAND] [AGR…]
複製程式碼

區別於預設模式,-d參數列面啟動後臺駐留

示例:(這裡通過編寫一個迴圈shell來驗證)

$ docker run --name dc_test -d ubuntu /bin/sh -c "while true; do echo 'hello world'; sleep 1; done"
複製程式碼

執行後返回ID,截圖略

檢視容器執行情況

$ docker logs [-f] [-t] [--tail] 容器名
複製程式碼

引數:

  • -f 保持跟蹤日誌變化並返回結果 --follows = true | false 預設為false
  • -t 返回結果加上時間戳 --timestamps = true | false 預設為false
  • --tail = all 返回結尾處制定數量的日誌 不指定則返回所有

示例:

$ docker logs dc_test --tail 3 -t -f
複製程式碼

以前面建立的dc_test容器為例,先顯示三行,並保持跟蹤且顯示時間戳:

log

注意Ctrl+C退出(Linux下絕大部分操作通用嘛)

檢視程式內容

檢視執行中容器的程式:

$ docker top 容器名
複製程式碼

top

在執行的容器中啟動新的程式

Docker的理念是,在一個容器中使用一個服務,但仍然提供了在一個容器中執行多個程式的方法,從而實現對執行中容器進行維護,監控等操作。

$ docker exec [-d] [-i] [-t] 容器名 [COMMAND] [AGR…]
複製程式碼

引數-d/-i/-t 和前面run相同

$ docker exec -i -t dc_test /bin/bash
複製程式碼

以前面建立的dc_test容器為例,為其新增一個bash終端程式,並使用top指令檢視

exec

停止守護式容器

stop

$ docker stop 容器名
複製程式碼

傳送停止訊號給容器,等待容器的停止。

kill

$ docker kill 容器名
複製程式碼

直接停止容器。

相關文章