docker的基础学习(一)之daocker的介绍

什么是docker

Docker 是一个开源的应用容器引擎,基于 LCX容器技术使用Go 语言开发 并遵从 Apache2.0 协议开源源码在Github上。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker 包括三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

Docker 容器通过 Docker 镜像来创建。

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

Docker就算一种快速解决生成问题的一种技术手段、运行和部署应用程序的开放管理平台。

开发人员能利用docker开发和运行应用程序

运维人员能利用docker部署和管理应用程序

为什么使用docker

对于开发和运维人员来说,最希望的效果就是一次创建或者配置后,可以在任意地方、任意时间让应用正常运行,对于算法研究人员来说,可能不同的算法需要不同版本的软件,那么在同一个环境中就会存在冲突,docker 的环境隔离就可以很方便的用于不同环境的配置。具体来说,docker优势主要有以下几个方面:

  • 快速交付和部署

    使用docker,开发人员可以使用镜像快速构建一套标准的开发环境;开发完成后,测试和运维人员可以使用完全相同的环境部署代码,只要是开发测试过的代码就可以确保在生产环境无缝运行。docker可以快速创建和删除容器,实现快速迭代。

  • 高效的资源利用

    运行docker容器不需要额外的虚拟化管理程序的支持,docker是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低。

  • 轻松的迁移和扩展

    docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、服务器等,同时支持主流的操作系统发行版本,这种兼容性让用户可以在不同平台间轻松的迁移应用。

  • 简单的更新管理

    使用Dockerfile生成镜像的方式,只需要小小的配置修改,就可以替代以往大量的更新工作,所有的修改都以增量的方式进行分发和更新,从而实现自动化且高效的容器管理。

Docker主要解决的问题

1、解决了运行环境不一致所带来的问题,Docker会将配置文件进行统一管理;

2、解决耗内存问题,Docker会一开始就为每个程序指定内存分配;

3、让快速扩展,弹性伸缩变得简单

剖析Docker架构

通过前面启动Tomcat容器的过程,我们可以看到Docker三大组件的身影:

  1. 镜像(image)
  2. 容器(container)
  3. 仓库(repository)

让我们来看看Docker的架构图

Docker 采用 (C/S) 架构模式的应用程序

Client dockerCLI:客户端docker命令行

RESTAPI:一套介于客户端与服务段之间进行通信并指示其执行的接口

Server docker daemon:服务端dacker守护进程等待客户端发送命令来执行

Docker 核心技术

IMAGE-镜像

CONTAINER-容器

DATA VOLUMES-数据卷

NETWORK-网络

在这里插入图片描述

Docker客户端(docker client)

Docker客户端是用户与Docker进行交互的最主要方式当在终端输入dockers命令时,对应的就会在服务端产生对应的作用,并把结果返回给客户端。Docker Client除了连接本地服务端,还可以通过更改或者指定DOCKER_HOST连接远程服务端。

Daocker服务端(docker daemon)

docker daemon就是Docker的服务端,它负责监听DockerApi(Docker Client)请求并管理Docker对象(Docker Server),如镜像、容器、网络、数据卷等

docker registry

俗称Docker仓库,专门用于存储镜像的云服务环境。

Docker Hub就算一个公共存放镜像的地方,类似于GitHub存储代码文件。同样的也可以类似GitHub那样搭建私有的仓库。

Docker对象(Docker Objects)

镜像:一个Docker的可执行文件,其中包括应用程序所需要的所有代码内容、依赖库、环境变量和配置文件等。

容器:镜像被运行起来后的实例

网络:外部或者容器间如何互相访问的网络方式,如host方式

数据卷:容器和主机之间、容器和容器之间共享存储方式类似于虚拟机和主机之间的共享文件目录

官方资料

Docker官网:https://www.docker.com/

Github Docker源码:

https://docker-doc.readthedocs.io/zh_CN/latest/

 Docker 的设计特点包括如下:

  • 轻量

    在一台机器上运行的多个 Docker 容器可以共享这台机器的操作系统内核;能快读的启动,而只需占用很少的计算和内存资源。镜像是通过文件系统层进行构造的,并共享一些公共文件,这样就能尽量降低磁盘用量,并能更快地下载镜像;

  • 标准

    Docker 容器基于开放式标准,能够在所有主流 Linux 版本、Microsoft Windows 以及包括 VM、裸机服务器和云在内的任何基础服务设施上运行;

  • 安全

    Docker 赋予应用隔离性,不仅仅限于彼此隔离,还独立于底层的基础设施。Docker 默认提供最强的隔离,因此应用出现问题,也只是单个容器的问题,而不会波及到整台机器。

优点

启动快比虚拟机 , 可以秒级启动
对资源占用小 , 宿主机上可运行千台容器
方便用户获取 , 分布 , 和更新应用镜像 , 指令简单 , 学习费用低
通过 Dockerfile 配置文件来灵活的自动创建和部署镜像 & 容器 , 提高工作效率
Docker 除了运行其中应用外 , 基本不消耗其他系统资源 , 保证应用性能同时 ,尽量减小系统

缺点

隔离性

基于hypervisor的虚机技术,在隔离性上比容器技术要更好,它们的系统硬件资源完全是虚拟化的,当一台虚机出现系统级别的问题,往往不会蔓延到同一宿主机上的其他虚机。但是容器就不一样了,容器之间共享同一个操作系统内核以及其他组件,所以在收到攻击之类的情况发生时,更容易通过底层操作系统影响到其他容器。当然,这个问题可以通过在虚机中部署容器来解决,可是这样又会引出新的问题,比如成本的增加以及下面要提到的问题:性能。

性能

不管是虚机还是容器,都是运用不同的技术,对应用本身进行了一定程度的封装和隔离,在降低应用和应用之间以及应用和环境之间的耦合性上做了很多努力,但是随机而来的,就会产生更多的网络连接转发以及数据交互,这在低并发系统上表现不会太明显,而且往往不会成为一个应用的瓶颈(可能会分散于不同的虚机或者服务器上),但是当同一虚机或者服务器下面的容器需要更高并发量支撑的时候,也就是并发问题成为应用瓶颈的时候,容器会将这个问题放大,所以,并不是所有的应用场景都是适用于容器技术的。

存储方案

容器的诞生并不是为OS抽象服务的,这是它和虚机最大的区别,这样的基因意味着容器天生是为应用环境做更多的努力,容器的伸缩也是基于容器的这一disposable特性,而与之相对的,需要持久化存储方案恰恰相反。这一点docker容器提供的解决方案是利用volume接口形成数据的映射和转移,以实现数据持久化的目的。但是这样同样也会造成一部分资源的浪费和更多交互的发生,不管是映射到宿主机上还是到网络磁盘,都是退而求其次的解决方案。

Docker官网

https://docs.docker.com/engine/install/centos/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值