【docker專欄7】容器自啟動與守護進程停止后容器保活
本文為大家介紹容器自啟動以及docker 守護進程掛掉或者docker升級的情況下,如何保證容器服務的正常運行。主要包含三個部分
一、守護進程開機自啟
在我們安裝docker的時候,介紹過啟動docker守護進程的命令如下,需要人工手動執行。
systemctl start docker
如果我們希望在linux服務器啟動的時候,就自動啟動Docker守護進程,無需人工干預,就使用下面的命令即可
systemctl enable docker.service;
下面的兩個命令大家根據自己的需要,在合適的場景下使用即可。
# 刪除docker守護進程開機自啟動配置
systemctl disable docker.service;
# 重新配置docker守護進程開機自啟動
systemctl reenable docker.service;
二、容器自啟動
docker守護進程自動啟動之后,假如我們希望某些容器能夠隨之也自啟動提供并服務,在容器創建時使用如下命令即可:
# 注意`--restart unless-stopped`是能夠實現自啟動的關鍵參數
docker run -d --restart unless-stopped nginx
如果我們已經存在一個運行時容器,想讓它增加容器自啟動的能力,使用如下命令即可
docker update --restart unless-stopped nginx
重啟策略說明
unless-stopped是筆者比較常用的重啟策略,除此之外docker還提供了其他的重啟策略,--restart的值可以是以下任何一種:
| 重啟策略標志 | 描述 |
|---|---|
no |
不要自動重啟容器。(默認) |
on-failure[:max-retries] |
如果容器因程序運行錯誤退出(非正常退出),則重新啟動容器。可選項配置:max-retries表示嘗試重新啟動容器的最大次數,超過這個次數還啟動失敗就不重啟了。 |
always |
如果容器處于停止狀態,則始終重新啟動容器。例外情況:如果該容器是運維人員手動停止的,只有在Docker守護進程發生重啟或者容器本身手動重啟之后,才會繼續always重啟策略。 |
unless-stopped |
在停止Docker守護程序之前已經處于停止狀態的容器,不會執行重啟。其他的和always一樣。 |
為什么我常常使用unless-stopped重啟策略?
- 一個服務器上有很多容器,其中一些是我手動停止的(主動行為)。這些容器即使重啟服務器或重啟docker守護進程之后,我也不希望它們自動運行。所以我不用always。
- 在重啟服務器或重啟docker守護進程之前,處于良好運行狀態的容器,在重啟服務器或重啟docker守護進程之后,通常也不會出現因程序運行錯誤導致的無法重啟的問題,所以我不用on-failure。
三、守護進程停止期間保證容器服務正常
本文以上討論的都是服務器重啟、docker守護進程重啟之后如何保證容器的運行狀態,并且盡量不需要人工參與。本小節主要說明的內容是:假如我們要升級docker的版本,我們要停止docker的守護進程,但是我們不想影響容器向用戶提供服務。即:docker守護進程停了,想要保證docker容器進程仍然運行,這該怎么做?
默認情況下,當 Docker 守護進程終止時,它會關閉基于它運行的所有容器。但是可以通過配置方式,在守護程序進程不可用時保持容器運行。此功能稱為live-restore。live-restore有助于減少由于守護進程崩潰、計劃中斷或升級導致的容器停止服務的時間。
{
"live-restore": true
}
配置方式就是在/etc/docker/daemon.json配置文件中加入上面的一行,這樣守護進程停止之后,容器不會停止服務。
字母哥博客:zimug.com


浙公網安備 33010602011771號