容器生命周期
容器的生命周期是容器可能處于的狀態(tài),主要有以下五種:
● created:初建狀態(tài)
● running:運行狀態(tài)
● stopped:停止狀態(tài)
● paused:暫停狀態(tài)
● deleted:刪除狀態(tài)

容器操作
初建啟動容器
通過
docker create命令創(chuàng)建的容器是處于初建狀態(tài)的,需要通過docker start命令來啟動初建容器;當然我們也可以通過docker run命令一步完成容器的初建與啟動。
當使用 docker run 創(chuàng)建并啟動容器時,Docker 后臺執(zhí)行的流程為:
● Docker 會檢查本地是否存在 busybox 鏡像,如果鏡像不存在則從 Docker Hub 拉取 busybox 鏡像;
● 使用 busybox 鏡像創(chuàng)建并啟動一個容器;
● 分配文件系統(tǒng),并且在鏡像只讀層外創(chuàng)建一個讀寫層;
● 從 Docker IP 池中分配一個 IP 給容器;
● 執(zhí)行用戶的啟動命令運行鏡像。
$ docker create -it --name=mybb busybox
$ docker ps -a | grep mybb
2c2e919c2d66 busybox "sh" 33 seconds ago Created mybb
$ docker start mybb
等同于
$ docker run -it --name=mybb busybox
終止容器
容器啟動后,如果我們想停止運行中的容器,可以使用
docker stop命令,命令格式為docker stop [-t|--time[=10]]。該命令首先會向運行中的容器發(fā)送 SIGTERM 信號,如果容器內(nèi) 1 號進程接受并能夠處理 SIGTERM,則等待 1 號進程處理完畢后退出,如果等待一段時間后,容器仍然沒有退出,則會發(fā)送 SIGKILL 強制終止容器。
$ docker stop mybb
$ docker ps -a
CONTAINERID IMAGE COMMAND CREATED STATUS PORTS NAMES
2c2e919c2d66 busybox "sh" 26 minutes ago Exited (137) About a minute ago mybb
$ docker start mybb
等同于
$ docker restart mybb
進入容器
處于運行狀態(tài)的容器,可以通過
docker attach、docker exec、nsenter等多種方式進入容器。
●docker attach:當我們同時使用該命令同時在多個終端運行時,所有的終端窗口將同步顯示相同內(nèi)容,當某個命令行窗口的命令阻塞時,其他命令行窗口同樣也無法操作,而且退出不當會導致容器停止,組合鍵Ctrl + p + q才能無損退出。
●docker exec:推薦使用,該命令更加靈活方便,可以通過docker exec -it CONTAINER方式進入運行中的容器,主要是通過在容器啟多一個 sh 進程,保證每個窗口都是獨立且互不干擾的,而且避免了退出不當導致容器停止的意外。
●nsenter:生產(chǎn)環(huán)境上常用,當一些容器內(nèi)的常規(guī)命令非常少,不利于快速分析問題時,使用該命令切換空間后就可以使用容器所在宿主機上的相關(guān)命令了;使用方式 nsenter -n -t `docker inspect --format "{{.State.Pid}}" 容器ID`。
$ docker attach 2c2e919c2d66
$ docker exec -it 2c2e919c2d66 sh
$ nsenter -n -t `docker inspect --format "{{.State.Pid}}" 2c2e919c2d66`
刪除容器
刪除容器的命令使用方式如下:
docker rm [OPTIONS] CONTAINER [CONTAINER...]。
如果要刪除正在運行中的容器,需要帶-f參數(shù),Docker 會先發(fā)送 SIGKILL 信號強制終止正在運行的容器并刪除。
$ docker rm 2c2e919c2d66
$ docker rm -f 2c2e919c2d66
導出容器
可以使用
docker export CONTAINER命令導出一個容器到文件,不管此時該容器是否處于運行中的狀態(tài)。
$ docker export mybb > mybb.tar
導入容器
可以使用
docker import命令導入并且指定導入的新鏡像名稱,執(zhí)行完該命令后,之前導出的文件會變?yōu)楸镜匦络R像,最后再使用 docker run 命令啟動該鏡像,這樣就間接實現(xiàn)了容器的遷移。
$ docker import mybb.tar busybox:v1