stop docker.service之后容器还能正常提供服务吗?

发布时间:2022-07-01 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了stop docker.service之后容器还能正常提供服务吗?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

文章目录

      • 探讨话题
      • 实战剖析
        • 1、不配参数
        • 2、带参数
      • 官方配置

探讨话题

执行以下命令后,运行的docker容器还能正常提供服务吗F1f;或者换种说法,容器内对应的服务进程还存在吗? ~]# Systemctl stop docker.service

此问题是我一个同事抛出来的,当时我没经过太多思考,也直接进行了回答:“不能说停掉,是你本身就没docker守护进程了,有多少个容器你也看不到了,再往后推理,容器也提供不了对应的服务。”,当时我是这样回答的,接着我又抛出了这个话题,在深圳的一位朋友(高级原生工程师:包包),他回复默认是所有docker容器都会受影响的,但是记得好像有一种是不受影响的,最后也找到了Docker官方提供的链接 https://docs.docker.COM/config/containers/live-reStore/

附当时的争论记录

stop docker.service之后容器还能正常提供服务吗?

最后的仰慕

stop docker.service之后容器还能正常提供服务吗?

实战剖析

1、不配参数

docker配置文件概览
[root@VM-0-30-centos ~]# cat /etc/docker/daemon.JSON 
{
  "graph": "/data/ti-platform/docker",
  "storage-driver": "overlay2",
  "insecure-registries": ["registry.access.redhat.com","quay.io"],
  "registry-mirrors": ["https://q2gr04ke.mirror.aliyuncs.com"],
  "bip": "172.0.30.1/24",
  "exec-opts": ["native.cgroupdriver=systemd"],
  "LOG-driver":"json-file",
  "log-opts": {
	";max-size": "256M", 
	"max-file": "3"
	}
}

查看当前运行的容器

stop docker.service之后容器还能正常提供服务吗?

查看docker.service状态

stop docker.service之后容器还能正常提供服务吗?

执行重启docker动作,发现所有容器状态已经变为ExITed,这时会引来一个问题,假如我们刚好需要重启docker,不可能一重启其他容器就都退出了,还要手动进行启动,这个就成了一个很反感的问题,也会使服务异常。

stop docker.service之后容器还能正常提供服务吗?

于是查看Docker官方https://docs.docker.com/config/containers/live-restore/ 有提供参数,无论是停止docker、还是重启,都不会影响我容器里边的服务,也就是服务不会产生中断,接下来看操作演示。

2、带参数

docker配置文件概览
[root@VM-0-30-centos ~]# cat /etc/docker/daemon.json 
{
  "graph": "/data/ti-platform/docker",
  "storage-driver": "overlay2",
  "insecure-registries": ["registry.access.redhat.com","quay.io"],
  "registry-mirrors": ["https://q2gr04ke.mirror.aliyuncs.com"],
  "bip": "172.0.30.1/24",
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver":"json-file",
  "log-opts": {
	"max-size": "256M", 
	"max-file": "3"
	},
  "live-restore": true	#官方提供的特殊参数
}

重启生效
[root@VM-0-30-centos ~]# systemctl daemon-reload 
[root@VM-0-30-centos ~]# systemctl restart docker

stop docker.service之后容器还能正常提供服务吗?

验证stop docker.service,可以看出docker服务已处于不可运行状态

stop docker.service之后容器还能正常提供服务吗?

通过公网IP访问Nginx服务,结论:访问正常

stop docker.service之后容器还能正常提供服务吗?

检查本地docker进程也是不存在的,符合预期。

stop docker.service之后容器还能正常提供服务吗?

接下来分析一下背后实现的逻辑

首先,停止docker服务后还能继续提供服务,它背后的逻辑是在停止前会拍摄类似于一个快照的东西,并且它当前快照是处于激活状态的, 其实更专业一点应该叫瞬态存根。可以看出以下有.scoPE结尾的文件,其实它就是以服务的角色存在。

@H_120_360@

