1. 程式人生 > >Docker | 容器 |(一)

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刪除:

單個刪除:

多個刪除:

批量刪除已退出容器: