Docker 学习笔记

Docker/容器
467
0
0
2022-04-14
标签   Docker

什么是docker

Docker是一个开源的应用容器引擎,基于LXC(Linux Container)内核虚拟化技术实现,提供一系列更强的功能,比如镜像、 Dockerfile等;

Docker理念是将应用及依赖包打包到一个可移植的容器中,可发布到任意Linux发行版Docker引擎上。使用沙箱机制运行程序, 程序之间相互隔离;

Docker使用Go语言开发。

docker架构和内部组建

Docker采用C/S架构(服务端与客户端,b/s浏览器和服务器),Dcoker daemon作为服务端接受来自客户端请求,并处理这些请求,比如创建、运行容器等。客户端为用 户提供一系列指令与Docker daemon交互。

LXC:Linux容器技术,共享内核,容器共享宿主机资源,使用namespace和cgroups对资源限制与隔离。

Cgroups(control groups):Linux内核提供的一种限制单进程或者多进程资源的机制;比如CPU、内存等资源的使用限制。 NameSpace:命名空间,也称名字空间,Linux内核提供的一种限制单进程或者多进程资源隔离机制;一个进程可以属于多个命 名空间。Linux内核提供了六种NameSpace:UTS、IPC、PID、Network、Mount和User。

AUFS(advanced multi layered unification filesystem):高级多层统一文件系统,是UFS的一种,每个branch可以指定readonly(ro 只读)、readwrite(读写)和whiteout-able(wo隐藏)权限;一般情况下,aufs只有最上层的branch才有读写权限,其他branch 均为只读权限。 UFS(UnionFS):联合文件系统,支持将不同位置的目录挂载到同一虚拟文件系统,形成一种分层的模型;成员目录称为虚拟 文件系统的一个分支(branch)。

docker的优点

  • 持续集成

在项目快速迭代情况下,轻量级容器对项目快速构建、环境打包、发布等流程就能提高工作效率。

  • 版本控制

每个镜像就是一个版本,在一个项目多个版本时可以很方便管理。

  • 可移植性

容器可以移动到任意一台Docker主机上,而不需要过多关注底层系统。

  • 标准化

应用程序环境及依赖、操作系统等问题,增加了生产环境故障率,容器保证了所有配置、依赖始终不变。

  • 隔离性与安全

容器之间的进程是相互隔离的,一个容器出现问题不会影响其他容器。

虚拟机与容器的区别

以KVM举例,与Docker对比

  • 启动时间

Docker秒级,KVM分钟级。

  • 轻量级

容器镜像大小通常以M为单位,虚拟机以G为单位。

容器资源占用小,要比虚拟机部署更快速。

  • 性能

容器共享宿主机内核,系统级虚拟化,占用资源少,没有Hypervisor层开销,容器性能基本接近物理机; 虚拟机需要Hypervisor层支持,虚拟化一些设备,具有完整的GuestOS,虚拟化开销大,因而降低性能,没有容器性能好。

  • 安全性 由于共享宿主机内核,只是进程级隔离,因此隔离性和稳定性不如虚拟机,容器具有一定权限访问宿主机内核,存在一定安全 隐患。
  • 使用要求

KVM基于硬件的完全虚拟化,需要硬件CPU虚拟化技术支持; 容器共享宿主机内核,可运行在主流的Linux发行版,不用考虑CPU是否支持虚拟化技术。

应用场景

  • 应用打包与部署自动化

构建标准化的运行环境; 现在大多方案是在物理机和虚拟机上部署运行环境,面临问题是环境杂乱、完整性迁移难度高等问题,容器即开即用。

  • 自动化测试和持续集成/部署

自动化构建镜像和良好的REST API,能够很好的集成到持续集成/部署环境来。

  • 部署与弹性扩展

由于容器是应用级的,资源占用小,弹性扩展部署速度要更快。

  • 微服务 Docker这种容器华隔离技术,正式应对了微服务理念,将业务模块放到容器中运行,容器的可复用性大大增加了业务模块扩展性。

什么是镜像?

简单说,Docker镜像是一个不包含Linux内核而又精简的Linux操作系统。

镜像分层

Dockerfile 中的每一行都产生一个新层

FROM alpine:latest 132h1rk1hb3rkjb

MAINTAINER mxy 12hb1b2b12b4y1b42k

CMD echo “hello Docker!” 12jhvkj1241

Docker 学习笔记

ro只读 rw读写 最上的是容器层 下面是那个是image 层

分层的好处 层如果重复的话,会共享,压力会小很多