Docker入门【二】基本概念

      Docker 是 PaaS(Platform as a Service平台即服务) 提供商 dotCloud 开源的高级容器引擎,作为软件部署解决方案、可以将任何应用包装在Linux container容器中运行的工具。源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。它作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。主要有镜像(Image),容器(Container),仓库(Repository)三大重要概念。

【1】什么是docker

     Docker通过客户端client来执行命令到守护进程Daemon从而操作docker的容器,而容器是通过镜像创建的,镜像是存储在仓库中的registry。

-Client 客户端   通过客户端执行命令,传给服务的守护进程,然后命令执行的结果传递给client。
-Daemon 守护进程  linux中对docker的支持控制作用,一个守护进程可以为多个进程进行守护。
-Image镜像,层叠只读文件系统,容器的基础。构建打包状态引导文件bootfs,
   然后rootfs系统基础镜像系统也是只读状态,联合加载一次加载多个文件系统,叠加在一起。一个镜像可以放在另一个镜像里面。
-Container容器,通过镜像来进行启动,可以运行一个或者多个进程。是镜像执行基本单元。
   在最顶部镜像系统,加载一个可写层。写时复制。
-Registry仓库,用来保存用户构造的镜像,分为公有和私有。Docker Hub共有类似github用来存放镜像
DOCKER的基本组成

相关资料:

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

手册:https://docs.docker.com/get-started/

中文网:http://www.docker.org.cn/

菜鸟教程:https://www.runoob.com/docker/docker-tutorial.html

【2】什么是容器Container

-为什么有容器
	虚拟机virtual machine,之前比如我们利用VMware或者是virtualbox自己创建一个linux虚拟机,
可以在里面肆意玩耍,在window下看起来我们好像真的有一个linux系统,虚拟出来的感觉和真实差不多,
但是会占用我们资源cpu,你可以想一想,你的电脑运行可以同时运行几个虚拟机,会不会卡到爆。
另外是启动的比较慢,就是类似你开机一样,打开虚拟机也需要一定时间,相当于再开启一个系统。
	那么既然这么笨拙,随着时代的发展,有一种新的技术Linux Containers容器也就是LXC。
所以说到容器也就是针对linux的。它可不是来模拟一个操作系统,
而且利用隔离特性,让不同容器进程互相感知不到,它接触的资源都是虚拟机,
从而实现更棒的虚拟化,LXC是进程级别的虚拟化。
    
-它是一种虚拟化方案
    -依托于Linux操作系统级别虚拟化
    -只能运行相同相似的内核操作系统
    -依赖于Linux内核:Namespace和Cgroups(Control Groups)
    -Namespace在代码中表现的-代码隔离。在操作系统中利用其系统资源的隔离,比如进程,网络,文件等。
-为了实现这种轻量级的虚拟化技术,隔离空间Namespace
	-docker让容器中的进程误以为是一个独立的空间。
	-Pid(Process ID) 进程隔离
    -Net(Network) 网络接口
    -Ipc(InterProcess Communication) 进程通信
    -Mnt(Mount) 挂载点
    -Uts(Unix TimeSharing System) 隔离内核版本标识
-另外需要隔离进程分配资源,Control Group控制组
     -资源限定 master控制
     -优先级设定
     -资源计量
     -资源控制 

【容器的能力】
	文件系统隔离:每个容器都是有自己root文件系统。
    进程隔离:每个容器都运行在自己的进程环境中。
    网络隔离:每个容器的虚拟网络接口和IP地址都是分开的。
    资源隔离和分组:使用cgroups将cpu和内存之类的资源独立分给每个docker容器。
【优点】
	启动快:容器里面的应用,直接就是底层系统的一个进程,类似你打开QQ
	资源少: 容器不必占用不需要的资源,依赖宿主机的操作系统,多个容器可以共享资源。
	体积小:容器文件比虚拟机文件要小很多,只要包含用到的组件即可。
    
【原理】
	Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。
	docker管理容器的引擎,基于Linux系统,可以开启多个容器,用了个障眼法,
    各个容器之间是相互隔离开来,进程,文件,网络等,但是实际上你在宿主机当中是可以看到他们的。
    但是他们共用一个内核系统。所以对于mac或者win都必须启动一个虚拟机来提供Linux的内核
      

【3】什么是镜像Image

镜像(Image)就是一堆只读层(read-only layer)的统一视角。作为容器的基石。
它具有层叠的只读文件系统和联合加载(union mount)的技术。
	
	统一文件系统Union FS(union file system)技术能够将不同的层整合成一个文件系统,
为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。
除了最下面的一层镜像,其他的层的镜像都会有一个指针指向下一层。
所以严格来说,镜像并非是像一个 ISO 那样的打包文件,镜像只是一个虚拟的概念,
其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。
	镜像的存储位置:/var/lib/docker/
	
	为什么强调只读?
	对于docker的镜像和容器,特点就是,镜像作为基石,不能进行修改。
用户的操作层在镜像之上的容器,容器是一个可读可写的。
因此可以有这样一个结论:镜像+读写层=>容器 
	镜像使用的是分层存储,容器也是如此。每一个容器运行时,是以镜像为基础层,
在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为 容器存储层。
	
	镜像和容器的关系就像是面向对象程序设计中的 类 和 实例 一样,
镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
	
	容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。
因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。
容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。

【4】什么是仓库Registry

仓库就是集中存放镜像的地方,分为公共仓库和私有仓库。
 每个仓库可以包含多个 标签(Tag);每个标签对应一个镜像。
 通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。
我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。
如果不给出标签,将以 latest 作为默认标签。
 例如:Ubuntu:16.04那么前面Ubuntu就是镜像名,后面16.04就是tag标签,
如果不加标签,默认会用最新的ubuntu:latest
 仓库名经常以 两段式路径 形式出现,
比如 tacks/web,前者往往意味着 Docker Registry 多用户环境下的用户名,后者则往往是对应的软件名。

【5】client与daemon

【C/s模式】
命令行交互    
    Docker的守护进程运行在宿主机上服务端server,
通过Docker的客户端命令行接口向Docker服务器发送命令,经过处理后将结果返回给客户端。
Remote API交互
	docker客户端也可以由用户编写的程序来与守护进程通信
【通信】
    Docker使用socket进行客户端和服务端的连接。
    -c/s的连接方式
        unix sock通信 /var/run/docker.socker(默认通信方式)
        tcp host:port通信 
        fd sockefd通信
        
    Docker的客户端与服务端可以在同一宿主机,可以在不同主机上

命令行交互

Remote API交互

客户端与服务端通信

【小结】

                Docker 把应用程序及其依赖,打包在 image 文件里面,通过镜像才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。而镜像被存储在仓库Registry中,我们可以提交到自己私有的,也可以提交到公共仓库供大家使用。总是,如果你会用docker,那么构建你的服务将会很方便。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值