【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

【docker专栏7】容器自启动与守护进程停止后容器保活的更多相关文章
- docker 容器自启动
我们设置了docker自启动后,docker可以管理各种容器了,对于容器我们也可以设置重启的策略. 在容器退出或断电开机后,docker可以通过在容器创建时的--restart参数来指定重启策略: # ...
- docker之设置开机自启动(二)
docker的自启动 通过sysv-rc-conf等管理 启动脚本 # docker.service #!/bin/sh sudo systemctl enable docker sudo syste ...
- python并发编程-进程理论-进程方法-守护进程-互斥锁-01
操作系统发展史(主要的几个阶段) 初始系统 1946年第一台计算机诞生,采用手工操作的方式(用穿孔卡片操作) 同一个房间同一时刻只能运行一个程序,效率极低(操作一两个小时,CPU一两秒可能就运算完了) ...
- Docker安装基本命令操作,带你了解镜像和容器的概念!
上一章节我们了解了Docker的基本概念,以及相关原理.这一章节进行实操. <Docker这么火爆.章节一:带你详尽了解Docker容器的介绍及使用> 一.Docker安装 声明:Dock ...
- 写一个Windows上的守护进程(1)开篇
写一个Windows上的守护进程(1)开篇 最近由于工作需要,要写一个守护进程,主要就是要在被守护进程挂了的时候再把它启起来.说起来这个功能是比较简单的,但是我前一阵子写了好多现在回头看起来比较糟糕的 ...
- 【Linux 进程】孤儿进程、僵尸进程和守护进程
1.孤儿进程: 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程.孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作.孤儿进程是 ...
- 8.9 day30 并发编程 进程理论 进程方法 守护进程 互斥锁
多道技术 1.空间上的复用 多个程序共用一套计算机硬件 多道技术原理 2.时间上的复用 切换+保存状态 1.当一个程序遇到IO操作 操作系统会剥夺该程序的CPU执行权限( 提高了CPU的利用率 ...
- 守护进程详解以及start-stop-daemon命令
1.概念:守护进程是在后台运行的不受终端控制的进程,通常守护进程在系统启动时自动运行,守护进程的名称通常以d结尾,比如sshd.xinetd.crond等. 2.创建守护进程的步骤:a.调用fork( ...
- docker容器挂载docker.sock,在容器内部直接与docker守护进程通信进行接口调用
一.docker container实现 1.docker容器启动时挂载docker.sock docker run -it -- 2.curl调用接口 curl -s --unix-socket / ...
随机推荐
- 海量数据存储ClickHouse
ClickHouse介绍 ClickHouse的由来和应用场景 俄罗斯Yandex在2016年开源,使用C++编写的列式存储数据库,近几年在OLAP领域大范围应用 官网:https://clickho ...
- Blazor和Vue对比学习(基础1.7):传递UI片断,slot和RenderFragment
组件开发模式,带来了复用.灵活.性能等优势,但也增加了组件之间数据传递的繁杂.不像传统的页面开发模式,一个ViewModel搞定整个页面数据. 组件之间的数据传递,是学习组件开发,必须要攻克的难关.这 ...
- 好客租房23-react组件的两种创建方式(抽离为独立js)
2.3抽离为单独组件 组件作为一个单独的个体,一般把每个组件放在单独的js中文件中 1创建hello.js 2在hello.js中导入React 3创建组件(函数或者类) hello.js子组件 // ...
- 记 iTextSharp 提取中文的问题
原文 问题 下面的代码中 currentText 能提取到大部分汉字 但是字体为 Non-Embedded Font: AdobeSongStd-Light(Horizontal) 的汉字提取不到 P ...
- 【leetcode】42. 接雨水
目录 题目 题解 题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 示例 1: 输入:height = [0,1,0,2,1,0,1,3,2,1 ...
- 亿信BI——EXCEL组件使用流程
功能模块: 用户点击"excel输入"模块进行excel文件导入操作,excel导入页面的顶部导航栏包括基本属性.文件设置.格式设置和字段列表四部分. 基础属性: 在基本属性模块部 ...
- 搭建NTP时间服务器~使用NTP同步时间~构建主机间时间自动同步关系
NTP是一个时间服务器,同时它也是一个时间客户端. 我们可以使用它构建主机与主机之间的时间自动同步环境,保证所有服务器时间一致性. 常用的公共NTP时间服务器有: cn.ntp.org.cn 中国 n ...
- 《Unix 网络编程》08:基本UDP套接字编程
基本UDP套接字编程 系列文章导航:<Unix 网络编程>笔记 UDP 概述 流程图 recvfrom 和 sendto #include <sys/socket.h> ssi ...
- 【原创】史上最简单易懂的kali修改主机名方法
前言 主机名:在一个局域网中,每台机器都有IP地址,但是IP地址不便于人们记忆.于是采用主机名,即利于主机之间的区分,又方便人们的记忆主机.--和域名差不多. 一,查看当前的主机名 ┌──(root㉿ ...
- pandas:多层索引
多层索引是指在行或者列轴上有两个及以上级别的索引,一般表示一个数据的几个分项. 1.创建多层索引 1.1通过分组产生多层索引 1.2由序列创建 1.3由元组创建 1.4可迭代对象的笛卡尔积 1.5将D ...