本文為大家介紹容器自啟動以及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

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/500236.html
標籤:Java
上一篇:Java集合的lastlastIndexOfSubList()方法具有什么功能呢?
下一篇:Druid 查詢超時配置的探究 → DataSource 和 JdbcTemplate 的 queryTimeout 到底誰生效?
