当前位置: 代码网 > 服务器>服务器>Linux > Docker基本介绍

Docker基本介绍

2024年08月01日 Linux 我要评论
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。解决了运行环境和配置问题的软件容器, 方便做持续集成并有助于整体发布的容器虚拟化技术。容器是完全使用沙箱机制,相互之间不会有任何接口。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

一、定义

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来实现具体对容器进行的操作。
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com