Docker——简介 & 安装 & 底层原理
Posted 张起灵-小哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker——简介 & 安装 & 底层原理相关的知识,希望对你有一定的参考价值。
1.Docker是什么?
Docker是基于Go语言实现的云开源项目。
Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。
Linux 容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用运行在 Docker 容器上面,而 Docker 容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。
一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验。
Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案。
问题:环境配置如此麻烦,换一台机器,就要重来一次,费力费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。
Docker镜像的设计,使得Docker得以打破过去「程序即应用」的观念。透过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。
一句话:Docker就是解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。(一次构建、随处运行)
2.Docker的安装
Docker官网:https://www.docker.com/
Docker Hub官网:https://hub.docker.com/
CentOS Docker 安装,Docker支持以下的CentOS版本:
CentOS 7 (64-bit)
CentOS 6.5 (64-bit) 或更高的版本
前提条件,目前,CentOS 仅发行版本中的内核支持 Docker。
Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。
Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。下面的两个命令分别是查看Linux系统的内核信息、CentOS的版本信息。
下面先来说一下Docker中的三要素:
- 容器:Docker 利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例。
Docker 利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例。
它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
- 镜像:Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。
- 仓库:Docker 仓库(Repository)是集中存放镜像文件的场所。
仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的 标签(tag)。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是 Docker Hub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云 等。
Docker 本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就似乎 image镜像文件。只有通过这个镜像文件才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。
* image 文件生成的容器实例,本身也是一个文件,称为镜像文件。
* 一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器
* 至于仓库,就是放了一堆镜像的地方,我们可以把镜像发布到仓储中,需要的时候从仓储中拉下来就可以了。可以理解为:镜像就是Java中的类,容器就是类中的对象。镜像可以创建多个容器运行实例(有些容器中包含tomcat、有些容器中包含mysql、nginx等),也就是类中可以new多个对象(new无参的、new有参的)。
docker安装步骤,详情都可以参考docker文档:https://docs.docker.com/engine/install/centos/#install-from-a-package
这里我就不再说了。。。安装完成之后可以启动docker
上述信息,说明docker已经安装成功,当然也可以使用 ps -ef | grep docker 查看docker的进程信息。
下面进行一个简单的测试,run一下hello world这个镜像。
run命令的运行原理如下图:👇👇👇
然后再说一下,关于docker中的阿里云镜像加速的配置。首先需要注册阿里云的账户(可复用淘宝账户),注册登录之后,从下面的链接中获取镜像加速器的地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
下面这张图就是参考阿里云官方给出的步骤完成的。
重启加载加速器服务
systemctl daemon-reload
重启docker服务
systemctl restart docker
3.Docker底层原理简述
Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。 容器,是一个运行时环境,就是我们前面说到的集装箱。
为什么docker运行比VM快?
(1) docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会有明显优势。
(2) docker利用的是宿主机的内核,而不需要CentOS。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引寻、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载CentOS,新建过程是分钟级别的,因为虚拟机需要加载物理机上的很多硬件资源等。而docker由于直接利用宿主机的操作系统,省略了那些加载很多硬件过程,没有像虚拟机上的那些硬件负担,所以说新建一个docker容器只需要几秒钟。
4.趣谈Docker的logo
从图上看,这显然是一只鲸,背上驮着一推集装箱,在大海里游泳。可以理解为:
- 蓝色的大海:就是docker依赖的宿主机OS。
- 鲸:就是docker,这只鲸需要有大海才可以遨游,也就是说docker需要依赖宿主机OS。
- 集装箱:一个个容器实例,来自镜像模板。
以上是关于Docker——简介 & 安装 & 底层原理的主要内容,如果未能解决你的问题,请参考以下文章
centos8.0安装docker & docker-compose