文章目录

一、Docker概述

1.1 什么是容器?

通俗的讲,容器就是一个操作系统的最小镜像,在容器上面可以运行应用程序(可以认为是轻量级的虚拟机),但是这玩意和虚拟机的实现原理不一样。

  • 虚拟机:传统的虚拟机需要模拟一整台设备,包含硬件,而且每台虚拟机都必须有自己的操作系统,虚拟机一经被启动,预分派给他的资源就会全数被占用。每一台虚拟机都包含应用,必需的二进制和库,还有一套完善的用户操作系统
  • 容器:容器就是和宿主设备共享硬件资源和操作系统,可以实现资源的动态分配。容器中包含应用以及其所有的依赖包,但是与其他独立的容器共用系统内核。容器在宿主机的操作系统中,在用户空间以分开的进程运行。

现在最常用的容器就是Docker,还有podman、rocket等等。

1.2 Docker是什么?

  1. 是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源
  2. 是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机"
  3. Docker的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器
  4. Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱。鲸鱼可看作为宿主机,集装箱可理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。
    在这里插入图片描述

1.3 Docker的设计宗旨

通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的 “一次封装,到处运行” 的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统

1.4 Docker与虚拟机的区别

功能Docker虚拟机提升
启动速度秒级,其启动速度就是启动一个进程的时间分钟级,主要是操作系统启动较为耗时启动更快,遇到问题可快速重启或者回滚
资源消耗几乎没有损耗50%资源消耗更少
性能接近原生较弱性能更强
内存占用根据服务占用内存共享2G ~ 32G内存避免了内存不足的问题
系统支持量上千个几十个大大降低了成本
隔离性资源隔离/限制完全隔离隔离性方面容器较弱
磁盘占用150M ~ 300M20G ~ 200G极大降低了硬盘空间的占用,避免了空间浪费
项目业务拓展通过云平台扩容,比较方便需要重新部署虚拟机,过程复杂扩容方便、快捷
新上线项目开发、测试、生产环境很难实现同步,容易出现问题能够实现所有环境统一标准,不再依赖操作系统和软件库效率大幅度上升

就目前来看,企业之所以热衷使用Docker来代替传统的虚拟机,是因为:

  1. Docker的启动属于秒级,而虚拟机一般需要几分钟去启动。
  2. Docker所需要的资源更少,Docker在操作系统级别进行虚拟化,由于Docker容器可以与内核直接交互,因此基本没有性能损失,并且性能优于通过Hypervisor层与内核层的虚拟化。
  3. Docker更轻量,Docker的架构可以共用一个内核与共享应用程序库,所占内存极小。在相同的硬件环境下,Docker能够运行的镜像数量远远超过虚拟机数量,对系统的利用率非常高。
  4. 快速创建、删除:虚拟机创建是分钟级别的,而Docker容器创建是秒级别的,Docker的快速迭代性,决定了无论是开发、测试、部署都可以节约大量时间。
  5. 交付、部署:虚拟机可以通过镜像实现环境交付的一致性,但镜像分发无法体系化;而Docker在Dockerfile中将容器构建过程全部记录了下来,可实现在集群中进行快速分发和快速部署的任务。

但是,Docker并不是在各方面都优于虚拟机的,Docker隔离性、安全等方面依旧落后于虚拟机,以下介绍Docker比之虚拟机的不足之处。

  1. 与虚拟机相比,Docker的隔离性更弱,Docker属于进程之间的隔离,虚拟机可实现系统级别隔离。
  2. 安全性:Docker的安全性更弱。Docker的用户root和宿主机root等同,一旦容器内的用户从普通用户权限提升为root权限,它就直接具备了宿主机的root权限,进而可进行无限制的操作。虚拟机用户root权限和宿主机的root虚拟机权限是分离的,并且虚拟机利用如Intel的VT-d和VT-x的ring-1硬件隔离技术,这种隔离技术可以防止虚拟机突破和彼此交互,而容器至今还没有任何形式的硬件隔离,这使得容器更加容易受到攻击。
  3. 可管理性:Docker的集中化管理工具还不算成熟。而各种虚拟化技术都有成熟的管理工具,例如VMware vCenter提供完备的虚拟机管理能力。

