Docker學習之路(四)守護式容器

windows 7, docker 1.3.2,當前使用的容器名爲aoct,ID爲614122c0aabb。docker

開啓已經中止的容器

能夠start + 容器名shell

$ sudo docker start aoct

start + 容器IDubuntu

$ sudo docker start 614122c0aabb

clipboard.png

查看如今正在運行的容器:windows

$ sudo docker ps

clipboard.png

還能夠用docker restart重啓。bash

附到容器上

Docker容器從新啓動時,會沿用docker run命令指定的參數來運行,因此從新啓動後會運行一個交互式會話shell。也能夠用docker attach命令從新附到該容器的會話上:學習

$ sudo docker attach aoct

clipboard.png

如今就從新回到容器的巴士提示符。spa

也能夠用容器ID:3d

$ sudo docker attach 614122c0aabb

建立守護式容器

除了這些交互式運行的容器(interactive container),也能夠建立長期運行的容器。守護式容器(daemonized container)沒有交互式會話,適合運行應用程序和服務。大多數時候是須要以守護式來運行容器。rest

能夠經過添加 -d 參數來實現,建立一個叫aofo的容器:日誌

sudo docker run --name aofo -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

clipboard.png

上面的命令會讓容器在後臺運行。使用了一個while循環,改循環會一直打印hello world,知道容器或其進程中止運行。

與以前建立的容器相比,沒有返回shell會話,只是返回了一個容器ID。

查看如今正在運行的容器:

$ sudo docker ps

clipboard.png

容器內部在幹些什麼

上面建立了一個在後臺運行while循環的守護型容器,能夠用docker logs查看容器日誌:

$ sudo docker logs aofo

clipboard.png

能夠在命令後使用-f參數來健康Docker日誌,這與tail -f很是類似:

$ sudo docker logs -f aofo

而後就會看到一直輸出hello world。能夠經過ctrl+c來退出監控個。

查看容器內的進程

$ sudo docker top aofo

能夠看到容器內的全部進程(主要是while循環)、運行進程的用戶、進程ID:

clipboard.png

在容器內部運行進程

Docker 1.3 以後能夠經過docker exec命令在容器內部額外啓動新進程。能夠在容器內運行兩種進程:後臺任務、交互式任務。後臺任務在容器內運行且沒有交互需求,交互式二年五則保持在前臺運行。對於須要早容器內部貸款shell的任務,用交互式任務.

後臺任務例子:

$ sudo docker exec -d daemon aofo touch /etc/new_config_file

clipboard.png

代碼解釋:
-d標誌標明要運行一個後臺進程,後面指定要在內部執行這個命令的容器名,我用的是aofo。整句命令在aofo容器內建立了一個空文件夾new_config_file

交互式任務例子:

$ sudo docker exec -t -i aofo /bin/bash

代碼解釋:
和運行交互容器一一,這裏-t-i標誌位指明建立TTY並捕捉STDIN。後面指定要在內部執行這個命令的容器名,我用的是aofo。整句命令在aofo容器內建立新的bash對話,就能夠在該容器運行其餘命令了。

docker exec命令是在 Docker 1.3 引入的,以前版本不支持。可用nsenter命令

中止守護式容器

docker stop命令:

$ sudo docker stop aofo

clipboard.png

也能夠用容器ID只帶容器名稱:

$ sudo docker stop ddd958443007

若是想快速中止容器,還能夠用docker kill命令:

$ sudo docker kill aofo

能夠用docker ps命令產科當前運行的容器。也能夠用docker ps -n x,該命令會顯示最後x個容器,不論這些容器是運行仍是中止的。

$ sudo docker ps -n 2

clipboard.png

深刻容器

docker inspect獲取更多的容器信息:

$ sudo docker inspect aofo

clipboard.png

能夠用-f或者--format標誌來選定查看結果。

查看容器運行狀態:

$ sudo docker inspect --format='{{ .State.Running }}' aofo

clipboard.png

查看容器IP地址:

docker@boot2docker:~$ sudo docker inspect --format='{{ .NetworkSettings.IPAddress }}' aofo

我沒有設置,因此返回空:

clipboard.png

-f--format標誌支持完整的GO語言模板。用它進程查詢時,能夠重複利用GO語言米板的優點。

能夠同時制定多個容器,並顯示每一個容器的結果:

$ sudo docker inspect --format='{{ .State.Running }}' aofo aoct

clipboard.png

除了查看容器,還能夠瀏覽/var/lob/docker目錄瞭解Docker的工做原理,該目錄存放着Docker鏡像、容器、容器配置。全部容器都保存在/var/lib/docker/containers目錄下。

刪除容器

運行中的容器沒法刪除,必須先中止。使用docker rm

$ sudo docker rm 容器ID

一次性刪除全部容器:

$ sudo docker rm `docker ps -a -q`

這不是常規命令,只是小技巧。docker ps列出全部現有的容器,-a標誌列出全部(all)容器,-q返回容器ID。這樣就獲得了容器ID列表,並傳給docker rm命令,從而達到刪除全部容器的目的。

【本人的學習筆記,主要是對《個人第一本Docker書》、《Docker —— 從入門到實踐》的學習記錄,並結合其餘各類資源的學習。】

相關文章
相關標籤/搜索