42.docker简介

2023-05-16

今年京东的618活动,京东启动了将近15万个Docker容器,这些Docker容器用于商品页,订单,搜索,缓存,数据库等服务。

为啥docker能在京东大放异彩?

Docker自诞生以来就受到极大的关注,纵观国内的一线IT企业在双十一,春节,大促销等活动纷纷上马Docker的项目,Docker到底有什么优点吸引这些企业。

传统开发部署流程之痛

在互联网企业,开发者完成某个功能需求后上线发布的流程如下。
由开发者在个人电脑上部署新的功能后独自测试,测试完毕后在测试服务器中部署新功能,再由公司内部的测试人员在测试服务器上测试,在测试服务器测试完毕后再在生产服务器部署新功能,正式发布该功能。
这个流程如图1所示。

这里写图片描述

图1 完成功能需求的上线发布的流程

在图1所示的流程中会产生下面一系列的问题。

  • 每台计算机的Linux环境、JDK版本、PHP版本、Nginx版本、MySQL版本等不一致,有可能造成某些问题只是某台计算机上出现,其他电脑没法重现。
  • 某些开发环境搭建复杂,还要分别在个人计算机、测试服务器、生产服务器上搭建一次,里面有大量的重复劳动,效率低下。
  • 在个人计算机和测试服务器上有可能只是单机环境,到了生产服务器上变成了分布式环境,环境不一致导致部署方法不一致,造成在测试阶段没法发现问题。

Docker是一个用于统一开发和部署的轻量级容器,让开发者打包其应用及相关的依赖包到一个可移植的容器,发布该容器到其他机器,就能很容易地实现应用的部署。

Docker的原理

传统的虚拟化技术体系在服务器操作系统上安装了多个虚拟机,每个虚拟机上通过虚拟化技术实现了一个虚拟操作系统,在这个虚拟操作系统上运行应用。传统的虚拟化技术体系架构如图3-20所示。

Docker的虚拟化技术体系在服务器的操作系统上有一个Docker服务在运行,在这个Docker服务上运行着多个Docker容器,每个Docker容器中运行着应用,容器与容器间的应用是相互隔离、相互独立的,但通过Docker服务占用着服务器的硬件和网络资源。

这里写图片描述
图2 传统的虚拟化技术体系架构

Docker的虚拟化技术体系架构如图3所示。
这里写图片描述
图3 Docker的虚拟化技术体系架构

Docker利用虚拟化技术实现了一套从硬件到软件的虚拟化环境,这个技术给运维和部署带来的巨大的变革,利用虚拟化技术,真正遮蔽了外部因素的影响,保证了在任何一台电脑中Docker容器里面的内容是一样的。

网络上介绍Docker的特点时常用的是集装箱的比喻,但大多数同学对集装箱带来的革命性影响认识不深,因此我希望借助下面的例子来介绍docker带来的巨大变革:

现在笔者在广州工作,主要的活动地点是出租房和公司,每逢周末倍思亲就回佛山老家。

笔者不在公司的时候,偶尔工作上有事情要处理,但这时就有一个问题:习惯用的软件都只安装在公司的台式机上,如果在出租房和佛山老家的电脑上处理工作上的事情,很多时候都要把常用的软件再安装一次,非常折腾~-~。

使用笔记本后就不一样,如果笔者随身带着笔记本,需要处理工作上的事情时,无论在公司,出租房和佛山老家,只需要把笔记本插上电源,连接wifi,就能随时投入到工作中,不需要再重新安装常用的软件。

把公司,出租房,佛山老家看作是3个不同的工作环境(相当于服务器),没有docker的时代,要在这3个不同的工作环境中工作,需要分别安装所需的软件,如果遇上因为环境之间有差异而造成的运维问题(例如通过自动下载工具下载的软件版本不一致),还要花大量的时间去排查。

使用了docker后就简单多了,在公司,出租房,佛山老家这3个不同的工作环境(相当于服务器)中,拿出笔记本(也就是docker容器),插上电源和连接wifi,就能立刻投入到工作,不需要花时间去安装各种软件。

搭建一致的开发环境

Docker中有3个关键概念。
- 镜像(Image):Docker镜像(Image)类似于虚拟机镜像,可以把其理解为Docker的只读模板,其包含了文件系统。
- 容器(Container):Docker容器(Container)类似于一个沙箱,Docker使用容器隔离资源,并在其内部运行应用,可看成是一个简易版的Linux环境。镜像是只读,容器从镜像启动后,Docker会在镜像最上层创建一个可写层,这样镜像本身就能保持不变。
- 仓库(Repository):Docker仓库(Repository)类似于代码仓库,是Docker集中存放镜像文件的场所。