总的来说,虽然Docker在隔离性、安全性等方面比不过虚拟机,但是这些问题是可以通过其他硬件设备来进行补足的,而Docker的快速启动、资源占比、系统利用等方面则是目前虚拟机代替不了了。

1.5 Docker的特点

首先,Docker是十分灵活的,即便是最复杂的应用,也能够集装箱化;其次,它是一款轻量级的容器技术,它可以利用和共享主机的内核;同时,也支持即时的更改与升级,并且能够添加并自行分配容器副本;最后,Docker能够从本地构建,在部署到云端后可以在任何区域执行,同时也提供了垂直和即时的堆叠功能

  1. 灵活:即使是最复杂的应用也可以集装箱化。

  2. 轻量级:容器利用并共享主机内核。

  3. 可互换:可以即时部署更新和升级。

  4. 便携式:可以在本地构建,部署到云,并在任何地方运行。

  5. 可扩展:可以增加并自动分发容器副本。

  6. 可堆叠:可以垂直和即时堆叠服务。

容器是在linux上本机运行,并与其他容器共享主机的内核,它运行的是一个独立的进程不占用其他任何可执行文件的内存,非常轻量。

虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。

1.6 Docker三要素(核心概念)

  • 镜像:Docker的镜像是创建容器的根本,就如同虚拟机的快照,可理解为一种面向Docker容器引擎的只读模块使用镜像启动了一个容器,一个镜像就是一个可实现的包,里面涵盖了运行应用时所必须的全部内容,包括代码、实现时间、库环境变量、以及配置文件。
  • 容器:Docker的容器是由镜像创建的一种运行实例,该实例能够被启用、终止或者移除。所创建的每一种容器都是彼此分离、互不可见的,从而保证了平台的安全因此我们可以将容器当作一种提供简易版的linux平台(包括root用户权限、镜像空间、用户空间和网络空间等)和安装、运行于其中的程序、应用。
  • 仓库:Docker仓库是一个能够聚集储存镜像的地方,当我们在创建了自己的镜像后,可以使用push命令把它推送给公有仓库或是私有仓库。当下次要在另一个主机上再次使用这些镜像时,就只需要在仓库下载即可。

1.7 Docker运行过程

在这里插入图片描述
客户端执行docker的各项命令,服务端通过后台进程接受命令,执行docker指令,如果本地存在相对应的镜像,则直接放到容器中去运行;如果本地不存在镜像,则会去仓库中拉取镜像到本地,然后放入容器中运行。

1.8 容器在内核中支持2种重要技术

docker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离通过cgroup实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘,比如分配500G并不是实际占用物理磁盘500G)

名称查看位置支持的版本隔离内容说明
cgroup/proc/[pid]/ns/cgroupsince Linux 4.6硬件资源控制进程使用的资源(如限制内存的最大使用量)
IPC/proc/[pid]/ns/ipcsince Linux 3.0信号量、消息队列和共享内存隔离进程间通信
Mount/proc/[pid]/ns/mntsince Linux 3.8挂载点(文件系统)使得各进程彷佛有各自的文件系统,有点像chroot()
Network/proc/[pid]/ns/netsince Linux 3.0网络设备、网络栈、端口等进程间可以有独立的网络空间
PID/proc/[pid]/ns/pidsince Linux 3.8进程编号隔离pid
USER/proc/[pid]/ns/usersince Linux 3.8用户和用户组隔离用户
UTS(UNIX Time-Sharing)/proc/[pid]/ns/utssince Linux 3.0主机名和域名隔离nodename、hostname

1.9 Docker的应用场景

  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS(平台即服务)环境。

二、Docker的部署与加速优化

2.1 docker的部署

#关闭防火墙和SELINUX
systemctl stop firewalld && setenforce 0
#安装docker依赖
yum install -y yum-utils lvm2 device-mapper-persistent     
#下载docker的安装源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo     
#安装docker
yum install -y docker-ce
#启动docker
systemctl start docker && systemctl enable docker
#查看docker版本
docker version
#docker信息查看
docker info

2.2 docker镜像加速

1.百度搜索阿里云,找到官网
2.登录,没有账号就注册一个
3.搜索镜像加速
4.按照提示操作即可

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