查看这个服务的状态,那么是处于active状态,并且也可以看出是nginx容器的

stop docker.service之后容器还能正常提供服务吗?

其他会自动保存一个文件,也就是本文前边所提到的瞬态存根

stop docker.service之后容器还能正常提供服务吗?

stop docker.service之后容器还能正常提供服务吗?

研究了一下 如果你运行有多个容器,停掉之后它就会有对应多个瞬态存根,而且都是激活状态,所以停止docker.service后,服务是不会受影响的,还是可以保持不中断的状态。

附官方配置

/etc/docker/daemon.json

{
  "allow-nondistributable-artifacts": [],
  "api-cors-header": "",
  "authorization-plugins": [],
  "bip": "",
  "bridge": "",
  "cgroup-parent": "",
  "cluster-advertise": "",
  "cluster-store": "",
  "cluster-store-opts": {},
  "containerd": "/run/containerd/containerd.sock",
  "containerd-namespace": "docker",
  "containerd-plugin-namespace": "docker-plugins",
  "data-root": "",
  "debug": true,
  "default-address-pools": [
    {
      "base": "172.30.0.0/16",
      "size": 24
    },
    {
      "base": "172.31.0.0/16",
      "size": 24
    }
  ],
  "default-cgroupns-mode": "PRivate",
  "default-gateway": "",
  "default-gateway-v6": "",
  "default-runtime": "runc",
  "default-shm-size": "64M",
  "default-ulimits": {
    "nofile": {
      "Hard": 64000,
      "Name": "nofile",
      "Soft": 64000
    }
  },
  "dns": [],
  "dns-opts": [],
  "dns-seArch": [],
  "exec-opts": [],
  "exec-root": "",
  "experimental": false,
  "features": {},
  "fixed-cidr": "",
  "fixed-cidr-v6": "",
  "group": "",
  "hosts": [],
  "icc": false,
  "init": false,
  "init-path": "/usr/libexec/docker-init",
  "insecure-registries": [],
  "ip": "0.0.0.0",
  "ip-forward": false,
  "ip-masq": false,
  "iptables": false,
  "ip6tables": false,
  "IPv6": false,
  "labels": [],
  "live-restore": true,
  "log-driver": "json-file",
  "log-level": "",
  "log-opts": {
    "cache-disabled": "false",
    "cache-max-file": "5",
    "cache-max-size": "20m",
    "cache-comPress": "true",
    "env": "os,customer",
    "labels": "somelabel",
    "max-file": "5",
    "max-size": "10m"
  },
  "max-concurrent-downloads": 3,
  "max-concurrent-uploads": 5,
  "max-download-attempts": 5,
  "mtu": 0,
  "no-new-privileges": false,
  "node-generic-resources": [
    "NVIDIA-GPU=UUID1",
    "NVIDIA-GPU=UUID2"
  ],
  "oom-score-adjust": -500,
  "piDFile": "",
  "raw-logs": false,
  "registry-mirrors": [],
  "runtimes": {
    "cc-runtime": {
      "path": "/usr/bin/cc-runtime"
    },
    "custom": {
      "path": "/usr/local/bin/my-runc-replacement",
      "runtimeargs": [
        "--debug"
      ]
    }
  },
  "seccomp-profile": "",
  "selinux-enabled": false,
  "shutdown-timeout": 15,
  "storage-driver": "",
  "storage-opts": [],
  "swarm-default-advertise-addr": "",
  "tls": true,
  "tlscACERt": "",
  "tlscert": "",
  "tlskey": "",
  "tlsverify": true,
  "userland-Proxy": false,
  "userland-proxy-path": "/usr/libexec/docker-proxy",
  "userns-remap": ""
}

参考资料:https://my.oschina.net/xsh1208/blog/1837768

脚本宝典总结

以上是脚本宝典为你收集整理的stop docker.service之后容器还能正常提供服务吗?全部内容,希望文章能够帮你解决stop docker.service之后容器还能正常提供服务吗?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。