2019独角兽企业重金招聘Python工程师标准>>>

[TOC]

Docker 简介

Docker是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。Docker利用Linux核心中的资源分离机制,例如cgroups,以及Linux核心命名空间(name space),来建立独立的软件容器(containers)。这可以在单一Linux实体下运作,避免启动一个虚拟机器造成的额外负担。 --摘自维基百科

「Docker」的字面意思是「码头工人」,这个名字本身应该是官方深思熟虑之后的结果,这个词汇本身就带有很强的隐喻性质,它借用了一个在真实世界中已经成熟的体系:全球物流系统,来映射Docker在软件领域中起到的作用。

在全球物流系统中,一个非常重要的发明就是集装箱。

Docker就像往集装箱里装货物的码头工人那样,它把应用打包成具有某种标准规格的集装箱,用计算机领域的语言来说,这种按照一定规格封装的集装箱叫「镜像」。其实就是将你原来的代码添加点额外的内容,格式之类的,生产出来的一个符合某种标准的东西。

下面请看Docker三个重要概念:Docker镜像;Docker容器;Docker仓库。

Docker 镜像

是一个构建容器的只读模板,是一个包含了应用程序和其运行时依赖环境的只读文件。它包含了容器启动所需的所有信息,包括运行程序和配置数据。每一个镜像由一系列的层 (layers) 组成。

Docker 使用 UnionFS 来将这些层联合到单独的镜像中。UnionFS 允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。

正因为有了这些层的存在,Docker 是如此的轻量。当你改变了一个 Docker 镜像,比如升级到某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做),只是一个新的层被添加或升级了。现在你不用重新发布整个镜像,只需要升级,层使得分发 Docker 镜像变得简单和快速。

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

分层存储

因为镜像包含操作系统完整的 root 文件系统,其体积往往是庞大的,因此在 Docker 设计时,就充分利用 Union FS 的技术,将其设计为分层存储的架构。所以严格来说,镜像并非是像一个 ISO 那样的打包文件,镜像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。

镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。

Docker 容器

容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。Docker 利用容器来运行应用。一个 Docker 容器都是独立和安全的应用平台,Docker 容器是 Docker 的运行部分。可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。

运行容器实例有两种方式:

交互型容器 前台运行,可以通过控制台与容器交互。如果创建该容器的终端被关闭,则容器就变为停止状态。此外,在容器控制台中输入exit或者通过docker stop或docker kill也能终止容器。

后台型容器 后台运行,创建启动之后就与终端无关了,需要用 docker stop 或 docker kill 来终止,或者 docker logs 查看运行中的输出。

Docker 仓库

Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。同样的,Docker 仓库也有公有和私有的概念。公有的 Docker 仓库名字是 Docker Hub。Docker Hub 提供了庞大的镜像集合供使用。这些镜像可以是自己创建,或者在别人的镜像基础上创建。Docker 仓库是 Docker 的分发部分。

Docker 仓库的概念与 Git 版本控制工具有些类似,注册服务器可以理解为 GitHub 这样的托管服务。

Docker 优点

简单

使用简单

标准的交付件

说到Docker最像集装箱的地方,关键就是理解它是软件领域的一种「标准化」,这种标准化的具体产物,简单来说就是「镜像(image)」。

简化产品持续交付的复杂工序

Steve Francia(Docker开源项目运维主管)说:“我觉得Docker做得最好的事情就是让开发者、用户和大家能够在任何地方非常容易地运行一个应用程序。它几乎就是开发者的圣杯,因为你既可以在你的桌面上运行一个应用程序,而且不需要任何修改,你就可以在服务器上毫无差异地运行这个相同的应用程序。这在之前是从来没有出现过的。”

应用隔离

集装箱可以有效做到货物之间的隔离,使化学物品和食品可以堆砌在一起运输。Docker可以隔离不同应用程序之间的相互影响,但是比虚拟机开销更小。

节约时间,快速部署和启动

  • VM启动一般是分钟级,Docker容器启动是秒级;
  • 传统的部署模式是:安装(包管理工具或者源码包编译)->配置->运行;
  • Docker的部署模式是:复制->运行。

节约成本

  • 一个虚拟机至少需要几个G的磁盘空间,Docker容器可以减少到MB级;
  • 容器技术对比虚拟化技术,容器比虚拟化更轻量级,对资源的消耗小很多。
  • 容器操作也更快捷,启动和停止都要比虚拟机快。但Docker容器需要与主机共享操作系统内核,不能像虚拟机那样运行独立的内核。

统一的管理服务