Docker仓库里面包含了大量操作系统的基础镜像(例如CentOS、Ubuntu等),开发者从仓库中拉取这些操作系统的基础镜像后就能在其基础之上构建自身环境的镜像。

Docker提供了Dockerfile这种脚本给开发者创建自定义的镜像。开发者通过Dockerfile,很容易在操作系统的基础镜像(例如CentOS、Ubuntu等)上安装指定的软件及其依赖,从而构建一个适用于自身业务环境的镜像。

简单来说,读者可以把操作系统的基础镜像理解为一个干净版操作系统,通过Dockerfile(相当于Linux上的安装脚本)往这个干净版操作系统上安装需要的软件后,再生成一个新的镜像。

下面是一个Dockerfile的例子,运行这个Dockerfile就能构建Java开发环境的Docker镜像(Dockerfile来源:https://github.com/dockerfile/java/blob/master/oracle-java7/dockerfile)。

# 下载基础镜像
FROM dockerfile/ubuntu

# 安装Java.
Run echo oracle-Java7-installer shared/accepted-oracle-license-v1-1 select true | debconf-set-selections && \
  add-apt-Repository -y ppa:Webupd8team/Java && \
  apt-get update && \
  apt-get install -y oracle-Java7-installer && \
  rm -rf /var/lib/apt/lists/* && \
  rm -rf /var/cache/oracle-jdk7-installer

# 定义工作目录
WORKDIR /data

# 定义JAVA_HOME环境变量
ENV JAVA_HOME /usr/lib/jvm/java-7-oracle

# 定义默认的命令
CMD ["bash"]

使用Docker构建一致的开发环境是依赖于Dockerfile:把编写完成的Dockerfile放置在版本管理服务器中,在不同的服务器上获取这个Dockerfile并运行就能构建相同的镜像,从而得到一致的开发环境。这个流程如图4所示。
这里写图片描述
图4 用Docker构建开发环境流程

docker使用场景的思考

使用docker后,可以获得资源隔离,弹性扩展,简化配置等好处,但docker真的适合每个项目吗?
虽然docker简化了运维,但是docker本身也带来了新的运维问题:例如怎么部署一个docker集群,docker集群的监控,docker故障的排查等等,除了这些问题外,在把docker引入项目中仔细考虑下面的因素:

  • 工程师学习docker需要花费多少时间?
  • 这些时间投入能对项目的进展带来正面影响吗?
  • 如果docker在使用中出现了问题,有足够的资源去解决这些问题吗?

本人把网络上发表的一系列“app后端”文章加以整理并增加了运维和架构方面的内容,出版了书籍《App 后台开发运维和架构实践》,该书已在京东,当当和亚马逊上销售。

《App后台开发运维和架构实践》的购买链接

京东

京东
当当
亚马逊
互动出版网
天猫

打开链接 app后端设计–总目录 ,能查看本人发表过的所有原创“app后端”文章。

【作者】曾健生
【QQ】190678908
【微信公众号】 appbackend
【新浪微博】 @newjueqi
【博客】http://blog.csdn.net/newjueqi

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

42.docker简介 的相关文章

随机推荐

  • Java实现之冒泡排序

    lt Font Definitions 64 font face font family 宋体 panose 1 2 1 6 0 3 1 1 1 1 1 mso font alt SimSun mso font charset 134 ms
  • 38.“财务自由“,喂给创业者的童话故事

    现在我们拼搏两三年 xff0c 等公司上市后 xff0c 就实现财务自由 xff0c 就能过上好日子 上面是我看到有些人拉创业者入伙时说的话 xff0c 很具有蛊惑性 我很疑惑 xff0c 怎么 财务自由 就和 过上好日子 画上了等号呢 x
  • nodejs模块xml2js解析xml的坑

    在一个项目中 xff0c 用到nodejs模块xml2js解析xml xff0c xml的数据如下 xff1a lt xml gt lt MsgId gt 6197906553041859764 lt MsgId gt lt xml gt
  • 推荐《超右脑英语学习法》

    文章标题 推荐 超右脑英语学习法 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者QQ 190678908 作者MSN zengjiansheng1 64 hotmail com 作者博客 blog cs
  • git回退到某个历史版本

    1 使用git log命令查看所有的历史版本 xff0c 获取某个历史版本的id xff0c 假设查到历史版本的id是139dcfaa558e3276b30b6b2e5cbbb9c00bbdca96 2 git reset hard 139
  • 手把手教你研发属于自己的智能无人机

    1 让智能无人机梦想变成现实 对于大多数极客学员来说 xff0c 自己组装一台无人机 xff0c 可以航拍 xff0c 可以目标跟踪 xff0c 是心中的梦想 xff0c 但是实现梦想的学员却很少
  • zookeeperd无法启动的分析

    在文章 zookeeper启动失败的排错中描述了zookeeperd的一种启动错误 xff0c 今天笔者还发现了另外一种启动错误 xff0c 顺便记录下来 xff1a 一台测试的服务器重启后 xff0c 运行zookeeperd的启动脚本显
  • 用go代码操作git

    git2go是一个用go代码操作git的库 xff0c 需要依赖于第三方库libgit2 安装libgit2前 xff0c 先安装相应的包 xff1a yum y install libssh2 devel 在 https github c
  • js format 函数的实现

    function format str fmt var usedDate 61 new Date usedDay var o 61 34 M 43 34 usedDate getMonth 43 1 月份 34 d 43 34 usedDa
  • Dockerfile中CMD与ENTRYPOINT的区别

    ENTRYPOINT xff0c 表示镜像在初始化时需要执行的命令 xff0c 不可被重写覆盖 xff0c 需谨记CMD xff0c 表示镜像运行默认参数 xff0c 可被重写覆盖ENTRYPOINT CMD都只能在文件中存在一次 xff0
  • 怎么快速学习App后台开发

    本人从去年7月份开始持续到今年2月份 xff0c 终于写完了书籍 App后台开发运维和架构实践 xff0c 这是一本教导刚入行的同学快速学习App后台开发的书籍 你是否遇到下面的情景 xff1f 接到新开发任务 这些功能应该怎么做 xff1
  • 《App后台开发运维和架构实践》前言

    笔者在2012年从开发电子商务网站转向了开发App后台 xff0c 当时在一家做社交App的创业公司里工作 xff0c 笔者和搭档都没有任何从事移动互联网开发的经验 xff0c 不清楚App后台怎么架构 xff0c 只能摸着石头过河 xff
  • 《App后台开发运维和架构实践》推荐序

    软件开发工具的成长速度远远超过开发人员的成长速度 xff0c 这是现实 每个月 xff0c 甚至每天 xff0c 我们都可以见到新的类库 框架 工具 语言 它们或者极大地降低了开发的成本 xff0c 或者极大地提升了开发的效率 随之而来的问
  • 《App 后台开发运维和架构实践》完整目录

    ps xff1a 由于书的目录太长了 xff0c 各大网店 xff08 京东 xff0c 当当 xff0c 亚马逊 xff09 都显示不完整 xff0c 所以这里列出目录的完整版 第1章 App后台入门 16 1 1 App后台的功能 16
  • 《App后台开发运维和架构实践》样章下载

    App后台开发运维和架构实践 样章和目录下载 xff1a 本书前三章的初稿在出书前已经发布网络上 xff0c 可通过下面两种途径获取 xff1a xff08 1 xff09 订阅本人公众号 app后端 xff0c 通过 历史文章 阅读以前的
  • 39.App中用户验证方案

    注 xff1a 这篇文章为15 app后端怎么设计用户登录方案的修改版 xff0c 以前的这篇博客写得太简单了 xff0c 弄得很多同学理解不了 xff0c 趁着写书 App后台开发运维和架构实践 的机会 xff0c 把这篇文章重写了 Ap
  • 电子爱好者必备,强烈推荐这些常用工具

    工欲善其事 xff0c 必先利其器 xff01 要想 DIY xff0c 工具同样重要 xff01 下面按照工具的必须程度从 初学者 至 发烧友 逐级提出建议 xff0c 供大家参考 xff01 首先明确一点 xff1a 本配置是针对电子类
  • 40.用创业思维复盘:写技术博客到出书

    在2013初 xff0c 笔者把过去两年开发app后端的经验总结成十多篇文章发表在博客上 xff0c 那些笔记发表以后的反响出乎本人的意料 xff0c 本人从网络上得到网友的支持和肯定 xff0c 证明这些知识还是有价值 2013年离开了当
  • 41.学习这事没有你想象那么难

    偶尔面试应聘者的时候 xff0c 发现有的应聘者虽然已经毕业一两年了 xff0c 但和他们聊天时 xff0c 觉得他们的技术水平怎么就像刚毕业的情况 xff0c 问他们基础的技术问题好像都不了解 xff1f 但是有的人毕业一两年后 xff0
  • 42.docker简介

    今年京东的618活动 xff0c 京东启动了将近15万个Docker容器 xff0c 这些Docker容器用于商品页 xff0c 订单 xff0c 搜索 xff0c 缓存 xff0c 数据库等服务 为啥docker能在京东大放异彩 xff1