文章目录
Docker
一、docker概述
1.背景
以Linux而言,Linux操作系统会有一个主进程pid=1派生出其他进程来控制不同服务;
例如:pid=2——》python pid=3——》Java pid=4——》php,三个服务可能会相互影响,使用者期望将这三个不同的服务,跑在不同的运行时环境中实现相互不影响,同时不会增加服务器成本
——》从而延申出容器技术
2.介绍
Docker是一个用于开发,交付和运行应用程序的开放平台。Docker使你能够将你的应用程序从你的基础设施中分离出来,这样你就可以快速地交付软件。使用Docker,你可以像管理应用一样管理你的基础设施。通过利用Docker快速发布、测试和部署代码的方法,您可以显著减少编写代码和在生产环境中运行代码之间的延迟。
Docker提供了在一个称为容器的松散隔离环境中打包和运行应用程序的能力。
Docker提供的隔离性和安全性,允许您在给定主机上同时运行多个容器。
容器是轻量级的,因为它们不需要hypervisor的额外负载,而是直接在主机的内核中运行。这意味着与使用虚拟机相比,您可以在给定的硬件组合上运行更多的容器。你甚至可以在虚拟主机中运行Docker容器!
Docker提供了一个工具和平台来管理容器的生命周期:
● 使用<容器>来开发<应用程序及其支持组件>。
● 将<容器>作为分发和测试<应用程序>的<单元>。
● 在生产环境中,以<容器>的方式,来编排<<应用程序>。
Docker容器技术的整体架构示意图如下:
3.虚拟化技术简介
-
虚拟化技术的目的:
- 通过技术手段,对本机计算资源进行二次分配,构建一个个可独立运行的逻辑实体,在确保彼此互不干扰的安全前提下,提高计算资源的利用率和计算资源分配的灵活性。
-
虚拟化技术的本质:
- 通过技术手段,对本机计算资源进行分割、隔离、封装,从而构建一个个独立运行的逻辑实体。
-
虚拟化技术的发展历程
-
半虚拟化/准虚拟化
<半虚拟化>需要修改<来宾系统>,从而提高<来宾系统>的运行性能。
-
全虚拟化
<全虚拟化>无需修改<来宾系统>,在<硬件辅助虚拟化>出现前,性能低于<半虚拟化/准虚拟化>。
随着<硬件辅助虚拟化>的发展,<全虚拟化>性能可以接近<物理机性能>,<半虚拟化>逐渐淘汰
-
-
虚拟化技术的应用分类:
-
主机虚拟化技术(虚拟机)
-
进程虚拟化技术(容器)
-
4.Docker容器技术
-
Docker容器技术宗旨:
一次封装,到处运行(build once,and run anywhere)
-
Dockers容器技术本质:
每一个Docker容器就是一个进程沙盒(sandbox)。
-
Docker容器应用流程:
封装应用程序——》分发应用程序——》部署应用程序——》运行应用程序
-
Docker架构
-
特点:
Docker没有主机虚拟技术中的Hypervisor 虚拟化管理层。
Docker与Linux LXC 内核虚拟化容器技术深度融合,从而开销极低,性能极佳。
-
5.Docker容器技术与虚拟机技术的对比
6.Docker底层原理
-
namespace(名称空间)
Docker使用一种称为namespace提供容器的隔离工作区的技术。运行容器时,Docker会为该容器创建一组名称空间。
这些名称空间提供了一层隔离。容器的每个方面都在单独的名称空间中运行,并且其访问仅限于该名称空间。
Docker引擎在Linux上使用以下名称空间:
①mount ——文件系统,挂载点(一个文件系统内,不能重复挂载一个指定目录)
②user——操作进程的用户和用户组
③pid——进程编号
④ipc——信号量、消息队列,共享内存(不同的应用调用内存资源的时候应该使用不同的内存空间)
⑤uts——主机名和主机域
⑥net——网络设备、网络协议栈、端口等
-
cgroup(资源控制)
Linux上的Docker引擎还依赖于另一种称为控制组(cgroup)的技术。cgroup将应用程序限制为一组特定的资源。控制组允许Docker引擎将可用的硬件资源共享给容器,并有选择地实施限制和约束。例如,你可以限制特定容器可用的内存。
二、docker容器基本管理
1.安装docker引擎
2.设置镜像加速
3.网络优化
PS:docker-server端配置文件 daemon.json
{
"graph": "/data/docker", #指定数据目录
"storage-driver": "overlay2", #指定存储引擎
"insecure-registries": ["registry.access.redhat.com","quary.io"] #私有引擎
"registry-mirrors": ["https://q"] #配置镜像加速
"bip": "172.7.5.1/24", #docker网络,中间两位建议和宿主机一样,易定位容器故障
"exec-opts": ["native.cgroupdriver=systemd"],#启动时候的额外参数(驱动,k8s使用)
"live-restore": true #当docker容器引擎挂掉的时候,使用docker跑起来的容器还能运行(分离)
}
4.了解docker镜像与docker容器关系
-
Docker镜像:
是静止的容器,它为容器提供恒定不变的基础数据。
-
Docker容器:
是运行的容器,它以镜像为基础数据,其新增数据不会写入镜像。