上一篇大致介紹了什麼是
Docker
和其安裝(以Ubuntu為例)。這篇來說說,Docker
的基本操作。
非Root使用者授權
上一篇的演示中使用的都是預設登入了Root
許可權後的操作,而實際的開發運維情況下,我們一般極少使用Root
許可權,所以Docker
提供了一個許可權組,我們只需要把當前使用者加入到Docker
使用者組中。
一共需要三條指令:
$ sudo groupadd docker
$ sudo gpasswd -a ${USER} docker
$ sudo service docker restart
複製程式碼
三條指令的意思分別是:
- 新增
docker
使用者組,一般會預設建立,提示已存在 - 將使用者新增到
docker
使用者組 - 重啟
docker
服務
示例如下
注意 重啟服務後,仍需推出當前使用者,重新登陸使使用者許可權生效!
容器的基本操作
本內容僅提供常用操作命令及引數,並非完整內容,具體可以參考官方文件或三方手冊補全。
推薦參考菜鳥教程(RUNOOB.COM
)的-Docker命令大全
啟動容器
$ docker run IMAGE [COMMAND] [AGR…]
複製程式碼
run
在新容器中執行的命令IMAGE
啟動容器所使用的作業系統的映象[COMMAND]
容器啟動後的執行命令[AGR]
命令引數
示例:
一個執行單一指令的基本容器
$ docker run ubuntu echo 'Hello world!'
複製程式碼
啟動互動式容器
$ 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
複製程式碼
docker
建立了一個允許使用bash互動的系統,當執行exit
時推出,釋放資源。
檢視容器
PS 列舉
$ docker ps [OPTIONS]
複製程式碼
-a
檢視所有容器-l
檢視最近建立的容器無參
正在執行的容器
inspect 檢視容器資訊
docker inspect NAME|ID [NAME|ID...]
複製程式碼
引數為 ps
列舉出的ID /NAME
執行後列舉出容器的元資訊,此處略過。
順帶一提:
前文中run
指令中未提到,給容器指定名稱的方法:
$ docker run --name=自定義名 -i -t IMAGE /bin/bash
複製程式碼
重新啟動停止的容器
很多時候並不需要不停的建立容器,而是可以將已經停止的容器重啟來使用。
$ docker start [-i] 容器名
複製程式碼
-i
互動模式
示例如下:
刪除停止的容器
$ docker 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
容器為例,先顯示三行,並保持跟蹤且顯示時間戳:
注意:Ctrl+C
退出(Linux下絕大部分操作通用嘛)
檢視程式內容
檢視執行中容器的程式:
$ docker 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
指令檢視
停止守護式容器
stop
$ docker stop 容器名
複製程式碼
傳送停止訊號給容器,等待容器的停止。
kill
$ docker kill 容器名
複製程式碼
直接停止容器。