Docker學習四:容器

轉載:http://blog.itpub.net/31556785/viewspace-2564296/

1. 什麼是容器?

容器(Container):容器是一種輕量級、可移植、並將應用程序進行的打包的技術,使應用程序可以在幾乎任何地方以相同的方式運行,Docker將鏡像文件運行起來後,產生的對象就是容器。容器相當於是鏡像運行起來的一個實例且容器具備一定的生命週期。

2. Docker容器和虛擬機的區別

(1) 相同點:
  • 容器和虛擬機一樣,都會對物理硬件資源進行共享使用。
  • 容器和虛擬機的生命週期比較相似(創建、運行、暫停、關閉等等)。
  • 容器中或虛擬機中都可以安裝各種應用,如redis、mysql、nginx等。也就是說,在容器中的操作,如同在一個虛擬機(操作系統)中操作一樣。
  • 同虛擬機一樣,容器創建後,會存儲在宿主機上:linux上位於/var/lib/docker/containers下
(2) 不同點:
  • 虛擬機的創建、啓動和關閉都是基於一個完整的操作系統。一個虛擬機就是一個完整的操作系統。而容器直接運行在宿主機的內核上,其本質上以一系列進程的結合。
  • 容器是輕量級的,虛擬機是重量級的。首先容器不需要額外的資源來管理(不需要Hypervisor、Guest OS),虛擬機額外更多的性能消耗;其次創建、啓動或關閉容器,如同創建、啓動或者關閉進程那麼輕鬆,而創建、啓動、關閉一個操作系統就沒那麼方便了。
    也因此,意味着在給定的硬件上能運行更多數量的容器,甚至可以直接把Docker運行在虛擬機上。
(3) 容器的生命週期管理

在這裏插入圖片描述

(1) 容器創建(docker create)
  • 命令格式:
    docker create [參數] 鏡像名稱[容器執行命令][執行命令時需要提供的參數]
  • 常用參數:
-t 分配一個虛擬終端
-i 提供一個模擬輸入,不提供則無法輸入默認命令
--name 爲創建好的容器提供一個容器名,不提供的話隨機分配一個

在這裏插入圖片描述

(2) 容器啓動(docker start)

啓動一個或多個容器。

  • 命令格式:docker start [參數] 容器[容器…]
  • 常用參數:
	-a 將當前的輸入/輸出連接到容器
	-i 將當前的輸入連接到容器上
(3) 容器創建並啓動(docker run)
  • 命令格式:
    docker run [參數] 鏡像 [容器執行命令] [執行命令提供的參數]

  • 常用參數:

	-t 分配一個虛擬終端
	-i 保持輸入打開
	-d 容器後臺運行,並打印容器id
	--rm 容器結束後自動刪除容器

簡單記兩個公式就好:
docker run = doker create + docker start -a
docker run -d = docker create + docker start
這裏鹹魚推薦大家使用docker run -dti來啓動所需容器。

(4) 容器暫停(docker pause/unpause)

docker pause 暫停一個或多個容器
docker unpause 啓動一個或多個暫停中的容器

  • 命令格式:
    docker pause/unpause 容器[容器…]
(5) 容器關閉(docker stop)

docker stop 關閉一個或多個容器

  • 命令格式:
    docker stop 容器[容器…]

  • 常用參數:

	-t 關閉前的等待時間,默認是10秒
(5) 容器終止(docker kill)

強制並立即關閉一個或多個處於暫停或運行狀態的容器。

  • 命令格式:docker kill [參數] 容器[容器…]
  • 常用參數:
	-s 指定發給容器的關閉信號,默認爲“kill”
(5) 容器重啓(docker restart)

重啓一個或多個處於運行狀態、暫停狀態、關閉狀態或創建狀態的容器。

  • 命令格式:
    docker restart [參數] 容器[容器…]

  • 常用參數:

	-t 關閉前的等待時間,默認是10秒,實則是關閉前的等待時間
(6) 容器刪除(docker container rm / docker rm )
  • 命令格式:docker container rm [參數] 容器[容器…]

  • 常用參數:

	-f 強制刪除
	-v 刪除容器的同時刪除容器的數據卷
(6) 容器刪除(docker container rm / docker rm )
  • 命令格式:docker container rm [參數] 容器[容器…]

  • 常用參數:

	-f 強制刪除
	-v 刪除容器的同時刪除容器的數據卷
(7) docker kill 和 docker stop 區別

在上面關於docker容器生命週期管理中stop 和 kill 都是關閉容器,但是其中的kill是怎麼實現強制殺死運行中的容器的呢?
這裏需要說明下關linux下關於終止進程的信號:SIGTERM 和 SIGKILL
SIGKILL信號:無條件終止進程信號。進程接收到該信號會立即終止,不進行清理和暫存工作。該信號不能被忽略、處理和阻塞,它向系統管理員提供了可以殺死任何進程的方法。
SIGTERM信號:程序終結信號,可以由kill命令產生。與SIGKILL不同的是,SIGTERM信號可以被阻塞和終止,以便程序在退出前可以保存工作或清理臨時文件等。
docker stop 會先發出SIGTERM信號給進程,告訴進程即將會被關閉。在-t指定的等待時間過了之後,將會立即發出SIGKILL信號,直接關閉容器。
docker kill 直接發出SIGKILL信號關閉容器。但也可以通過-s參數修改發出的信號。
docker restart 中同樣可以設置 -t 等待時間,當等待時間過後會立刻發送SIGKILL信號,直接關閉容器。
因此會發現在docker stop的等待過程中,如果終止docker stop的執行,容器最終沒有被關閉。而docker kill幾乎是立刻發生,無法撤銷。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章