文章目录
- 1.Docker概述:
- 1.什么是docker
- 2.为什么使用docker
- 3.docker优点
- 4.docker资源网址
- 2.Docker安装
- 1.卸载旧版本dorcker(非必要)
- 2.设置Docker仓库
- 安装docker引擎
- 4.启动验证docker
- 卸载docker
- 3.Docker底层原理
- 1.docker的结构和基本概念
- 2.docker为什么比虚拟机快
1.Docker概述:
1.什么是docker
Docker是一个用来开发、运输和运行应用程序的开放平台。使用Docker可以将应用程序与基础结构分离,以便快速交付软件。使用Docker,您可以以管理应用程序的方式管理基础架构。通过利用Docker的方法快速传送、测试和部署代码,可以显著减少编写代码和在生产中运行代码之间的延迟。
2.为什么使用docker
在传统企业中,有很多这样的情况(例如某某公司):有在线的TMOOC系统,有TTS系统。有财务软件系统,有OA,有CRM等。这些系统都部署在一个服务器上是肯定不行的。如果服务器宕机了,会导致这些系统不能使用。所以为了安全性的考虑,有几个系统必须有几台服务器。
但是这样的结构有几个弊端:
1、有些系统运行不需要一个服务器的资源,例如crm。这样对服务器的资源就造成了浪费的情况。
2、服务器的资源利用率特别低。
3、企业为这些系统购买了服务器,花费了很大的成本。
4、必须有一些人去维护这些服务器。
- 所有就有了docker和容器的概念
一个Docker容器可以理解为一个进程。同一个服务器可以启动多个docker容器进程。
一个Docker容器还可以理解为一个微缩的操作系统。你可以在这个容器内部实现你在一个操作系统中完成的所需功能。
可以在很短时间内增加上万个Docker容器。
可以在很短时间内删除掉上万个Docker容器。
3.docker优点
- 更快速的应用交付和部署:
传统的应用开发完成后,需要提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行。Docker化之后只需要交付少量容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间。 - 更便捷的升级和扩缩容:
随着微服务架构和Docker的发展,大量的应用会通过微服务方式架构,应用的开发构建将变成搭乐高积木一样,每个Docker容器将变成一块“积木”,应用的升级将变得非常容易。当现有的容器不足以支撑业务处理时,可通过镜像运行新的容器进行快速扩容,使应用系统的扩容从原先的天级变成分钟级甚至秒级。 - 更简单的系统运维:
应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用高度一致,容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的BUG。当出现程序异常时,也可以通过测试环境的相同容器进行快速定位和修复。 - 更高效的计算资源利用:
Docker是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的Hypervisor [管理程序] 支持,所以在一台物理机上可以运行很多个容器实例,可大大提升物理服务器的CPU和内存的利用率。
4.docker资源网址
Docker官网:http://www.docker.com
Docker Hub官网(镜像仓库):https://hub.docker.com
2.Docker安装
- 环境centos
- 所有步骤,均参考官方文档 https://docs.docker.com/engine/install/centos/
1.卸载旧版本dorcker(非必要)
- 为了防止环境中docker冲突,旧docker残留影响安装,需要先执行卸载。如果确定当前环境没有docker,可以不执行。
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 运行命令候,如果有就删除了,如果没有docker
没有docker删除记录
2.设置Docker仓库
- 安装docker有3种途径
这三种方式分别是: - 设置docker仓库,并且从仓库安装所需内容。
- 下载RPM安装包,手动更新安装。
- 为测试和开发环境使用自定义脚本安装。
我们使用最简单,也是官方最推荐的第一种方式来安装docker即可。
安装yum-utils包(提供用yum-config-manager实用程序)并设置稳定的存储库 - 如果有其他的仓库管理地址,也可以自行更改链接地址。两个yum命令执行完毕后,仓库设置完成
安装docker引擎
在官方文档中,配置完仓库地址,可选操作是配置测试仓库。
- 这个nightly和test仓库本身是包含在上一步我们配置的docker.repo中的,但是默认没有开启,可选操作就是如果使用的话,可以enable开启。
注意:可选步骤后续不在解释,自行到官方文档查看。仅以本步骤为例解释。 - 接下来我们可以直接执行安装docker引擎的操作。执行以下命令,可以安装最新版本docker。
yum -y install docker-ce docker-ce-cli containerd.io
- 在安装过程中,由于操作系统环境中的yum依赖不一定满足安装的全部依赖需求,可能出现问题
- 解决办法就是根据提示,使用yum安装依赖,可以从第一个开始尝试,有可能需要全部安装一遍,有可以只需要安装部分,那么其他依赖就自然传递过来。
- 根据图中我们缺少 container-selinux,fuse-overlayfs,slirp4netns这三个包。我们可以依次执行命令。
yum -y install container-selinux
yum -y install fuse-overlayfs
yum -y install slirp4netns
注意:有可能在这个阶段,需要更换或者更新yum源。比如这里的container-selinux就是需要更换yum源添加包的。
在执行上述命令前,对原有CentOS-Base.repo先进行备份。
将所需依赖包安装完成后,我们可以重新安装docker相关包。
4.启动验证docker
安装完毕后,我们可以启动docker。
systemctl start docker
- 然后运行docker的第一个镜像容器。
- 如果运行成功,可以看到提示信息,表示docker安装成功
卸载docker
如果想要卸载已经安装好的docker也是非常简单的。
第一步先卸载相关安装包。
yum remove docker-ce docker-ce-cli containerd.io
然后将docker存储的资料数据删除。
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
3.Docker底层原理
1.docker的结构和基本概念
docker的主要结构是客户端,宿主机,容器,镜像和镜像服务器
- 容器(container)
首先需要了解什么是容器,容器就是一个进程,内部是独立运行的一个或者是一组应用。它可以被启动、开始、停止、删除。每个容器都是相互隔离的,保证安全的平台。它可以被启动、开始、停止、删除。每个容器都是相互隔离的,保证安全的平台。 - 镜像(image)
镜像(Image)就是一个只读的模板文件。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。 就好似 Java 中的 类和对象,类就是镜像,容器就是对象!也可以把镜像看成是模具,而镜像创建出来的容器就是通过这个模具创建的一个一个的实际产品。 - 宿主机(host)
宿主机就是我们调用命令使用镜像创建容器的服务器。 - 镜像仓库(repository)
一个用来容纳多个镜像的仓库,可以链接仓库获取你想要的内部镜像,一般一个镜像仓库中包含多个不同tag的镜像。 - 镜像服务器(registry)
镜像仓库占用的服务器,这里注意一个镜像服务器未必只有一个仓库,可以有很多仓库,每个仓库又保管的是不同镜像。 - 客户端(docker-client)
调用docker命令,操作镜像,容器的进程。只要能链接宿主机,操作docker的进程都是docker-client。
2.docker为什么比虚拟机快
虚拟化技术开启了云计算时代,是的大量硬件服务器可以隔离,可以独立。而docker开启了下一代虚拟化技术,但是docker并不是虚拟机。首先我们来了解一下物理机是怎么工作的
从下到上依次为:
- infrastructure基础设施:这个指的就是你的电脑硬件,可以是个人pc,可以是服务器,可以使云主机。
- HOST OS操作系统:安装使用的主机操作系统,可以是windows,MacOS,linux。
- dependencies依赖:运行程序需要用到的依赖,可以是插件,基础服务,语言环境等。
- app应用:用户使用物理机的应用程序,可以使qq,微信,游戏等。
当虚拟机出现之后,我们可以在一个物理机上安装启动多个虚拟机,这种结构开启了云时
从下到上依次为: - infrastructure基础设施:这个指的就是你的电脑硬件,可以是个人pc,可以是服务器,可以使云主机。同上,没变化
- HOST OS操作系统:安装使用的主机操作系统,可以是windows,MacOS,linux。同上,没变化。
- Hypervisor虚拟机管理系统:利用Hypervisor,可以在主操作系统之上运行多个不同的从操作系统。也是虚拟机技术关键。
- Guest OS 客户机操作系统:这个表示每一个虚拟机运行时需要启动的操作系统,相当于在宿主机操作系统之上,每个虚拟机又另外配置了自己的操作系统。这个过程是想到消耗资源的,无论是cpu,内存,还是磁盘空间。
- dependencies依赖:运行程序需要用到的依赖,可以是插件,基础服务,语言环境等。这里需要注意的是,每一个虚拟机中的依赖相互是独立的,也就是说即使2个虚拟机都是用同一个jdk环境,那么也是各自配置各自,不能共享。
- app应用:用户使用物理机的应用程序,可以使qq,微信,游戏等。同上,没变化。
这里的结构基本和前面类似,我们只强调和虚拟机区别的地方: - 没有Hypervisor,而是使用docker管理器,这样一来,不需要为每一个虚拟的容器单独构建客户机操作系统,极大的节省了硬件资源。
- 依赖不在相互独立,而是共享的。这样一来在宿主机上只需要下载安装一次依赖,只要容器使用这个依赖,即使有几万个容器,也都是共享这一个依赖。
综上所述,在漫长的虚拟机话技术发展之后的今天,容器已经成为一个轻便的,不可替代的虚拟化产品,是开发者不得不掌握的技术之一。