目录
1、什么是容器
2、容器和虚拟化的区别
2.1、虚拟化的几个缺点
2.2、docker的优势
3、什么是Docker
4、Docker的安装和使用
首先我们需要卸载掉旧版本的 Docker
我们执行以下安装命令安装docker
启动并将Docker设为开机自启
5、Docker的简单运用---Hello World
对于虚拟化来说就是通过虚拟化技术,可以将物理资源转变为逻辑资源(虚拟机),应用程序服务运行在虚拟资源上,而不是真实的物理机上。因此,对于主机级虚拟化,我们的实现方式一般是想办法去模拟出硬件环境,模拟出虚拟的cpu、内存、硬盘、网卡等资源,然后在这些虚拟资源之上安装合适的操作系统来控制这些资源。
如上图所示,在VMM(又叫做hypervisor)之上,可以模拟出逻辑的计算机虚拟环境,然后安装操作系统,使其成为一台逻辑上虚拟的计算机主机(简称虚拟机),该主机有自己的系统内核,有自己的用户空间,可以在自己的用户空间内跑各种各样的应用程序。虚拟机与虚拟机之间是完全隔离的,也就是说一台虚拟机上运行的进程与其他虚拟机上运行的进程是互不干扰的,所以隔离性也是虚拟化所追求的一个目标。
虚拟机会独占一部分内存和硬盘空间。它运行的时候,其他程序就不能使用这些资源了。哪怕虚拟机里面的应用程序,真正使用的内存只有1MB,虚拟机依然需要几百MB的内存才能运行。
虚拟机是完整的操作系统,一些系统级别的操作步骤,往往无法跳过。
启动操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,应用程序才能真正运行。
由于虚拟机存在这些缺点,所以又发展出了另一种虚拟化技术:容器(Containers)。
容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。
传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
由于容器是进程级别的,相比虚拟机有很多优势。
容器里面的应用,直接就是底层系统的一个进程,而不是虚拟机内部的进程。所以,启动容器相当于启动本机的一个进程,而不是启动一个操作系统,速度就快很多。
容器只占用需要的资源,不占用那些没有用到的资源;虚拟机由于是完整的操作系统,不可避免要占用所有资源。另外,多个容器可以共享资源,虚拟机都是独享资源。
容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包,所以容器文件比虚拟机文件要小很多。
容器技术可以将应用打包成单一地址访问的、Registry存储的、 仅通过一行命令就可以部署完成的组件。
采用容器的方式进行部署,整个系统会变得易于组合,通过容器技术将不同服务封装在对应的容器中,之后结合一些脚本使这些容器按照要求相互协作,这样操作不仅可以简化部署难度还可以降低操作风险。
容器技术最重要的价值就是为在不同主机上运行服务提供一个轻便的、一致的格式。容器格式的标准化加快交付体验,允许用户方便地对工作负载进行迁移,避免局限于单一的平台提供商。
简而言之就是,容器是一个盒子,一个盒子装一个玩具,无论你丢在哪里,你给他通电,他就能运行。你的玩具大就用大盒子,小玩具就用小盒子。
容器与虚拟化的区别,简单来说:
上面这幅图可以帮助我们更主观的理解二者之间的区别,下面归纳常见的疑问。
Q1:Container技术和服务器虚拟化是一样的技术吗?
答:不是。两者虽然都属于虚拟化的技术,目标都是为了将一套应用程序所需的执行环境打包起来,建立一个隔离环境,方便在不同的硬件中移动,但两者的运作思维截然不同。简单来说,常见的传统虚拟化技术如vSphere、KVM或Hyper-V是以操作系统为中心,而Container技术则是一种以应用程序为中心的虚拟化技术。
传统虚拟化技术从操作系统层下手,目标是建立一个可以用来执行整套操作系统的独立执行环境,习惯以虚拟机(Virtual Machine)来称呼。而Container技术则是直接将一个应用程序所需的相关程序代码、函式库、环境配置文件都打包起来建立的执行环境,为了和传统虚拟化技术产生的虚拟机区分,Container技术产生的环境就称为Container。
Q2:一般常见的虚拟机和Container有何不同?
答:最明显的差别是,虚拟机需要安装操作系统(安装Guest OS)才能执行应用程序,而Container内不需要安装操作系统就能执行应用程序,通过共享Host OS的作法。Container也因此被称为是OS层的虚拟化技术。
Q3:为何Container是轻量级虚拟化技术?
答:因为Container技术采取共享Host OS的作法,而不需在每一个Container内执行Guest OS,因此建立Container不需要等待操作系统开机时间,几秒钟就可以启用,远比需要数分钟甚至数十分钟才能开启的传统虚拟机来的快。资源的消耗要比虚拟机低的多。
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般是几十个 |
Docker是一种轻量虚拟化的容器技术,提供类似虚拟机的隔离功能,并使用了一种分层的联合文件系统技术管理镜像,能极大简化环境运维过程。Docker是容器运行的引擎(容器系统)负责启动容器镜像、运行容器应用和管理容器实例,并且支持在多种主流平台(PaaS)和本地部署。
Docker是基于Go语言实现的云开源项目,诞生于2013年,最初发起者是DotCloud公司,后来改名为Docker Inc,之后专注于Docker相关技术和产品的开发。
Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。
docker的Logo设计为蓝色鲸鱼,驮着许多集装箱。Docker将集装箱思想运用到软件打包上,为代码提供了一个基于容器的标准化运输系统,Docker的是一个轻量级的操作系统虚拟化解决方案。 主要目标,用官网的概括来说就是“Build,Ship and Run Any App,Anywhere”:编译,装载任何App,在任何地方都可以运行,我们大概理解就是一个容器,实现了对应用的封装,部署,运行等生命周期管理,到处都可以运行。这里的应用组件,既可以是一个Web应用、一个编译环境,也可以是一套数据库平台服务等等。
可以看看集装箱思想是如何与Docker 各种特性相对应的,如表所示
特性 |
集装箱 |
Docker容器 |
打包对象 |
几乎任何货物 |
任何软件及其依赖 |
硬件依赖 |
标准形状和接口允许集装箱被装卸到各种交通工具,整个运输过程无须打开。 |
容器无须修改便可运行在几乎所有的平台上:虚拟机、物理机、公有云、私有云 |
隔离性 |
集装箱可以重叠起来一起运输, 香蕉再也不会被铁桶压烂了 |
资源、网络、库都是隔离的, 不会出现依赖问题 |
自动化 |
标准接口使集装箱很容易自动装卸和移动 |
提供run、start、Stop等标准化操作, 非常适合自动化 |
高效性 |
无须开箱,可在各种交通工具间快速搬运 |
轻盘级,能够快速启动和迁移 |
职责分工 |
货主只需考虑把什么放到集装箱里,承运方只需关心怎样运输集装 |
开发人员只需考虑怎么写代码, 运维人员只需关心如何配置基础环境 |
Docker
的安装和使用有一些前提条件,主要体现在体系架构和内核的支持上。对于体系架构,除了 Docker
一开始就支持的 X86-64
,其他体系架构的支持则一直在不断地完善和推进中。
Docker
分为 CE
和 EE
两大版本。 CE
即社区版(免费,支持周期 7
个月), EE
即企业版,强调安全,付费使用,支持周期 24
个月。
我们在安装前可以参看官方文档获取最新的 Docker
支持情况,官方文档在这里:
https://docs.docker.com/install/
这里我们以 CentOS7
作为本文的演示。
Docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start
# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
# 将[docker-ce-test]下方的enabled=0修改为enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
# Loading mirror speeds from cached hostfile
# Loaded plugins: branch, fastestmirror, langpacks
# docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
# docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable
# docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
# Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
systemctl start docker --now
docker run hello-world
输出这段提示以后,hello world
就会停止运行,容器自动终止。有些容器不会自动终止,因为提供的是服务,比如Mysql镜像等。