Docker的基本概念填坑

Docker的基本概念填坑

1. Docker的基本组成

  • Docker Client客户端
  • Docker Daemon守护进程
  • Docker Image镜像
  • Docker Container容器
  • Docker Registry仓库

Docker是C/S架构的程序。Docker客户端向Docker的服务器端(也就是守护进程)发出请求,守护进程处理完所有工作并返回结果。Docker客户端对服务器的访问既可以在本地,也可以通过远程。

Docker Image镜像是一个层叠的只读文件系统,例如



它的最低端是个引导文件系统bootfs(就像典型代表的linux引导文件系统),Docker用户永远不会跟底层文件系统有交互

Docker文件系统第二层是rootfs文件系统,位于bootfs之上,可以是一种或者多种的操作系统,比如ubuntu或者centos。在Docker里rootfs永远是只读状态。<————-基础镜像

并且Docker会利用联合加载技术(union mount)在rootfs之上加载更多的只读文件系统。联合加载指的是一次加载多个文件系统,但是在外面看起来只能够看到一个文件系统。联合加载会将对各层文件系统叠加到一起,这样最终的文件系统会包含所有的底层文件和目录。

Docker Container容器通过镜像启动



当镜像启动的时候,就用刚才我们介绍的镜像文件的结构,Docker会在镜像文件的最顶层加载一个读写结构——可写层。当文件系统发生变化,这些变化都会应用到这一层上。比如想要修改一个文件,首先会从下面的只读层复制到读写层,然后再修改。该文件的只读版本依然存在,但是会被修改后的版本所隐藏——这就是Docker中的一个重要机制写时复制(copy on write)。

Docker Registry仓库,分为:公有、私有。Docker公司提供一个公有的仓库,叫做Docker Hub,我们可以在其上面注册账号,分享并保存自己的镜像。

Docker在线演示地址:

https://www.docker.com/tryit/

基本操作:

1.docker version #查看Docker的版本
2.docker search tutorial #通过仓库查找一个叫tutorial的镜像文件
3.docker pull learn/tutorial #下载该镜像文件,这里的镜像文件名就是上一步在仓库中查找到的镜像文件名,它包含了用户名和镜像名
4.docker run learn/tutorial echo 'hello world' #通过run命令启动一个容器,并且输出'hello world'
5.docker run learn/tutorial apt-get install -y ping #在容器中安装ping命令
6.docker ps -l #用ps命令来查看有哪些容器
7.docker commit id编号 learn/ping #对新更改的容器保存为一个镜像,learn/ping是新名字
8.docker run learn/ping ping www.google.com #在新保存的容器中运行ping谷歌的网站
9.docker inspect id编号 #查看容器信息
10.docker images #查看有哪些镜像文件
11.docker push learn/ping #将镜像文件保存到docker hub上

2. Docker容器的相关技术简介

Docker依赖于Linux内核特性:

  • Namespaces 命名空间
  • Control groups (cgroups) 控制组

Namespaces命名空间

1.编程语言
2. 封装------->代码隔离
3.操作系统
4. 系统资源的隔离(进程、网络、文件系统....)

对于Docker来说,它使用了5种命令空间:

  • PID(Process ID) 进程隔离
  • NET(Network) 管理网络接口
  • IPC(InterProcess Communication) 管理跨进程通信的访问
  • MNT(Mount) 管理挂载点
  • UTS(Unix Timesharing System) 隔离内核和版本标识

Docker利用Control groups控制组,用来分配资源。

cgroups功能:

  • 资源限制
  • 优先级设定
  • 资源计量
  • 资源控制

这两个特性带给Docker容器哪些能力?

  • 文件系统隔离:每个容器都有自己的root文件系统
  • 进程隔离:每个容器都运行在自己的进程环境中
  • 网络隔离:容器间的虚拟网络接口和IP地址都是分开的
  • 资源隔离和分组:使用cgroups将CPU和内存之类的资源独立分配给每个Docker容器

