概述

Docker产生的背景

一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验。

Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案。

环境配置如此麻烦,换一台机器,就要重来一次,费力费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。

之前在服务器配置一个应用的运行环境,要安装各种软件,例如,Java/Tomcat/MySQL/JDBC驱动包等。安装和配置这些东西有多麻烦就不说了,它还不能跨平台。假如我们是在 Windows 上安装的这些环境,到了 Linux 又得重新装。况且就算不跨操作系统,换另一台同样操作系统的服务器,要移植应用也是非常麻烦的。

传统上认为,软件编码开发/测试结束后,所产出的成果即是程序或是能够编译执行的二进制字节码等(java为例)。而为了让这些程序可以顺利执行,开发团队也得准备完整的部署文件,让维运团队得以部署应用程式,开发需要清楚的告诉运维部署团队,用的全部配置文件+所有软件环境。不过,即便如此,仍然常常发生部署失败的状况。

Docker镜像的设计,使得Docker得以打破过去「程序即应用」的观念。通过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。

Docker的理念

Docker是基于Go语言实现的云开源项目。

Docker的主要目标是**“Build,Ship and Run Any App,Anywhere”**,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。

Linux 容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用运行在 Docker 容器上面,而 Docker 容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。

解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术

Docker可以做什么?

之前的虚拟机技术

虚拟机(virtual machine)就是带环境安装的一种解决方案。

它可以在一种操作系统里面运行另一种操作系统,比如在Windows 系统里面运行Linux 系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变。

虚拟机的缺点如下

  • 资源占用多
  • 冗余步骤多
  • 启动慢

容器虚拟化技术

由于上面虚拟机存在这些缺点,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC)。

Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。

Docker和传统虚拟化方式的不同之处:

  • 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程
  • 而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
  • 每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。

开发/运维

一次构建、随处运行

  1. 更快速的应用交付和部署

    传统的应用开发完成后,需要提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行。Docker化之后只需要交付少量容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间。

  2. 更便捷的升级和扩缩容

    随着微服务架构和Docker的发展,大量的应用会通过微服务方式架构,应用的开发构建将变成搭乐高积木一样,每个Docker容器将变成一块“积木”,应用的升级将变得非常容易。当现有的容器不足以支撑业务处理时,可通过镜像运行新的容器进行快速扩容,使应用系统的扩容从原先的天级变成分钟级甚至秒级。

  3. 更简单的系统运维

    应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用高度一致,容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的BUG。当出现程序异常时,也可以通过测试环境的相同容器进行快速定位和修复。

  4. 更高效的计算资源利用

    Docker是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的Hypervisor支持,所以在一台物理机上可以运行很多个容器实例,可大大提升物理服务器的CPU和内存的利用率。

Docker的优势

  • 轻量,秒级的快速启动速度,基于容器的虚拟化,仅包含业务运行所需的runtime环境,CentOS/Ubuntu基础镜像仅170MB;宿主机可部署100~1000个容器
  • 简单,易用,活跃的社区
  • 标准统一的打包/部署/运行方案
  • 镜像支持增量分发,易于部署
  • 易于构建,良好的REST API,也适合自动化测试和持续集成
  • 性能,尤其是内存和IO的开销

安装与配置

前提条件

  • 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 或者更高版本。

Docker的组成部分

Docker架构图

镜像(image)

Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。

容器与镜像的关系类似于面向对象编程中的对象与类

Docker 面向对象编程
容器 对象
镜像

容器(container)

  • Docker 利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例。
  • 它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
  • 可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
  • 容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的

仓库(repository)

  • 仓库(Repository)是集中存放镜像文件的场所。
  • 仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
  • 仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
  • 最大的公开仓库是 Docker Hub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云 等

总结

  • Docker 本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就似乎 image镜像文件。只有通过这个镜像文件才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。
  • image 文件生成的容器实例,本身也是一个文件,称为镜像文件。
  • 一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器
  • 仓储,就是放了一堆镜像的地方,我们可以把镜像发布到仓储中,需要的时候从仓储中拉下来就可以了。

CentOS6.8安装Docker过程

(1)Docker使用EPEL发布,RHEL系的OS首先要确保已经持有EPEL仓库,否则先检查OS的版本,然后安装相应的EPEL包

yum install -y epel-release

(2)安装docker

yum install -y docker-io

(3)安装后的配置文件 /etc/sysconfig/docker

(4)启动Docker后台服务

service docker start

(5)验证是否启动成功

docker version

配置阿里镜像加速

(1)获取加速器地址连接

注册一个属于自己的阿里云账号

(2)配置本地Docker运行镜像加速器

  • 鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决

  • 注册属于自己的阿里云账号(需要自己注册有一个属于你自己的): https://xxxx.mirror.aliyuncs.com

  • vim /etc/sysconfig/docker 将获得的自己账户下的阿里云加速地址配置进

  • other_args="–registry-mirror=https://你自己的账号加速信息.mirror.aliyuncs.com"

(3)重新启动Docker后台服务

service docker restart

(4)Linux系统下配置完加速器需要检查是否生效

