文章目录
背景
就Linux而言,Linux操作系统会有一个主进程派生出其他进程来控制不同服务,这些进程服务可能会互相影响。
为了使他们能够跑在不同的运行环境中相互不影响,同时不会增加服务器成本,延伸出将三个服务封装起来,也就是后来的KVM虚拟化技术,实现了一个操作系统模拟多个操作系统或者多个不同的运行时环境。
随着技术发展,虚拟化技术开销越来越大,例如:只要运行一个py脚本,想要使用虚拟化技术实现,还需要安装一个操作系统,并不方便也不合理。由此基础上延伸出了容器技术。
容器技术就是将虚拟化层的抽象层(用户层)剥离,使用docker引擎来代替(来宾操作系统去除),只要通过引擎就可以直接连接到宿主机操作系统中,极大的减小了开销。
容器名称空间(name space)
在操作系统中,应用与应用隔离是通过name space实现的,也就是名称空间,只要实现以下的6个空间隔离,才能认为两个应用实现了隔离。
nemespace资源隔离——用容器化技术封装
名称空间 | 描述 | 作用(简单介绍) |
---|---|---|
mount | 文件系统挂载点 | 管理文件系统挂载点 |
user | 操作进程的用户和用户组 | 管理操作进程的用户和用户组 |
pid | 进程编号 | 进程隔离 |
uts | 主机名和主机域 | 隔离内核和版本标识符、Unix时间共享系统 |
ipc | 信号量、消息队列、共享内存 | 管理访问IPC资源、进程间通信 |
net | 网络设备、网络协议栈、端口等 | 管理网络接口 |
Docker
简介
Docker是一个用于开发、交付和运行应用程序的开放平台。Docker能够将应用程序与基础架构分开,从而可以快速交付软件。
Docker也是一个开源的应用容器引擎,让开发者可以打包应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或者Windows机器上,也可以实现虚拟化。
Docker在2013年大火,直到现在,已经成为了容器技术的代名词。容器完全使用沙箱机制(隔离运行机制),相互之间不会有任何接口。
Docker从一开始就以提供标准化的运行时环境为目标,真正做到“build once,run anywhere”,可以将同一个构建版本用于开发、测试、预发布、生产等任意环境,并且做到了与底层操作系统的解耦。在此基础上还进一步发展出CaaS(容器即服务)技术。
- Docker是基于容器技术的轻量级虚拟化解决方案
- Docker核心概念
镜像:一个面向Docker容器引擎的只读模板;提供一种单一的组合型、叠加型文件(资源集合)
容器:从镜像创建的运行实例
仓库:集中保存镜像的地方
使用Docker的意义
Docker制定了容器化技术的标准化
- Docker引擎统一了基础设施环境——Docker环境
- Docker引擎统一了程序打包(装箱)方式——Docker镜像
- Docker引擎统一了程序部署(运行)方式——Docker容器
使用场景
- 打包应用程序简化部署
- 可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦),例如服务器从腾讯云迁移到阿里云
- 持续集成和持续交付(CI/CD):开发到测试发布
- 部署微服务
- 提供PAAS产品(平台即服务):OpenStack的云主机类似于阿里云的ECS,属于IAAS、Docker(K8S)属于PAAS
Docker引擎
Docker引擎是具有以下主要组件的客户端-服务端(C/S)应用程序
Server端:服务器是一种长期运行的程序,成为守护程序进程
Client端:CREST API指定程序可以用来与守护程序进行通信并指示其操作的接口
命令行界面(CLI)客户端(Docker命令)
Docker的架构
- Docker使用客户端-服务器架构。客户端与守护进程进行对话,该守护进程完成了构建、运行和分发Docker容器的繁重工作。
- Docker区别于传统的虚拟化,不需要虚拟硬件资源,直接使用容器引擎,所以速度快。
- Docker客户端是许多Docker用户与Docker交互的主要方式。当使用诸如docker run命令时,客户端会将这些命令发送到dockerd,以执行这些命令。该docker命令使用Docker API。Docker客户端可以与多个守护程序通信。
- Docker守护程序(dockerd)侦听Docker API请求并管理Docker对象,例如图像、容器、网络和卷。守护程序还可以与其他守护程序通信以管理Docker服务。
核心概念
镜像:一组资源集合,包含了应用程序软件包、应用程序相关的依赖包、运行应用程序所需要的基础环境(泛指操作系统)
容器:基于镜像的一种运行时状态
仓库:集中保存镜像的地方,默认在公共的Docker Hub上,也可以搞私有仓库
控制组
Linux上的Docker引擎还依赖于另一种称为控制组(cgroups)的技术。cgroup将应用程序限制为一组特定的资源。控制组允许Docker引擎将可用的硬件资源共享给容器,并有选择地实施限制和约束。例如:可以限制特定容器可用的内存。
部署Docker(20版)
1、环境部署
systemctl stop firewalld.service
setenforce 0
vim /etc