举个例子,比如我一个服务器上部署了n多服务,有mysql,redis,rabbitmq,其他还有一堆应用。有一天我服务器突然断电重启了,那些没有设置自动重启的应用,那些重启出问题的应用,那些你甚至都不知道隐藏在某个角落里的重要应用没启动成功…

然而使用Docker,一眼就可以看出那些应用正常启动了,那些应用又出问题了。接下来只用有条不紊的处理就ok了。

一次构建,到处部署

没有使用Docker的服务器部署情况

简单说明一下我以前公司服务部署的情况: 公司搞p2p金融的,据说是为了数据安全,没用阿里云,自己买的服务器 一套环境有8个服务,11台虚拟机; 开发一套、测试一套、预发布一套、生产一套,共4套环境就需要44台虚拟机了; 每台虚拟机需要多少存储,磁盘空间,耗费多少CPU,当时没有计算过,

还记得,那时候我们的运维安装一个PHP环境花费了2天时间(源码安装的,几十个依赖);

  • Rest API v2; thinkphp3.2 php5.6 nignx11
  • Rest API v3; thinkphp3.2 php5.6 nignx11
  • API Service Yaf nignx11 (放一些公共服务,比如用户注册登录,获取用户信息的接口)
  • mysql5.6
  • redis3.0
  • admin 后台管理 thinkphp3.2 php5.6 nignx11
  • 前端Web thinkphp3.2 php5.6 nignx11
  • RabbitMQ 3.5.6 集群(3个节点) + haproxy-1.5.15 (发送短信、发送邮件、消息推送等)

Docker在部署过程中,将安装,配置等重复的部分,由Docker自动化完成。只需要在第一次部署时,构建完可用的Docker镜像(装好集装箱),在以后使用中,短短的几行命令,就可以直接拉取镜像,根据这个镜像创建出一个容器,把服务跑起来了。所需要的仅仅是安装了Docker的服务器,一个Dockerfile文件,以及比较流畅的网络而已。真可谓『一次构建,到处部署』。

Docker 缺点

复杂

实现Docker是复杂的,它需要很多技术的支撑,比如说,容器管理、编排、应用打包、容器间的网络、数据快照等等;

不过,复杂也是相对而言的,只有花点儿心思、花点儿时间去做了,还是不难,甚至可以说是很简单的。

不方便故障排除和分析

在故障排除和分析中,复杂性也是一个问题。Markovich提到这就是Docker提供应用程序抽象的原因。“将运行在Docker上应用程序的性能问题和下层基础设施领域的性能关联起来几乎不可能。”他在邮件中说道,“IT团队将来需要可视化——一种新型的监控和分析工具,它能够将Docker生态圈中的所有东西,从应用程序到私有或者公有的基础设施关联起来。”

隔离性要比VM弱

Docker和VM相比,虚拟化层次不同,导致Docker的隔离性要比VM弱,在多租户环境中有安全隔离的问题,另外在单宿主机上,容器之间的资源竞争也可能导致业务会受到影响,需要对容器的资源隔离,特别是cgroup的隔离有较为精细的运维。

目前没有GUI

现在使用Docker,你必须习惯使用命令行。现在使用Docker还没有可视化界面,都是命令行指令。

Docker 安装

CentOS7 安装 Docker

CentOS7 系统 CentOS-Extras 库中已带 Docker,可以直接安装:

sudo yum update
sudo yum install docker

安装之后启动 Docker 服务,并让它随系统启动自动加载。

sudo service docker start
sudo chkconfig docker on

具体安装步骤可见官网文档

MacOS 安装 Docker

使用 Homebrew 安装

Homebrew 的 Cask 已经支持 Docker for Mac,因此可以很方便的使用 Homebrew Cask 来进行安装:

brew cask install docker

手动下载安装

如果需要手动下载,可以通过这个链接下载:https://download.docker.com/mac/stable/Docker.dmg

Windows 安装 Docker

参考 https://github.com/zhangpeihao/LearningDocker/blob/master/manuscript/01-DownloadAndInstall.md


参考资料:

  • https://yeasy.gitbooks.io/docker_practice/content/basic_concept/image.html

  • http://kuanghy.github.io/2016/11/05/docker-intro

  • http://dockone.io/article/260

  • https://www.zhihu.com/question/22871084

转载于:https://my.oschina.net/leeyisoft/blog/1491299

