Docker 01 Introduction

Docker的组成:

  • Docker Engine,一个轻量级、强大的开源容器虚拟化平台,使用包含了工作流的虚拟化技术,帮助用户建立、并容器化一个应用。
  • Docker Hub,提供的一个SaaS服务,用来分享和管理你的程序栈

Docker的优点:

  • 应用程序快速交付
  • 部署和扩展更加简便
  • 更高的部署密度,更满的运行负载
  • 更快的部署使得管理更加简单

Docker的架构:

Docker使用CS的架构,包括Docker Client和Docker Daemon两个部分。Docker Client和Docker进行通话,Daemon完成重量级的任务,包括建立、运行、分发Docker容器。Client和Daemon可以运行在同一个物理机上,Client也可以连接一个远程的Daemon。Client和Daemon之间通过socket或者REST API进行通信。

Docker架构示意图如下:

  • Docker Daemon

运行在宿主机(host machine)上,用户不直接与Docker进行交互,而是通过Docker Client进行连接。

  • Docker Client

以docker:一个二进制文件的形式存在,是Docker的主要用户接口,它接受用户输入命令,并与Docker Daemon进行通信。

Docker的内部结构:

  • Docker images(镜像)

一个Docker Image是一个只读的模板。比如,一个镜像可以是一个包含了Apache服务器的Ubuntu操作系统,并安装了你的应用程序。镜像用来创建Docker容器。Docker提供了一种简单的方式去创建一个新的镜像,或者更新镜像,或者下载别的用户已经创建好的镜像。Docker Image是Docker的建立模块。

  • Docker registries(登记)

Docker registries管理镜像。registry对于用户上传、下载的镜像,或者标记为公有存储,或者标记为私有存储。公有的登记叫做Docker Hub。它提供了大量的现成镜像供用户使用。这些镜像可以是用户自己创建的,或者别人已经创建好的。Docker registries是Docker的发布模块。

  • Docker containers(容器)

Docker containers和文件夹类似。一个Docker容器保存一个应用程序运行所需要的一切。每个容器都是基于一个镜像创建。Docker可以被运行、开始、停止、移动、删除。每个容器是一个独立、安全的应用程序平台。Docker container是Docker的运行模块。

Docker如何工作:

  • 建立一个包含应用程序的镜像;
  • 基于建立的镜像,创建一个Docker容器来运行应用程序;
  • 可以通过公有的Docker Hub或者自己的登记来共享Docker镜像。

Docker组件如何工作:

  • Docker镜像如何工作:

我们已经看到,Docker镜像是Docker容易创建时候用到的一个只读的模板。每个镜像由若干“层”构成,Docker镜像使用UnionFS将这些“层”整合成一个镜像。UnionFS允许文件和目录使用不同的文件系统(称为“分支”),各层之间透明叠加,构成一个整体、一致的文件系统。
Docker之所有这样轻量级与这些“层”有关,当需要修改一个镜像:比如将应用更新到一个新的版本——建立了一个新的“层”。在一个虚拟机里面,需要替换整个镜像,或者整个重新建立一个镜像;而Docker只需要将该新建层添加到镜像里面,或者做“层”更新即可。这样就不需要发布一个新的镜像,只需要更新一下,这样使得发布Docker镜像更快更简单。
每个镜像都起始于一个基础镜像,比如Ubuntu,一个基础的Ubuntu镜像,fedora,一个基础的fedora镜像。也可以使用用户自己制作的镜像作为一个基础镜像,比如用户创建一个Apache镜像,可以据此创建用户的Web应用镜像。
通常,Docker从Docker Hub上获取这些基础镜像。
之后,Docker镜像基于这些基础镜像,使用一组简单的、描述性的步骤——称之为“指令”。每个指令在镜像上创建一个新的“层”。指令包括如下的动作:

  • 执行一个命令
  • 添加一个文件或目录
  • 创建一个环境变量
  • 当基于当前镜像载入一个容器时,执行那个进程

这些指令被保存在一个叫做Dockerfile的文件里。当用户请求建立一个镜像时,Docker读取这些Dockerfile,执行里面的指令,然后返回一个最终的镜像。

  • Docker登记如何工作:

Docker登记是对Docker镜像的一个管理库。当用户创建完一个Docker镜像之后,可以将镜像推送到公共的登记库Docker Hub,或者运行在防火墙内的个人登记库。
使用Docker Client可以搜索已经发布的Docker镜像,然后将镜像拖到本地的Docker host,基于这些镜像创建容器。
Docker Hub提供了公有和私有的镜像存储机制。公有镜像可以被任何人搜索、下载。私有镜像会在搜索结果中排除,并且只有你和你的用户可以下载镜像,基于他们创建容器。用户可以在这里创建一个存储计划。

  • Docker容器如何工作:

一个容器包括:操作系统、用户添加的应用、元数据。每个容器都是基于镜像创建,镜像告诉Docker:容器包含哪些内容,
容器载入时运行哪些进程,以及其他多种配置数据。Docker镜像是只读的,当Docker运行一个容器,它会在只读的镜像上面添加一个“读写层”(使用之前提到的UnionFS),应用程序可以在这一层上运行。

  • 运行一个容器的内部机制

用docker程序或者API,Docker Client通知Docker Daemon运行一个容器:

$ sudo docker run -i -t ubuntu /bin/bash

对上面的命令进行拆解:
Docker Client   — 使用docker程序启动;
                       |- 使用run通知Docker Daemon载入一个新的容器;
                       |- ubuntu,容器基于那个镜像创建;
                       |- /bin/sh,容器载入完毕后,在容器内执行什么样的命令;
在载入容器的时候,至少要告诉Docker Daemon基于那个镜像创建容器,以及容器载入后执行什么样的命令。
上面这行命令执行的时候,内部的实现机制如下:

  1. 下载ubuntu镜像:Docker检查ubuntu镜像是否存在,如果本地不存在,就从Docker Hub下载;如果已经存在,就基于本地的ubuntu镜像创建容器;
  2. 创建一个新的容器:一旦拥有了镜像,就利用镜像创建容器;
  3. 分配一个文件系统并创建一个读写层:容器在这个文件系统里面创建,并且一个读写层添加到原有的基础镜像上;
  4. 分配 网络\网桥 接口:创建一个网络接口,允许容器与本地host通信;
  5. 分配IP地址:从资源池中寻找并绑定一个可用的IP地址;
  6. 执行用户指定的进程:运行你指定的应用;
  7. 捕获并提供应用程序输出:连接并记录标准输入、输出、报错,将这些信息提供给用户,供其了解应用程序如何运行。

拥有了一个运行的容器,之后用户可以管理容器,与应用程序交互,当运行结束后,关闭、移除容器。

Docker底层技术:

Docker用Go语言编写,利用了Linux内核的一些特性来提供我们看到的一些功能。

  • Namespaces(名字空间)

Docker使用了叫做namespaces技术,来提供我们叫做容器的隔离工作区。当运行一个容器的时候,Docker为该容器创建一组namespaces。
这样就创建了一个隔离层:每个容器实例(aspect of container)运行在它自己的名字空间,且在外部无法对其访问。
Docker用到的一些名字空间包括:

    • pid:Process ID,进程隔离;
    • net:Networking,管理网络接口;
    • ipc:InterProcess Communication,管理对IPC资源的访问;
    • mnt:Mount,管理挂载点;
    • uts:Unix Timesharing System,内核隔离及版本识别。
  • Control groups(控制组)

隔离地运行应用程序的关键,是控制应用程序使用合法的资源。这保证容器在宿主机上是良好的多租客用户。控制组允许Docker共享宿主机的硬件资源给容器,并支持对容器可用资源进行限制和约束。比如,限制指定容器的可用内存。
Union file systems(联合文件系统)
联合文件系统,或者UnionFS,是一种特殊的文件系系统:通过创建“层”进行操作,这种文件系统够快,够轻巧。Docker使用联合文件系统提供容器的创建模块。Docker支持多种联合文件系统的变种,包括:AUFS, btrfs, vfs, and DeviceMapper

  • Container format(容器格式)

Docker将这些组件打包成一个包装器,叫做容器格式。缺省的容器格式叫做libcontainer。Docker也支持使用LXC的传统Linux容器。未来,Docker将支出其他的容器格式,比如,与BSD Jails和Solaris Zones集成。

Reference:

https://docs.docker.com/introduction/understanding-docker/

