Docker技术及其网络
Linux操作系统第一个进程是Systemd,使用系统默认创建的namespace和cgroup。
Docker 基于 Linux内核的Cgroup,Namespace,以及 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术,由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。是linux安装的一个服务,安装方式apt-get install docker,服务启动后会有一个进程docker daemon,docker执行的任何命令都是在与dameon进行交互,由dameon执行操作。
1、namespace与cgroup
Linux每一个进程是一个struct对象,每个struct都带有一个namespace(命名空间)结构和cgroup(control group 控制组)结构,namespace包含文件系统(mnt),通信(ipc),网络(net),y用户(usr),主机名和域名(uts),pid等属性,cgroup包含内存,cpu,磁盘/IO等资源控制属性
不同的进程可配置不同的namespace和cgroup以达到进程使用和资源的隔离。
1. docker与虚拟机区别
Docker严格意义上只是linux操作系统的一个进程,通过docker启动的容器也是linux上的一个进程,但在网络和文件系统上进行了隔离。虚拟机是拥有自己完整的操作系统,虚拟机上所有的应用都是此操作系统的进程。Docker是轻量级服务,比虚拟技术更轻便和快捷,能更,只要在一个环境打包好了镜像,在其它环境就能很好的复用,总体特点体现为:
更高效地利用系统资源,更快速的启动时间,一致的运行环境,持续交付和部署,更轻松地迁移,更轻松地维护和扩展。
容器的操作:
启动: docker run -it交互 -d 后台运行 -p端口映射 -V磁盘挂载
启动容器docker start/restart
停止容器docker stop
查看容器进程 docker ps (-a:包含已停止或未成功启动的容器)
查看容器细节: docker inspect <containerid>/容器名称
进入容器;
Docker attach:
通过nsenter
PID=$(docker inspect --format "{ .State.Pid ]<container>
$ nsenter--target $PID --mount --uts --ipc --net--pid
拷贝文件至容器内
docker cp file1 <containerid>:/file-to-path
2、docker网络技术
Docker网络利用的是桥接技术,有三种设置网络的模式。
1)Bridge模式
默认采用Bridge模式,docker服务启动后默认创建docker0网桥,ip是172.17.0.1/16(子网掩码:255.255.255.0),docker0会连接到主机的eth0(网络连接服务)。利用docke run启动容器网络时,会自动创建veth设备(类似物理网线),一端连接容器,一端连接docker0网桥,分配与docker0同网段ip,例如172.17.0.2,因此当前主机上所有容器网络都是互联互通的,都是由docker0分配网络ip。容器请求数据包是通过docker0流向主机eth0再向外部网络输出。
2)Host模式
自主创建网桥mybridge,网桥分配的是主机ip(或与主机ip同网段ip),docker run启动的容器连接到mybridge,并且分配与主机同网段ip,这样的网络数据传输简单,不需要经过封包解包的数据传输,但需要很好的规划网络分配。
3)overlay与underlay
Overlay即bridge模式,容器数据向外传输时需要先进行封udp数据包,加上主机ip以及被请求端服务主机ip,当数据到达对端服务器时需要解包,拆解外层主机数据,最终得到真正传输数据(被请求容器服务地址,请求数据),在数据传输过程中封包解包的设备类比虚拟机中的VTEP设备。
Underlay即Host模式,采用主机的网络配置。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示