docker技术简介相关推荐

  1. Docker技术攻陷笔记

    目录 第三部分:Docker技术最佳实践 笔记来自老齐老师课堂记 一.-Docker入门 Docker技术简介 概述 版本说明 Docker 核心对象 镜像(Image) 容器(Container) ...

  2. 容器化技术最佳实践1--容器化技术简介与Docker入门

    容器化技术最佳实践1–容器化技术简介与Docker入门 文章目录 容器化技术最佳实践1--容器化技术简介与Docker入门 容器化简介 通过虚拟化了解容器化 对开发和运维的好处 容器化部署特点 什么情 ...

  3. Docker | Docker技术基础梳理(五) - Docker网络管理

    Docker | Docker技术基础梳理(五) - Docker网络管理 链接: 原文链接 原文链接: https://gitbook.cn/books/5b8f3c471966b44b00d265 ...

  4. Docker:Docker的简介、安装、使用方法之详细攻略

    Docker:Docker的简介.安装.使用方法之详细攻略 目录 Docker的简介 0.1.知乎对Docker的理解-Docker就是集装箱 0.2.简书对Docker的理解-Docker带来标准化 ...

  5. docker容器简介及安装

    docker容器简介及安装 一.docker的前世今生 早期 过度 目前 二.什么是docker 三.docker核心概念 1.镜像 2.容器 3.仓库 四.docker容器和虚拟机的区别 五.doc ...

  6. 3-docker 架构和底层技术简介

    3-docker 架构和底层技术简介 Docker Platform Docker 是一个平台. 提供了一个开发.打包.运行app的平台 把app和底层 infrastructure 隔离开来 根据上 ...

  7. docker入门与实战pdf_Docker-Kubernetes-k8s微服务实战视频教程+Docker技术入门精讲课程资料分享...

    一.简介 1)Docker Docker是Docker.Lnc公司开源的一个基于LXC技术之上搭建的Container容器引擎,源代码托管在Github上,基于Go语言并遵从Apache2.0协议开源 ...

  8. CoreOS容器云企业实战(3)--Docker技术实践

    0x1 Docker概述 1)Docker介绍 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一 ...

  9. 虚拟化技术之docker技术详解

    文章目录 虚拟化技术之docker技术详解 关于作者 作者介绍 前言 虚拟化技术概述及简介 一 .什么是虚拟化技术? 二.常见的虚拟化技术有哪些? 2.1 KVM 虚拟化技术概念 2.2 ESXI 虚 ...

  10. Docker技术入门与实战 第2版

    网站 更多书籍点击进入>> CiCi岛 下载 电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍 电子书下载(皮皮云盘-点击"普通下载" ...

最新文章

  1. 嫌弃俄罗斯的火箭报价太黑!马斯克自己造火箭!SpaceX首次载人发射任务成功!太牛了!...
  2. Python技巧之函数拆包裹
  3. 如何正确的进行网站入侵渗透测试
  4. BZOJ3173 [TJOI2013]最长上升子序列
  5. 明天一定要记得放一个硬币在口袋
  6. (计算机组成原理)第三章存储系统-第六节1:高速缓冲存储器Cache及其相关基本概念、程序访问的局部性原理和命中率
  7. jstl fmt:formatNumber 数字货币格式化
  8. I00021 有负数项的数列之和
  9. ANDROID L——Material Design详解(UI控件)
  10. 论文泛读: 基于改进退化隐马尔可夫模型的设备健康诊断与寿命预测研究
  11. 所有失去的都会以另一种方式归来
  12. 论文推荐 | 综述:自动驾驶背景下的交通流模型研究
  13. python 求两线段是否相交,如果相交求交点
  14. CVE-2016-2183 解决方法
  15. 图形图像的基础知识总结
  16. PowerShell命令免杀思路
  17. 有道技术团队入选 2021思否中国技术先锋年度评选两项榜单
  18. WebAssembly上手:基础指南
  19. 学计算机的男孩情商高吗,2021情商高的男孩适合学什么专业
  20. python如何声明函数_python如何声明函数

热门文章

  1. 【ECS】云服务器ECS是什么
  2. celeste第二章_蔚蓝全剧情全流程攻略 全关卡详解图文攻略
  3. python爬取雪球网交易数据
  4. 爬虫--雪球网爬取(requests 和 request 的两种方法)
  5. 手机连接ftp文件服务器,手机链接ftp服务器地址
  6. pandas分组计算平均值_Pandas之分组计算
  7. deepin15.9的linux内核版本,深度Deepin 15.9操作系统首次更新内容
  8. 【BIT2021程设】2. 解谜游戏——初见DFS
  9. 计算机对比度亮度调整,显示器亮度对比度调多少眼睛舒服_亮度和对比度正确调整方法...
  10. 仿真树叶飘落效果的实现