docker容器启动的问题 - docker容器和虚拟机的比较 - docker的底层隔离机制
就是集中存放镜像的地方(像是镜像的集市,可以下载别人制作的镜像)docker hub官网(https://hub.docker.com/)我们能自己搭建私有仓库:(HarBor、Docker Registry)一文教会你如何高效地搭建Docker私有仓库_docker_脚本之家 (jb51.net)
目录
一、docker容器启动的问题?
当我们需要重新启动docker容器的时候,我们将使用
service docker restart
但是会产生问题,就是我们的docker内正在运行的容器全部都停止了,因此我们在使该命令的时候,一定要注意该问题 。
当我们启动docker的时候,会自动帮助我们生成iptabels规则
当我们清除iptables内的规则后,会导致docker容器不能和外部机器通信
解决方法就是重新启动docker容器,会重新添加iptables规则
因此当我们在docker容器运行的时候,关闭防火墙或者清除防火墙规则的时候,会导致iptables里的docker相关的SNAT或者DNAT策略失效,导致容器不能和外部的机器通信
重新启动docker容器
(建议一个容器里只跑一个软件)
二、什么是docker仓库?
就是集中存放镜像的地方(像是镜像的集市,可以下载别人制作的镜像)
docker hub官网(https://hub.docker.com/)
我们能自己搭建私有仓库:(HarBor、Docker Registry)一文教会你如何高效地搭建Docker私有仓库_docker_脚本之家 (jb51.net)
三、虚拟机和docker容器的区别:
官方文档解释:What is a Container? | Docker
docker的优势:
1、启用速度快
2、资源消耗小
资源消耗可以控制、如cpu和内存、磁盘速度和iops等
共用宿主机器的内核、基础镜像、消耗的内存小
3、扩展方便
HPA
增加和减少容器
docker的缺点:
在app隔离这块、没有虚拟机彻底
虚拟机的安全性要高于docker
对比:
并且docker和虚拟机的层次不一样,其中虚拟机会多一层封装
四、docker的底层隔离机制
所有的容器运行起来都是一个进程
进程与进程之间的隔离是靠操作系统来完成的
所有的进程都是共享linux操作系统的内核的
Docker底层的隔离机制主要包括以下两个方面:
基于Linux内核的命名空间(Namespace):Docker使用了Linux内核提供的六种类型的命名空间,包括Mount Namespace、UTS Namespace、IPC Namespace、PID Namespace、Network Namespace和User Namespace。通过这些命名空间,Docker实现了不同容器之间的隔离,每个容器都拥有自己独立的系统资源视图和命名空间。
基于Linux内核的控制组(CGroup):Docker使用了Linux内核提供的cgroups机制,通过对不同的进程组进行资源限制、控制和统计,实现了对容器内资源的限制和管理。例如,Docker可以使用cgroups来限制容器内进程的CPU、内存、磁盘I/O等资源使用。
总的来说,Docker是通过结合Linux内核提供的命名空间和cgroups机制来实现容器隔离和资源管理的。这种机制可以实现快速启动、轻量级的容器态虚拟化,同时也能够提高资源利用率和系统安全性。
参考文献:LXC linux容器简介——在操作系统层次上为进程提供的虚拟的执行环境,限制其使用的CPU和mem等资源,底层是linux内核资源管理的cgroups子系统 - bonelee - 博客园 (cnblogs.com)
1.LXC是什么?
LXC是Linux containers的简称,是一种基于容器的操作系统层级的虚拟化技术。
2.LXC可以做什么?
LXC可以在操作系统层次上为进程提供的虚拟的执行环境,一个虚拟的执行环境就是一个容器。可以为容器绑定特定的cpu和memory节点,分配特 定比例的cpu时间、IO时间,限制可以使用的内存大小(包括内存和是swap空间),提供device访问控制,提供独立的namespace(网络、 pid、ipc、mnt、uts)。
3.namespqce命令空间:
namespace 叫做命名空间:命名空间可以用来隔离资源
namespace是Linux内核提供的一种机制,用于隔离进程间共享的系统资源。通过namespace,一个进程可以看到自己所使用的系统资源,而看不到其他进程所使用的系统资源。
通过namespace,可以实现在同一台计算机上运行多个相互独立的进程,每个进程可以有自己独立的系统视图和资源空间,不同进程之间互相隔离,从而提高了安全性和可靠性。
Linux内核提供了以下6种类型的命名空间:
Mount Namespace(挂载命名空间):用于隔离文件系统挂载点,每个挂载命名空间都有自己独立的文件系统树和挂载点列表。
UTS Namespace(UTS命名空间):用于隔离主机名和域名,每个UTS命名空间都有自己独立的主机名和域名。
IPC Namespace(IPC命名空间):用于隔离进程间通信(IPC)资源,包括消息队列、共享内存段和信号量等。
PID Namespace(PID命名空间):用于隔离进程ID,每个PID命名空间都有自己独立的进程ID空间,这使得进程可以在容器中运行,而不会干扰宿主机上的其他进程。
Network Namespace(网络命名空间):用于隔离网络资源,包括网络接口、路由表、iptables规则、/proc/net目录等。
User Namespace(用户命名空间):用于隔离用户ID和组ID,每个用户命名空间都有自己独立的用户ID和组ID,这可以帮助防止未授权的访问和提高安全性。
通过这些命名空间,Linux内核可以为不同的应用程序提供独立的运行环境,实现各种隔离和虚拟化技术。
4.cgroup是什么,它的作用是什么?
cgroup(Control Group)是Linux内核提供的一种机制,用于限制、控制和统计进程组的资源使用。通过cgroup,可以将一组进程与一个或多个资源控制器相关联,从而限制它们可以使用的CPU、内存、I/O等系统资源。
具体来说,cgroup可以实现以下功能:
限制CPU使用:通过cgroup,可以限制一组进程能够使用的CPU时间片数,以及CPU使用率等。
限制内存使用:通过cgroup,可以限制一组进程能够使用的内存大小,以及内存交换、OOM行为等。
控制磁盘I/O使用:通过cgroup,可以限制一组进程能够使用的磁盘I/O带宽和IOPS等。
统计资源使用:通过cgroup,可以统计一组进程所使用的各种资源的使用情况,如CPU时间、内存使用等。
cgroup在容器技术等领域被广泛应用,可以帮助实现对容器资源的隔离和管理。例如,在Docker容器中,使用cgroup可以限制容器的CPU、内存和磁盘I/O使用,从而保证容器之间互不干扰,提高容器的可靠性和安全性。
更多推荐
所有评论(0)