目录标题
一、Docker概述
1、虚拟化技术发展史
在虚拟化技术出现之前,如果我们想搭建一台服务器,就需要做以下的工作:
- 购买一台硬件服务器
- 在硬件服务器上安装配置操作系统系统
- 在操作系统之上配置应用运行环境
- 部署并运行
但是这种方式的缺点是:
- 部署应用速度慢
- 需要花费的成本高(时间成本和服务器成本)
- 应用迁移麻烦;要将应用迁移,就又得重新部署应用过程:购买服务器 -> 安装操作系统OS -> 配置运行环境 -> 部署应用。所以,为了解决这个问题,后续出现了虚拟化技术
2、什么是虚拟化技术
虚拟化是一种计算机资源管理技术,是将计算机得各种硬件资源,比如服务器、网络、CPU、内存等,给予以抽象和转换后呈现出一套新的硬件资源环境,在这一套硬件环境下可以安装我们得操作系统和部署我们得应用环境等,它打破了计算机资源不可分割得障碍,使我们可以比原来得计算机硬件资源结构更好得方式来组合应用这些资源。
3、虚拟化技术的分类
虚拟化一般分为:
- 硬件级虚拟化
- 操作系统级虚拟化(也叫容器化技术)
(1)硬件级虚拟化
硬件级虚拟化:是运行在硬件之上的虚拟化技术,核心技术是Hypervisor,其是一种运行在基础物理服务器硬件上的软件层,可以虚拟化硬件资源,例如:CPU、硬盘、内存资源等。然后我们可以在虚拟化出来的资源上安装操作系统,也就是所谓的虚拟机。像VMWare、VirtualBox等都是使用该技术,我们经常使用的桌面版的虚拟机VMWare就是采用这 种虚拟化技术,如下图所示:
通过Hypervisor层,我们可以创建不同的虚拟机,并且每个虚拟机都是分离独立的,这样就可以在一台硬件服务器和本地操作系统之上虚拟化出多个服务器,用来部署我们的应用
优缺点:
优点:
- 一台物理服务器可以虚拟化出多个虚拟的服务器,让计算机资源得以充分利用
缺点:
- 每创建一台虚拟机都会创建一个操作系统,这个操作系统会占用很多资源,会大大增加资源的消耗
- 环境兼容性问题,开发环境运行正常,部署带虚拟机环境测试则可能发生错误
(2)容器化技术
由于前面虛拟机存在这些缺点,Linux 发展出了另一种虚拟化技术: Linux 容器(Linux Containers,缩为LXC)。在容器化技术领域,Docker是目前最流行的一种实现。Docker发布于2013年,是基于LXC技术,而LXC是Linux平台上的容器化技术实现。
LXC:是Linux Container的简写,它是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,它与宿主机使用同一个内核,性能耗损小。
Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。
(3)Docker是什么
Docker是一个开源的应用引擎,让开发者可以打包他们的以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,互相之间不会有任何接口。(Docker本身不是容器,只是管理容器的引擎)
隔离机制:Docker核心思想就是打包装箱,每个箱子都是互相隔离的
Docker通过隔离机制,可以将服务器利用到极致,解决了资源浪费的问题
(4)Docker理念
Docker的主要目标是“Build, Ship[ and Run Any App,Anywhere",也就是通过对应用组件的封装、分发、部署、运行等生命期的管理,使用户的APP (可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。
Linux容器技术的出现就解决了这样一 一个问题,而Docker就是在它的基础上发展过来的。将应用运行在Docker容器上面,而Docker容器在任何操作系统上都是一-致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作
(5)容器与虚拟机的区别
- 容器是将代码和环境的关系打包在一起的一个集合;而虚拟机是在物理层面上分出来的一个操作系统
- 多个容器运行在同一台物理服务器上并共享一个操作系统的内核资源;而多个虚拟机也可以运行在同一台服务器上,但是每个虚拟机都需要一个完整的操作系统。
- 每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源。
二、安装Docker
docker官网: https://www.docker.com/
docker中文网站: https://www.docker-cn.com/
Docker Hub仓库官网:https://hub.docker.com/
1、Docker的基本组成
(1)Docker架构
- Docker 使用客户端–服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。
docker架构图:
(2)Docker 核心要素
Docker 核心要素包括三个核心要素:
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
1、镜像
- Docker镜像(lmage)就是-一个只读的模板。镜像可以用来创建Docker容器,一个镜像可以包含一个完整的Centos系统环境,可以创建很多容器。
Docker 容器通过 Docker 镜像来创建:
镜像与容器的关系类似于面向对象编程中的类与对象之间的关系
Docker | 面向对象 |
---|---|
镜像 | 类 |
容器 | 对象 |
镜像是由许多层文件系统叠加构成的,最下面一层是一个引导文件系统bootfs,第二层是一个root文件系统rootfs,root文件系统通常是某种操作系统,比如CentOS,在root文件系统之上又有很多层文件系统,这些文件系统叠加在一起,构成Doker中的镜像
2、容器
-
Docker利用容器(Container) 独立运行的一个或一组应用。**容器是用镜像创建的运行实例。**它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简 易版的Linux环境 (包括root用户权限、进程空间、用户空间和网络空间和运行在其中的应用程序等)
-
容器的定义和镜像几乎一模一样,也是一堆层的统一视角, 唯一区别在于容器的最上面那一层是可读可写的。
3、仓库
- 仓库(Repository) 是集中存放镜像文件的场所
- 仓库(Repository)和仓库注册服务器(Registry) 是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多镜像,每个镜像有不同的标签(tag) 。
- 仓库分为公开仓库(Public) 和私有仓库(Private) 两种形式。
- 最大的公开仓库是Docker Hub(https://hub. docker.com/),存放了数量庞大的镜像供用户下载,国内的公开仓库包括阿里云、网易云等。当然,用户也可以在本地网络内创建一个私有仓库,当用户创建了自己的镜像之后就可以使用push命令将他上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时,只需要从仓库上pull下来即可。
2、Docker安装(yum安装)
安装教程可参考我的博客另外一篇文章:
https://blog.youkuaiyun.com/hcz666/article/details/119619645
3、Docker卸载
(1)卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
(2)删除资源
rm -rf /var/lib/docker #/var/lib/docker为Docker的默认工作路径
4、配置阿里云镜像加速
(1)进入阿里云官网,搜索容器镜像服务
(2)依次执行官方的这四条命令
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://qpl6kmln.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
5、Docker容器底层运行原理
(1)docker 底层运行流程图
(2)docker 底层原理
-
我们知道docker 并不是容器,而只是一个管理容器的引擎
-
Docker是一个Client-Server结构的系统,Docker守 护进程运行在主机上,然后通过Socket 连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。容器,是一个运行时环境,就是我们前面说到的集装箱。