时间: 2024-11-03 22:39:55

Docker 01 Introduction的相关文章

<Docker>01 命令参数解析

最近Docker1.0稳定版发布了,这给paas注入新鲜的血液. Docker是一个功能强大的自动化分布式系统:大规模的Web部署.数据库集群.持续部署系统.私有PaaS.面向服务的体系结构等. Docker是一种增加了高级API的LinuX Container(LXC)技术,提供了能够独立运行Unix进程的轻量级虚拟化解决方案. 它提供了一种在安全.可重复的环境中自动部署软件的方式. 关于Docker运行在Centos的操作,下面由cantgis进行讲解. Cantgis的实验环境都是在Cen

01——Introduction to Android介绍

Introduction to Android Android provides a rich application framework that allows you to build innovative apps and games for mobile devices in a Java language environment. The documents listed in the left navigation provide details about how to build

docker 01

容器技术的核心有以下几个内核技术组成: CGroups(Control Groups)-资源管理NameSpace-进程隔离 SELinux安全 优势传统虚拟机需要给每个VM安装操作系统容器使用的共享公共库和程序启动非常快速劣势容器的隔离性没有虚拟化强 共用Linux内核,安全性有先天缺陷SELinux难以驾驭 监控容器和容器排错是挑战docker 安装把软件 docker-engine docker-engine-selinux 拷贝到私有yum仓库,运行 createrepo . 安装 do

DOCKER 01:镜像和容器的基础命令使用

本文主要谈谈 docker 命令怎么使用的问题! 关于镜像的操作命令 已经知道,容器是镜像的运行的实例,所以想要运行一个容器,事先得拥有这个容器的镜像. 1. 使用页面搜索镜像: 在默认的注册点 docker hub,不管是官方还是非官方都上传了很多镜像: https://hub.docker.com 可以通过搜索指定的镜像名称找到对象的镜像仓库,如 nginx: 这里只是截图的一部分,可以看到第一个和后面的两个有区别,后面两个名字中间都有斜线. 这个斜线前面的是用户名,比如第二个,前面是 ng

Windows KINECT Development 01 - Introduction of Microsoft KINECT

记得有人说,电脑把人变成了“半人”,意思是人需要坐在电脑前面敲击键盘,点击鼠标来完成与电脑的交互,人就形同一台机器一样.人最直接的交互方式,如语言,眼神及肢体动作在于电脑的交互过程中完全丧失了功能,这种交流不仅低效,而且导致了很多健康问题.那么有没有一种方式能够把人从这种“半人”的状态中解放出来呢?通过语言,肢体动作,甚至眼神等动作来完成与计算机的交互呢? Microsoft KINECT for Windows 就是针对上述问题的解决方案.KINECT 支持更自然的方式与计算机进行交流,如肢体

IntelliJ IDEA 01 introduction

首先, 无论是解压还是安装, 都会在 C:\Users\Leon\.IntelliJIdea2019.3 有一个类似这种的文件夹. 在这个目录下有两个文件夹: config: 配置 system: 缓存 (提升 intelliJIdea 的性能) 所以, 当卸载时, 这两个目录也要删除. (要不会影响将来的使用) {删除这两个目录, 重启IDEA, 可以还原成最初的状态} 安装软件的目录: bin目录: idea64.exe.vmoptions 虚拟机的配置信息. plugin: 插件. 软件会

Learn Docker

Learn Docker A Container is to VM today, what VM was to Physical Servers a while ago. The workload seems to shifting towards containers, and fast! In case you haven’t started ramping on it yet, you may find it a bit overwhelming to begin with. I thou

Docker Resources

Menu Main Resources Books Websites Documents Archives Community Blogs Personal Blogs Videos Related Projects OS Virtual Machine Competitors Management Tools Paas Platforms Integration Projects Monitoring Networking Continuous Integration Development

国外一些有价值的docker相关的文章

国外一些有价值的docker相关的文章 docker 每周都有周报进行更新,有一个网站列出了从开始2015年1月30日的一些有价值的链接: 关于Weave: 在Azure上一个CoreOS集群上安装Weave Docker虚拟网络https://github.com/chanezon/azure-linux/blob/master/coreos/weave/README.md Crate with Docker & Weavehttps://crate.io/blog/crate-with-do