Docker基本概念填坑的更多相关文章

  1. 【docker】docker初试与填坑

    docker是最近很流行的部署方式,最近尝试之前的项目都转移到docker上运行,下面是碰到的一些坑和解决方案. 网络问题 因为国内的原因,docker pull 镜像的时候经常碰到连不上或者速度极慢 ...

  2. 老司机实战Windows Server Docker:1 初体验之各种填坑

    前言 Windows Server 2016正式版发布已经有近半年时间了,除了看到携程的同学分享了一些Windows Server Docker的实践经验,网上比较深入的资料,不管是中文或英文的,都还 ...

  3. CentOS7.3利用kubeadm安装kubernetes1.7.3完整版(官方文档填坑篇)

    安装前记: 近来容器对企业来说已经不是什么陌生的概念,Kubernetes作为Google开源的容器运行平台,受到了大家的热捧.搭建一套完整的kubernetes平台,也成为试用这套平台必须迈过的坎儿 ...

  4. windows下jenkins常见问题填坑

    没有什么高深的东西,1 2天的时间大多数人都能自己摸索出来,这里将自己遇到过的问题分享出来避免其他同学再一次挖坑. 目录 1. 主从节点 2. Nuget自动包还原 3. powershell部署 4 ...

  5. React Native填坑之旅--重新认识RN

    如同黑夜里的一道光一样,就这么知道了F8. F8是每年一次Facebook每年一次的开发者大会.每次大会都会release相应的APP,iOS.Android都有.之前都是用Native开发的,但是2 ...

  6. React Native填坑之旅--Navigation篇

    React Native的导航有两种,一种是iOS和Android通用的叫做Navigator,一种是支持iOS的叫做NavigatorIOS.我们这里只讨论通用的Navigator.会了Naviga ...

  7. 【过程改进】 windows下jenkins常见问题填坑

    没有什么高深的东西,1 2天的时间大多数人都能自己摸索出来,这里将自己遇到过的问题分享出来避免其他同学再一次挖坑. 目录 1. 主从节点 2. Nuget自动包还原 3. powershell部署 4 ...

  8. Node填坑教程——前言

    Node是什么? Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同时连接到一个(只有一个)物 ...

  9. 持续集成 windows下jenkins常见问题填坑

    [过程改进]持续集成 windows下jenkins常见问题填坑 没有什么高深的东西,1 2天的时间大多数人都能自己摸索出来,这里将自己遇到过的问题分享出来避免其他同学再一次挖坑. 目录 1. 主从节 ...

随机推荐

  1. 白话JAVA守护线程

    OneCoder(苦逼Coder)原创,转载请务必注明出处: http://www.coderli.com/archives/daemon-thread-plain-words/ 关于“白话”:偶然想 ...

  2. DB2 runstats和reorg操作

    [db2inst1@xifenfei ~]$ db2 connect to xff      Database Connection Information    Database server    ...

  3. 关于XMLHttpRequest对象的responseText属性

      下面的代码是利用Ajax实现在输入框中写入一个ID号,即时的从数据库中取得数据并在页面无刷新的情况下显示. Ajax.aspx的代码: <%@ Page Language="C#& ...

  4. Android简单登录系统

    很长时间没有写博客了,最近一直在写android for gis方面的项目.不过这篇博客就不写gis方面的了,今天刚刚做的一个简单的android登录系统.数据库是android自带的sqlite,s ...

  5. C++中socket编程

    原文:http://blog.csdn.net/cuiran/article/details/5854794 Server端 #include <WINSOCK2.H> #include ...

  6. AndroidUI--SlidingMenu使用例子

    SlidingMenu简介: SlidingMenu的是一种比较新的设置界面或配置界面效果,在主界面左滑或者右滑出现设置界面,能方便的进行各种操作.目前有大量的应用都在使用这一效果.如Evernote ...

  7. asp.net 2.0 Session丢失问题

    可行的解决方法(本人已用): 1.Web.config文件修改sessionstate模式(默认为InProc) <sessionState mode="/> 2.开启ASP.N ...

  8. 转:消除SDK更新时的“https://dl-ssl.google.com refused”错误

    消除SDK更新时,有可能会出现这样的错误: Download interrupted: hostname in certificate didn't match: <dl-ssl.google. ...

  9. win server 2003 将MBR转为GPT突破硬盘2TB的限制(附微软磁盘科普)

    备注:https://technet.microsoft.com/zh-cn/library/cc773223.aspx GUID 分区表 与支持最大卷为 2 TB (terabytes) 并且每个磁 ...

  10. 安装ConEmu

    ConEmu可以提供比Windows自带控制台(cmd.exe)程序更多的功能,从其官网下载安装程序时选择预览版安装包(Preview, Installer)即可.