如果从结果中看到了配置的–registry-mirror参数说明配置成功,如下所示:

Hello World演示示例

(1)启动Docker后台服务

(2)执行以下命令,观察运行结果

docker run hello-world

输出这段提示以后,hello world就会停止运行,容器自动终止。

(3)run命令后,内部做了什么?

Docker底层原理

Docker是怎么工作的

Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。 容器,是一个运行时环境

为什么Docker比VM快

  • docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。

  • docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。进而避免引寻、加载操作系统内核这个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,这个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了这个过程,因此新建一个docker容器只需要几秒钟。

对比维度 Docker容器 虚拟机你(VM)
操作系统 与宿主机共享OS 宿主机OS上运行虚拟机OS
存储大小 镜像小,便于存储与传输 镜像庞大
运行性能 几乎无额外性能损失 OS额外的CPU、内存消耗
移植性 轻便、灵活,适应于Linux 笨重,与虚拟化技术耦合度高
硬件亲和性 面向软件开发者 面向硬件运维者
部署速度 快速、秒级 较慢,10s以上

Docker概述和安装部署相关推荐

  1. Docker概述、安装及基础命令

    Docker概述.安装及基础命令 一.Docker概述 1. docker是什么 2. docker与虚拟机的区别 3. docker使用场景 4. docker核心概念 5. docker引擎 6. ...

  2. #gStore-weekly | Centos7系统下gStore在 docker上的安装部署

    本人在使用gStore时想在docker环境中安装部署,但是官网的开发文档中关于docker安装部署指导很少,因此本人就根据自己的安装经验编写一篇关于gStore在docker上的安装部署博文. 本人 ...

  3. Docker之registry安装部署

    Docker之registry安装部署 我说了您可能就不会继续看registry了,但是我还是要说,这个东东真不好用,不如harbor(强烈推荐). 1.安装docker --此处省略-- 2.拉取r ...

  4. Docker学习篇(一)Docker概述、安装和常用命令

    Docker概述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化.容器是完 ...

  5. Spark-Unit1-spark概述与安装部署

    一.Spark概述 spark官网:spark.apache.org Spark是用的大规模数据处理的统一计算引擎,它是为大数据处理而设计的快速通用的计算引擎.spark诞生于加油大学伯克利分校AMP ...

  6. Flink1.12 - 概述、安装部署及快速入门

    1. Flink概述 1.1 Flink官方介绍 flink官网地址 1.2 Flink组件栈  一个计算框架要有长远的发展,必须打造一个完整的 Stack.只有上层有了具体的应用,并能很好的发挥计算 ...

  7. 【docker】centos7 安装部署 docker

    一.安装docker 1.Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker . 通过 uname -r 命令查看 ...

  8. Docker基础之安装部署

    1.查看linux系统环境 #内核3.10以上 [root@centos ~]# uname -r 3.10.0-1160.71.1.el7.x86_64#系统版本 [root@centos ~]# ...

  9. Docker概述与安装

    一.Docker的概念 Docker 1.服务器选型 在选择服务器操作系统时, Windows 附带了许多您需要付费的功能. Linux 是开放源代码,可让用户免费使用. (1)对比 ①.Linux是 ...

最新文章

  1. 粗谈Android中的对齐
  2. 消费者关注的 Win8 问题汇总(下)
  3. ubuntu16安装中文版和windows关联
  4. JDK14中的java tools简介
  5. Python 中的闭包、匿名函数、decorator 装饰器与python的偏函数
  6. Angular如何自定义attribute指令
  7. Flow 常用知识点整理
  8. PHP 循环时间控制缓冲方法
  9. AcWing 829. 模拟队列
  10. java web 开发环境布置学习笔记1
  11. 构建之法 前三章读后感
  12. 判断Linux/Unix为32位或64位
  13. 计算机毕业设计ssm基于HTML5的环保公益网站d4sf1系统+程序+源码+lw+远程部署
  14. QQ分享功能实现-Android
  15. 微信公众号和服务器的关系,微信公众号、订阅号、服务号之间的关系和区别
  16. Unity游戏开发:背包系统的实现
  17. c语言中的圆方程,高中圆的方程练习题
  18. Kubernetes PV与PVC
  19. Learn Git Branching 学习笔记(Git 技术、技巧与贴士集合篇)
  20. 云服务器搭建网站域名要备案吗,域名绑定服务器需要备案吗

热门文章

  1. java直接打开word_Java
  2. .axf文件_干货!STM32晶振的更改,BIN文件的生成
  3. mysql+dump+选项_mysqldump 备份常用选项以及备份脚本
  4. python实现加密字符串_Python实现对字符串的加密解密方法示例
  5. 教你如何防范远程桌面协议(RDP)的安全威胁
  6. 练习使用 Linux 的 grep 命令
  7. 从git仓库中删除.idea文件夹的小技巧
  8. HDU2255(最全权完美匹配)
  9. C/C++ 取整函数 ceil()、floor()、trunc()
  10. 线段树 (经典题目合集)