Docker | 容器 |(一)
--昨夜西風凋碧樹,獨上高樓,望盡天涯路
-
執行容器
docker run是啟動容器的方法。可用三種方式指定容器啟動時執行的命令:
(1)CMD指令 (2)ENTEYPOINT (3)在ducker run命令列中指定
例如在docker run Ubuntu後面跟pwd,容器啟動時執行pwd,並且返回結果(沒有指定工作空間,預設是/目錄)
通過docker ps 或者 docker container ls 檢視Docker Host中正在執行的容器:
通過docker ps -a 或者 docker container ls -a檢視所有狀態的容器:
docker run ubuntu的時候我們可以看到,ubuntu只是啟動了一下就退出了,Why?
這是因為容器的生命週期依賴於容器啟動時執行的命令,只要該命令不結束,容器就不會退出。
執行一個長期執行的ubuntu(通過執行一個長期執行的命令來保持容器的執行狀態):
while語句讓bash不會退出,開啟另一個終端檢視容器的狀態:
如果想要不佔用終端啟動,那麼在docker run後面加-d引數,指定後臺啟動:
我們可以通過-it引數直接在容器啟動時就進入容器:
通過--name顯示的可以給容器起名字:
可以看到,容器的names已經為chopper了,還有就是container ID是容器的短ID,是執行docker run返回的長ID的前12位。
我們可以通過長ID或者短ID或者容器的名稱來進行操作容器。
通過短ID停止容器:
-
進入容器
我們會經常進入到容器中去做一些操作,比如檢視日誌、除錯、啟動其他程序等。有兩種進入容器的方法:attach和exec。
(1)docker attach
通過docker attach可以attach到容器啟動命令的終端(這通過短ID進入到容器):
(2)docker exec
通過exec進入相同的容器:
-it是以互動模式開啟pseudo-TTY,執行bash,其結果就是打開了一個bash終端。
進入到容器中,容器的hostname就是短ID。
可以像在普通的linux中執行命令。ps -elf顯示了容器的啟動程序while以及當前的bash程序。
執行exit退出容器,回到docker host。
(3)docker attach VS docker exec
attach和exec的主要區別為:
1.attach直接進入容器啟動命令的終端,不會啟動新的程序
2.exec則是在容器中開啟新的終端,並且可以啟動新的程序
3.如果想直接在終端檢視啟動命令的輸出,用attach;其他情況用exec
如果只是為了檢視啟動命令的輸出,可以使用docker logs命令(-l能夠持續列印輸出):
容器按照用途可以分為兩類:服務類和工具類。
服務類一daemon的形式執行,對外提供服務,比如Web Server、資料庫等。通過-d以後臺方式啟動這類容器。如果要排查問題,可以通過exec -it進入容器。
工具類容器通常提供給我們一個臨時的工作環境,通常以run -it方式執行。
-
小結
容器執行相關知識:
(1)當CMD、ENTRYPOINT、docker run命令列執行的命令執行結束時,容器停止
(2)通過-d引數在後臺啟動容器
(3)通過exec -it可進入容器並執行命令
指定容器的三種方法:
(1)短ID
(2)長ID
(3)容器名稱。可通過--name為容器命名。重新命名容器可執行docker rename
容器按用途可以分為兩類:
(1)服務類容器
(2)工具類容器
補充:對於容器我們也可以先建立,在啟動:
-
stop/kill/start/restart/pause/unpause/rm 容器
通過stop可以停止正在執行的容器:
容器在docker中實際上相當於一個程序,docker stop命令本質上是向該程序傳送一個SIGTERM訊號。如果向快速停止容器,可以使用docker kill 命令,其作用是向容器程序發出SIGKILL訊號:
處於停止狀態的容器,可以通過docker start重新啟動:
docker start會保留容器第一次啟動時的所有引數。
docker restart可以重啟容器,其作用就是依次執行docker stop和docker start。
容器可能會因為某種錯誤而停止執行。對於服務類容器,我們通常希望在這種情況下能夠重啟。啟動時設定--restart就可以做到重啟。
--restart=always意味著無論如何容器因何種原因退出(包括正常退出),都立即重啟(如果是docker stop或者docker kill不會重啟);該引數的形式還可以是--restart=on-failure:3,意思是如果啟動程序退出程式碼非0,則重啟容器,最多重啟3次。
當我們需要容器暫停工作一段時間,比如要對容器的系統檔案打個快照或者docker host需要使用CPU,這時可以執行pause:
暫停狀態的容器不會佔用CPU資源,直到通過docker unpause回覆執行:
不需要容器時可以通過docker rm刪除:
單個刪除:
多個刪除:
批量刪除已退出容器: