美文网首页
Docker基本介绍

Docker基本介绍

作者: 我可能是个假开发 | 来源:发表于2023-06-01 22:39 被阅读0次

    一、定义

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
    解决了运行环境和配置问题的软件容器, 方便做持续集成并有助于整体发布的容器虚拟化技术。
    容器是完全使用沙箱机制,相互之间不会有任何接口。

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

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

    二、核心概念

    1.Docker镜像

    类似于虚拟机镜像,可以理解为一个面向Docker引擎的只读模板,包含了文件系统。
    例如:一个镜像可以包含一个完整的Ubuntu操作系统环境,可以把它称为一个Ubuntu镜像。镜像也可以安装了Apache应用程序,可以把它称为一个Apache镜像。
    镜像是创建Docker容器的基础。通过版本管理和增量的文件系统,Docker提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用镜像,并通过简单的命令就可以直接使用。

    2.Docker容器

    Docker容器(Container)类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。
    容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。
    可以把容器看做一个简易版的Linux系统环境(包括root用户权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序打包而成的应用盒子。
    镜像自身是只读的。容器从镜像启动的时候,Docker会在镜像的最上层创建一个可写层,镜像本身将保持不变。

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

    3.Docker仓库

    https://hub.docker.com/

    Docker仓库(Repository)类似于代码仓库,是Docker集中存放镜像文件的场所。
    注册服务器:Registry
    注册服务器是存放仓库的地方,其上往往放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。
    根据所存储的镜像公开分享与否,Docker仓库可以分为

    • 公开仓库(Public):最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括Docker Pool等,可以提供稳定的国内访问。
    • 私有仓库(Private):用户如果不希望公开分享自己的镜像文件,Docker也支持用户在本地网络内创建一个只能自己访问的私有仓库。
      当用户创建了自己的镜像之后就可以使用push命令将它上传到指定的公有或者私有仓库。这样用户下次在另外一台机器上使用该镜像时,只需将其从仓库上pull下来就可以了。

    4.总结

    Docker 本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是image镜像文件。只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。image文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。

    • 镜像文件:image 文件生成的容器实例,本身也是一个文件,称为镜像文件
    • 容器实例:一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器
    • 仓库:存放镜像的地方,可以把镜像发布到仓库中,需要的时候再从仓库中拉下来

    三、Docker安装

    官网:www.docker.com
    Linux安装:

    $ sudo wget -qO- https://get.docker.com/ | sh 
    安装docker本身
    sudo:当前用户是普通用户,但执行该命令时使用root身份执行
    wget:命令行下载工具
    -q:使wget输出不要那么多
    O-:把wget的输出直接输出到标准输出,而不是输出到文件
    |:管道 
    | sh:把输出交给sh
    
    $ sudo usermod -aG docker xxx  
    允许非root用户(非superuser)来运行docker
    修改用户组,把这个用户组加入到docker组里面(用户如果在docker组里,则可以不用sudo,不需要root就可以执行docker命令)
    

    检查是否安装成功:docker info
    如果执行此命令报错,则是docker没有启动,在centos中,使用

    service docker start
    
    安装docker.png 查看信息.png

    四、Docker架构

    1.Docker结构

    image.png

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

    docker架构.png
    • Docker host:进行docker操作的宿主机
    • Docker Daemon:负责各种各样的docker操作,比如下载docker镜像,运行一个容器,客户端通过命令,把命令交给docker daemon,由docker Daemon来做实际的操作。
    • Registry:互联网的saas服务,daemon可以和registry交互,比如获取一个image,或者push一个image;是Docker的镜像存储服务端。
    架构.png

    客户端和守护进程进行操作,把命令送给守护进程,守护进程拖取镜像,运行容器并和远端的镜像仓库进行交互。

    2.Docker运行的基本流程

    docker架构.png
    • 1.用户是使用 Docker Client与 Docker Daemon 建立通信,并发送请求给后者
    • 2.Docker Daemon作为 Docker 架构中的主体部分,首先提供 Docker Server 的功能使其可以接受 Docker Cient 的请求。
    • 3.Docker Engine 执行 Docker 内部的一系列工作,每一项工作都是以一个 Job 的形式的存在。
    • 4.Job 的运行过程中,当需要容器镜像时,则从 Docker Registy 中下载镜像,并通过镜像管理动 Graph driver将下载镜像以Graph的形式存储
    • 5.当需要为 Docker创建网络环境时,通过网络管理驱动 Network driver 创建并配置 Docker容器网络环境。
    • 6.当需要限制 Docker 容器运行资源或执行用户指令等操作时,则通过 Exec driver来完成。
    • 7.Libcontainer是一项独立的容器管理包,Network driver以及Exec driver都是通过Libcontainer来实现具体对容器进行的操作。

    相关文章

      网友评论

          本文标题:Docker基本介绍

          本文链接:https://www.haomeiwen.com/subject/nvdpedtx.html