乐趣区

关于docker:Docker入门教程101

虚拟化技术

虚拟化技术从 1960 年代诞生,到 2000 年左右成为商业产品开始蓬勃发展,比方驰名的 VMWare, VirutalBox, KVM, Docker 等。

目前大家熟知的虚拟化技术包含虚拟机 (VM) 和容器(Container)。

虚拟机技术促成了云计算的倒退,让云计算厂商能够提供大量机器实例给到用户。

容器技术促成了云原生的倒退,让运行在云环境的利用能够更好地享受云的劣势。

从传统的物理机,到进化的虚拟机,各自的逻辑架构如下所示:

虚拟机技术里的 Hypervisor 有 2 种类型:

  • 第一种:间接和硬件交互,不通过宿主机操作系统,比方 HyperKit(Mac OSX),Hyper-V(WIndows),KVM(Linux)。
  • 第二种:宿主机操作系统上的一个利用,下面虚拟机示意图示意的是这个类型的Hypervisor,比方 VirtualBox/VMWare。

Docker 是什么

Docker 没有严格的定义,Docker 实质上是利用容器虚拟化技术,让开发者能够将他们的利用、依赖库和配置文件打包到一个可移植的镜像文件里,而后公布到任何风行的 Linux 机器上运行。

运行这个镜像文件会生成一个虚构容器,应用程序在这个容器里运行,就如同在实在的物理机上运行一样。

容器化技术和 Docker 不能划等号,最早的容器技术是 2008 年公布的 LXC(Linux Container),然而不够好用,Docker 基于 LXC 做了很多对利用开发敌对的封装和改良,真正带动了容器化技术的风行。

前面随着 Docker 本身的技术架构演进,放弃了应用 LXC,转而应用自研的 libcontainer 来和 Linux kernel 交互,前面 libcontainer 为了合乎 OCI(Open Container Initiative) 规范,又封装重构为当初驰名的runC

Docker 应用 Go 语言编写,底层实现上应用 Namespace 实现容器之间的资源隔离,应用 cgroups(Control Groups) 做资源限度。

容器技术的逻辑逻辑架构如下所示:


容器是被隔离的过程(isolated process),不要把容器了解为轻量级虚拟机,容器和虚拟机是 2 种齐全不同的虚拟化技术。

Container Runtime:示意容器运行时,任何满足 OCI 规范的 容器运行时 都能够相互替换,就类比虚拟机里的 Hypervisor 也有 VMWare 和 VirtualBox 等不同的实现。目前最风行的容器运行时是由 Docker 募捐给 CNCF 的runC

Docker 实现的容器技术和传统的虚拟机相比,除了有下面说的架构上的区别,其它区别如下:

个性 Docker 虚拟机
启动速度 秒级 分钟级
交付 / 部署 开发,测试,生产环境统一
性能 近似物理机 性能损耗大
镜像大小 较小,KB-MB 较大,GB
迁徙 / 扩大 跨平台,可复制

以 Docker 为代表的容器技术和虚拟机都是虚拟化技术,两者并不是相互取代的关系,它们有各自的实用场景,还能够联合在一起应用。

Docker 架构

Docker 是 c / s 架构,架构图如下:

Docker daemon:简称dockerd,作为服务端,解决 Client 发过来的申请,治理 Docker 镜像、容器、网络和存储。

Docker client: 作为客户端和 dockerd 服务端交互,应用的是 RESTful API。docker 命令行工具 CLI 和带界面的 docker 客户端都能够称为 Docker client。Docker client 能够和多个 dockerd 交互。

Docker Registry:镜像仓库,用来存储 Docker 镜像,有公共仓库 (public registry) 和公有仓库 (private registry),相似 GitHub 的 Public Repo 和 Private Repo。应用docker pulldocker run命令时,会从咱们配置的 registry 仓库拉取镜像。应用 docker push 命令,会把镜像推送到咱们配置的 registry 仓库。

Docker images:Docker 镜像,是一个只读文件,外面有创立 Docker 容器的指令。一个镜像能够基于其它镜像来创立,比方咱们能够基于已有的 ubuntu 镜像,增加 Nginx 和本人的应用程序来创立一个新的镜像。如果要创立本人的镜像文件,须要创立名为 Dockerfile 的文件,在该文件里依照指定的语法规定来定义创立和运行镜像文件的步骤。

Docker containers:Docker 容器,是镜像的运行实例,一个容器实际上就是一个被隔离的过程(isolated process)。Docker 容器的生命周期如下图所示:


Docker Engine:蕴含有 Docker daemon, RESTful API, Docker CLI。

Docker 装置

装置 Desktop 即可,Desktop 反对 Mac, Windows 和 Linux 零碎,蕴含了应用 Docker 所须要的所有工具集。

装置步骤参考:https://docs.docker.com/get-d…

Docker 应用

咱们以官网的教学镜像作为简略示例。启动 Desktop 后,在电脑的终端上运行如下命令:

docker run -d -p 80:80 docker/getting-started

该命令如果发现本地没有 docker/getting-started 镜像文件,会从官网的镜像仓库 Docker Hub 上拉取镜像并运行。

-d: 让容器当前台模式运行。

-p 80:80:把主机的 80 端口映射到容器里的 80 端口。

docker/getting-started:镜像名称。

启动后,关上一个浏览器,拜访 http://localhost/ 就能够看到曾经 run 起来的应用程序的界面了。

开源地址

文章和示例代码开源地址在 GitHub: https://github.com/jincheng9/…

公众号:coding 进阶

集体网站:https://jincheng9.github.io/

References

  • https://docs.docker.com/
  • https://mp.weixin.qq.com/s/ji…
  • https://www.tutorialworks.com…
退出移动版