Docker⼊⻔与实践

Docker是什么

Docker是由dotCloud开源,使⽤Go开发,基于LXC(Linux Containers)技术搭建的软件容器平台。可以让开发者打包他们的应⽤以及依赖包到⼀个轻量级、可移植的容器中,然后发布到任何流⾏的Linux服务器。

容器 VS 虚拟机

  • 容器:应⽤层抽象,⽤于将代码和依赖资源打包在⼀起。共享操作系统内核,占⽤的空间MB级,启动时间秒级。
  • 虚拟机 (VM): 物理硬件层抽象,⽤于将⼀台服务器变成多台服务器。 包含⼀整套操作系统,占⽤空间GB级,启动时间分钟级。
image.png

Docker优势

  • ⼀致的运⾏环境
  • 更快速的启动时间
  • 隔离性
  • 弹性伸缩,快速扩展
  • 迁移⽅便
  • 持续交付和部署
image.png

Docker基本概念

  • 镜像(Image):创建容器的模板
  • 容器(Container):运⾏实例
  • 仓库(Repository):存放镜像
image.png

仓库(Repository)

  • Docker Registry:集中的存储、分发镜像的服务;
  • Repository:存放同⼀类镜像;
  • Tag:对应镜像的不同版本;
  • 本地搭建私有 Docker Registry
image.png

Docker镜像

⼀个典型的 Linux 系统运⾏起来,⾄少需要两个⽂件系统:

  • bootfs:bootloader+kernel
  • rootfs:⽬录结构+⼆进制⽂件+库⽂件

Docker镜像相当于rootfs,公⽤宿主机的bootfs。

image.png

Docker镜像底层依赖于联合⽂件系统(UnionFS)。
UnionFS通过联合加载把多层⽂件系统叠加起来,挂载到同⼀个虚拟⽂件系统下。为不同⽬录设定'readonly', 'readwrite' 和 'whiteout�able' 权限,保护底层的⽂件和⽬录。

image.png

镜像⼀层层构建,前⼀层是后⼀层的基础。每⼀层构建完就不会再发⽣改变,后⼀层上的任何改变只发⽣在⾃⼰这⼀层。通过docker build可以看出。

Docker镜像加载

从Image启动Container时,Docker会先加载其⽗Image直到Base Image,⽤户的进程运⾏在writeable的layer中。

如果⽤户要修改Image层上的⽂件,通过写时复制将⽂件拷⻉到Container层,修改后驻留在上层,并屏蔽原有的下层⽂件。

image.png

镜像分层优势

  • 节省存储空间:不同镜像公⽤相同的层,拉取镜像时不需要重复下载;
  • 快速部署:如果要部署多个container,base image可以避免多次拷⻉;
  • 节约内存:因为多个container共享base image, 以及OS的disk缓存机制,多个container中的进程命中缓存内容的⼏率⼤⼤增加。

Docker容器

镜像是静态的定义,容器是镜像运⾏时的实体。容器可以被创建、启动、停⽌、删除、暂停等。

容器的实质是进程,Docker基于namespace和CGroup技术实现进程之间的隔离。

image.png

namespace

namespace 是 Linux 内核⽤来隔离内核资源的⽅式。处于不同 namespace 的进程拥有独⽴的全局系统资源。
Linux 提供了操作 namespace的函数:

  • clone():创建新进程的同时创建 namespace
  • setns():将当前进程加⼊到已有 namespace
  • unshare():和当前所在的namespace分离,并加⼊到⼀个新的namespace
image.png

CGroup

CGroup(Control Groups)是 Linux 内核提供的⼀种可以限制、记录、隔离进程组(process groups) 所使⽤的物⼒资源 (如 cpu memory i/o 等等) 的机制。

  • ⼦系统(subsystem):资源控制器;
  • 控制组(control group):控制组指明了资源的配额限制;
  • 层级(hierarchy):控制组有层级关系;
image.png

namespace CGroup

namespace 是为了隔离进程组之间的资源,⽽ CGroup 是为了对⼀组进程进⾏统⼀的资源监控和限制。


image.png

Docker容器持久化

  • 数据卷(Volume)
  • 绑定宿主⽬录(bind mount)
  • tmpfs
image.png

Docker⽹络模式

  • bridge
  • container
  • host
  • none
  • overlay
image.png

Docker实践

  • 镜像制作、推送、拉取
  • 容器启动
  • 数据持久化
  • 容器编排:Docker三剑客

Docker三剑客

  • Docker Compose:⽤来定义和运⾏⼀个或多个容器应⽤的⼯具;
  • Docker Machine:Docker安装管理⼯具,可以在多平台上快速安装 Docker 环境;
  • Docker Swarm:原⽣集群管理和编排⼯具。
image.png

Docker容器编排

image.png

CI/CD

image.png

参考
https://www.runoob.com/docker/docker-tutorial.html
http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html
https://zhuanlan.zhihu.com/p/54512286

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容