• Docker技术使用场景主要特性等相关资源整理
  • OpenStack与Docker集成:使用openstack管理docker
  • Docker的隔离性和安全性问题
  • docker使用的技术之Container内核原理介绍
  • Docker详细的应用与实践架构举例说明
  • ​基于Docker的大数据开发实践
  • ​docker之轻量虚拟化技术——docker实战分享
  • 什么是docker?Docker技术详细介绍
  • 基于Docker容器的云计算平台搭建实战
  • docker和VM虚拟机的区别以及如何用docker搭建基础设施
  • ​Docker容器术语以及docker的特点
  • Docker & Docker Hub
  • Introduction to Swarm, a Docker-native clustering system
  • Docker、Kubernetes、Neutron中的网络简介
  • ​James Turnbull:《The Docker Book》
  • Docker on AWS:Running Containers in the Cloud
  • Introduction docker Container Security
  • docker应用之利用Docker构建自动化运维
  • Docker基本原理简介和详细安装步骤介绍
  • Docker 基础用法和常用命令及选项介绍
  • Docker 端口映射,端口绑定操作介绍
  • Docker 四种网络模式及网络配置详细介绍
  • docker下通过Dockerfile指令构建镜像的指令选项介绍
  • ​Docker 容器数据管理,链接容器,构建私有库
  • Docker容器分析----好处和缺点介绍
  • 如何实现 coreos 下Docker 与分布式数据库结合
  • 应对 Docker 网络功能难题的挑战与思考
  • Docker着手将容器部署到私有云与公有云
  • 为现在和未来改善Docker安全
  • Docker容器与企业存储的结合思考
  • Docker监控以及cAdvisor和Prometheus监控工具的对比
  • ​有关Docker的八个令人难以置信的事实
  • ​部署 Docker 前必须问自己的四个问题
  • 程序猿,千万别说你不了解Docker!
  • 将要改变IT世界的的docker技术是什么?
  • Docker支持更深入的容器日志分析
  • Docker宣布支持Windows 10和Azure Windows Server
  • Docker 1.12.0到底有哪些不同之处
  • 云计算之Docker容器技术如何落地?
  • Docker v1.12.0-rc5 普通版实验版本下载,高级容器引擎
  • 针对Docker容器的监控指标
  • ​Docker 的步伐:DevOps 与 OS 化
  • 八个问题帮你快速了解Docker
  • ​什么是Docker以及docker的 诞生技术演进
  • ​Docker v1.12.1-rc1各种版本发布下载,高级容器引擎
  • ​Docker 1.12.0 改进了服务的负载均衡参数
  • Windows下Docker应用部署相关问题详解
  • Docker1.12 引擎使用体验 ​
  • Docker官方镜像将会使用Alpine Linux替换Ubuntu
  • ​Windows Server 2016提供Docker原生运行的企业级支持
  • ​传统应用的docker化迁移
  • Docker携手Windows Server
  • Docker扁平化网络设计与实现
  • Plesk 中操作和设置 Docker 容器
  • 如何通过 Docker 在 Linux 上托管 .NET Core
  • Docker 1.12.4应用容器引擎发布及下载地址
  • Docker v1.13.0 应用容器引擎正式版发布及下载地址
  • docker源码分析之容器日志处理与log-driver实现
  • 如何在win7,win8下面启动docker
  • win7,win8安装Docker具体过程
  • win7, win8安装docker需要了解的概念
  • win7,win8安装docker的依赖条件
  • Docker Toolbox 介绍
  • Arch下面安装启动及删除docker介绍
  • Debian 7(Wheezy)下面如何安装docker
  • Debian 8(Jessie )下面如何安装docker
  • 红帽RHEL下如何删除docker详细步骤介绍
  • 红帽RHEL下面设置docker服务自动启动
  • linux下不使用sudo命令执行docker的操作步骤
  • 红帽redhat下通过脚本和yum安装docker容器引擎的详细步骤
  • 红帽RHEL下安装docker依赖性检查
  • Ubuntu Vivid 15.04 下面安装docker的详细步骤
  • Ubuntu Trusty 14.04 (LTS) 下面安装docker及依赖关系检查
  • Ubuntu Raring 13.04 和 Saucy 13.10 (64 bit)下面安装docker
  • Ubuntu Precise 12.04 (LTS) (64-bit)下面安装docker
  • Docker支持的安装方式
  • 通过docker ps命令检查运行中的docker镜像
  • 关于docker入门教程
  • 通过docker search命令搜索可用docker镜像
  • 在docker容器中运行hello world!
  • 在docker容器中通过apt-get安装新的程序
  • 通过docker commit命令保存对docker容器的修改
  • 通过docker run命令运行新的docker镜像
  • 准备学习docker: docker version命令查看版本
  • 什么是Docker?Docker通常用于如下场景
  •  
    当前位置:  教程>docker中文入门学习手册

    Docker基本原理简介和详细安装步骤介绍

     
    分享到:
        发布时间:2017-2-20  


        本文导语: Docker基本原理简介和详细安装步骤介绍一、Docker 简介Docker 两个主要部件:Docker: 开源的容器虚拟化平台Docker Hub: 用于分享、管理 Docker 容器的 Docker SaaS 平台 --Docker HubDocker 使用客户端-服务器 (C/S) 架构模式。Docker 客户端会与...

    Docker基本原理简介和详细安装步骤介绍

    一、Docker 简介

    Docker 两个主要部件:

    Docker 使用客户端-服务器 (C/S) 架构模式。Docker 客户端会与 Docker 守护进程进行通信。Docker 守护进程会处理复杂繁重的任务,例如建立、运行、发布你的 Docker 容器。Docker 客户端和守护进程可以运行在同一个系统上,当然你也可以使用 Docker 客户端去连接一个远程的 Docker 守护进程。Docker 客户端和守护进程之间通过 socket 或者 RESTful API 进行通信。

    Docker基本原理简介和详细安装步骤介绍

    1.1 Docker 守护进程

    如上图所示,Docker 守护进程运行在一台主机上。用户并不直接和守护进程进行交互,而是通过 Docker 客户端间接和其通信。

    1.2 Docker 客户端

    Docker 客户端,实际上是 docker 的二进制程序,是主要的用户与 Docker 交互方式。它接收用户指令并且与背后的 Docker 守护进程通信,如此来回往复。

    1.3 Docker 内部

    要理解 Docker 内部构建,需要理解以下三种部件:

    Docker 镜像

    Docker 镜像是 Docker 容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成。Docker 使用 UnionFS 来将这些层联合到单独的镜像中。UnionFS 允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。正因为有了这些层的存在,Docker 是如此的轻量。当你改变了一个 Docker 镜像,比如升级到某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做),只是一个新 的层被添加或升级了。现在你不用重新发布整个镜像,只需要升级,层使得分发 Docker 镜像变得简单和快速。

    Docker 仓库

    Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。同样的,Docker 仓库也有公有和私有的概念。公有的 Docker 仓库名字是 Docker Hub。Docker Hub 提供了庞大的镜像集合供使用。这些镜像可以是自己创建,或者在别人的镜像基础上创建。Docker 仓库是 Docker 的分发部分。

    Docker 容器

    Docker 容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的。Docker 容器可以运行、开始、停止、移动和删除。每一个 Docker 容器都是独立和安全应用平台,Docker 容器是 Docker 的运行部分。

    1.4 libcontainer

    docker 从 0.9 版本开始使用 libcontainer 替代 lxc,libcontainer 和 linux 系统的交互如下:

    Docker基本原理简介和详细安装步骤介绍

    1.5 命名空间Namespaces

     pid namespace

    不同用户的进程就是通过 pid namespace 隔离开的,且不同 namespace 中可以有相同 PID。具有以下特征:

    • 每个 namespace 中的 pid 是有自己的 pid=1 的进程(类似 /sbin/init 进程)

    • 每个 namespace 中的进程只能影响自己的同一个 namespace 或子 namespace 中的进程

    • 因为 /proc 包含正在运行的进程,因此在 container 中的 pseudo-filesystem 的 /proc 目录只能看到自己 namespace 中的进程

    • 因为 namespace 允许嵌套,父 namespace 可以影响子 namespace 的进程,所以子 namespace 的进程可以在父 namespace 中看到,但是具有不同的 pid

    参考文档Introduction to Linux namespaces – Part 3: PID

    mnt namespace

    类似 chroot,将一个进程放到一个特定的目录执行。mnt namespace 允许不同 namespace 的进程看到的文件结构不同,这样每个 namespace 中的进程所看到的文件目录就被隔离开了。同 chroot 不同,每个 namespace 中的 container 在 /proc/mounts 的信息只包含所在 namespace 的 mount point

    net namespace

    网络隔离是通过 net namespace 实现的, 每个 net namespace 有独立的 network devices, IP addresses, IP routing tables, /proc/net 目录。这样每个 container 的网络就能隔离开来。 docker 默认采用 veth 的方式将 container 中的虚拟网卡host 上的一个 docker bridge 连接在一起。

    参考文档:Introduction to Linux namespaces – Part 5: NET

    uts namespace

    UTS ("UNIX Time-sharing System") namespace 允许每个 container 拥有独立的 hostnamedomain name, 使其在网络上可以被视作一个独立的节点而非 Host 上的一个进程。

    参考文档:Introduction to Linux namespaces – Part 1: UTS

    ipc namespace

    container 中进程交互还是采用 Linux 常见的进程间交互方法 (interprocess communication - IPC), 包括常见的信号量消息队列共享内存。然而同 VM 不同,container 的进程间交互实际上还是 host 上具有相同 pid namespace 中的进程间交互,因此需要在IPC资源申请时加入 namespace 信息 - 每个 IPC 资源有一个唯一的 32bit ID。

    参考文档:Introduction to Linux namespaces – Part 2: IPC

    user namespace

    每个 container 可以有不同的 user 和 group id, 也就是说可以以 container 内部的用户在 container 内部执行程序而非 Host 上的用户。

    有了以上 6 种 namespace 从进程、网络、IPC、文件系统、UTS 和用户角度的隔离,一个 container 就可以对外展现出一个独立计算机能力,并且不同 container 从 OS 层面实现了隔离。 然而不同 namespace 之间资源还是相互竞争的,仍然需要类似 ulimit 来管理每个 container 所能使用的资源 - cgroup

    Reference

    1.6 资源配额「cgroups

    cgroups 实现了对资源的配额和度量。 cgroups 的使用非常简单,提供类似文件的接口,在 /cgroup 目录下新建一个文件夹即可新建一个 group,在此文件夹中新建 task 文件,并将 pid 写入该文件,即可实现对该进程的资源控制。具体的资源配置选项可以在该文件夹中新建子 subsystem ,{子系统前缀}.{资源项} 是典型的配置方法, 如 memory.usageinbytes 就定义了该 group 在 subsystem memory 中的一个内存限制选项。 另外,cgroups 中的 subsystem 可以随意组合,一个 subsystem 可以在不同的 group 中,也可以一个 group 包含多个 subsystem - 也就是说一个 subsystem。

    • memory

      • 内存相关的限制

    • cpu

      • 在 cgroup 中,并不能像硬件虚拟化方案一样能够定义 CPU 能力,但是能够定义 CPU 轮转的优先级,因此具有较高 CPU 优先级的进程会更可能得到 CPU 运算。 通过将参数写入 cpu.shares ,即可定义改 cgroup 的 CPU 优先级 - 这里是一个相对权重,而非绝对值

    • blkio

    • devices

    参考文档:how to use cgroup

    二、Docker 安装

    docker 的相关安装方法这里不作介绍,具体安装参考 官档

    获取当前 docker 版本


    $ sudo docker version
    Client version: 1.3.2
    Client API version: 1.15
    Go version (client): go1.3.3
    Git commit (client): 39fa2fa/1.3.2
    OS/Arch (client): linux/amd64
    Server version: 1.3.2
    Server API version: 1.15
    Go version (server): go1.3.3
    Git commit (server): 39fa2fa/1.3.2



      您可能感兴趣的文章:

    • 本站(WWW.169IT.COM)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
      本站(WWW.169IT.COM)站内文章除注明原创外,均为转载,整理或搜集自网络.欢迎任何形式的转载,转载请注明出处.
      转载请注明:文章转载自:[169IT-IT技术资讯]
      本文标题:Docker基本原理简介和详细安装步骤介绍
    相关文章推荐:


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2017,169IT.COM,E-mail:www_169it_com#163.com(请将#改为@)

    浙ICP备11055608号