暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

关于Docker的那些事儿...

火火日记 2019-06-23
428


近几年云计算越来越火,说起云计算我们会想到云计算的核心之一的虚拟化,而说起虚拟化我们又不得不提到容器技术,今天就让我们聊聊Docker。


什么是Docker?官网给出的解释如下:

Docker is a platform for developers and sysadmins to develop, deploy, and run applications with containers. The use of Linux containers to deploy applications is called containerization

简单来说,我觉得Docker其实就是基于容器的开源虚拟化平台。


说起容器(Container)就好比货船上的集装箱,为了方面运输,可以把各类衣服,鞋子,电子产品,酒,水果等放入标准大小的集装箱内。


我们在服务器上所说的容器亦是如此。我们可以把各种应用程序和执行环境放到容器中,并提供统一的接口,以简化程序的发布和管理。任何程序包括后端程序,数据库,消息队列等都可以放到容器中,并且可以在本地机房或云(如AWS, Azure, Google Cloud等)上的任何地方运行。


目前公认的容器技术运用的最好的公司是谷歌,根据2014年的报告,谷歌已经把所有的服务放到容器中运行,每周大约运行20亿个容器。


一. Docker 架构

从架构上来看,用户使用Client于Docker Host建立通过,并发送请求给Host。而Docker Daemon作为Docker架构中的主体部分,会接受并处理Docker Client发送的请求,并以Job的方式执行,Job过程中如果需要容器镜像时优先从Local Host中寻找,找不到时会从Docker Registry中下载镜像。


那下面我们就来看看Docker Host中的两个核心, 容器(Container)和镜像(Image)


【Container】

Container是一种在隔离空间中运行进程的技术。它是一种虚拟化技术,但又与传统的虚拟化技术不同。


为了说明Docker的优势,我们先看下2种虚拟化技术(Type1 & Type2):

1


1. Type1:全虚拟化

我们耳熟能详的VMware或者VirtualBox是在主机操作系统上再虚拟化出不同的OS。这种方式可以虚拟化多种OS(如在Linux机器上跑Windows),并且使用起来相对简单,但是在生产环境中速度比较慢,效率并不是很高。


2. Type2:半虚拟化

为了改善生产环境中的速度问题,出现了基于CPU虚拟化技术(HVM)的KVM Kernal-based Virtual Machine 和 半虚拟化Paravirtualization方式的Xen。因为这种方式不是虚拟化整个操作系统,所以大大提高了性能。


我们再回到Docker,然而无论是全虚拟化或者版虚拟化,都需要额外安装OS,所以都会有性能问题。后来在Linux上出现了基于contro groups和namespace的Linux Container,可以单纯的对进程进行隔离。而Docker的Container也是基于LXC发展而来。



【Image】

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


比如,一个镜像可以包含一个完整的ubuntu操作系统环境,里面仅安装了apache或用户需要的其他应用程序。镜像可以用来创建Docker容器。另外Docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人哪里下载一个已经做好的镜像来直接使用。


二. Docker 为什么这么火?

Docker之所以这么火是因为又很多的优势


1. 更高效的利用系统资源

docker对系统资源的利用率更高,无论是应用执行速度,内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机往往可以运行更多数量的应用。


2. 更快速的启动时间

传统的虚拟机技术启动应用服务往往需要数分钟,而docker容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级,甚至毫秒级的启动时间,大大的节约了开发测试,部署的时间。


3. 一致的运行环境

开发过程中常见的一个问题是环境一致问题,由于开发环境,测试环境,生产环境不一致,导致有些bug并未在开发过程中发现。而docker的镜像提供了除内核外完整的运行时环境,确保环境一致性,从而不会在出现“这段代码在我机器上没问题”这类问题。


4. 持续支付和部署

对开发和运维人员来说,最希望就是一次创建和部署,可以在任意的地方运行。(定制应用镜像来实现集成、持续支付、部署。开发人员可以通过dockerfile来进行镜像构建,并结合持续集成系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署系统进行自动部署)。而且使用dockerfile使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。


5. 更轻松的迁移

由于docker确保了执行环境的一致性,使得应用的迁移更加的容易。docker可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云、甚至是笔记本、其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。


6. 更轻松的维护和拓展

docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得十分简单。此外,docker团队同各个开源项目团队一起维护了一大批高质量的官网镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。


三. Docker 安装

Docker是基于Linux Container的技术,所以在MacOS或者Window(Win10)上安装Docker时需要安装Vrtual Machine。


【Linux安装】

在Linux上最简单的安装方式是用自动安装脚本

curl -fsSL https://get.docker.com/ | sudo sh


出现如下画面需要等几分钟...


安装完毕后可确认版本


【Windows安装】

前提:Win10


1. 客户端下载

在Docker hub中下载安装包

https://hub.docker.com/editions/community/docker-ce-desktop-windows

2. 程序安装

Docker desktop版,需要启动微软的 Hyper-V(Virtualization服务),且启动后本机中的VirtualBox等工具会失效,不可使用


3. Virtualization激活

进入BIOS界面,把Virtualization从默认的disable改为enable


4. 安装完毕

可以查找到应用


在Task bar可以看到运行图标


5. 用Powershell 查看Docker版本


查看container及image


四. 用Docker Hub image 安装 Tensorflow和Jupyter notebook

用Docker Hub image部署应用真的非常简单,仅需几条命令。


1. 从 Docker Hub pull image到本地


2. 确认本地image


3. image执行生成container


4. 登陆jupyter note并粘贴token


5. Jupyter note登陆完毕

今天就到这里,谢谢!


参考文献:

Docker 官网:https://docs.docker.com/engine/docker-overview/

文章转载自火火日记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论