容器简介

管理程序虚拟化(hypervisor virtualization, HV)是通过中间虚拟运行于物理硬件之上。而容器是直接运行在操作系统内核之上用户空间。因此,容器虚拟化运行也成为“操作系统级虚拟化”,容器技术可以让多个独立的用户空间运行在同一台宿主机上。

容器只能运行与底层宿主机相同或类似的操作系统。例如,可以在 Ubuntu 服务器中运行 RedHat Enterprise Linux,但是不能运行 Windows。

在超大规模的多租户服务不熟、轻量级沙盒以及对安全要求不太高的隔离环境中,容器技术非常流行。比如“权限隔离监牢”(chroot jail),它建立一个隔离的目录环境来运行进程,如果权限隔离监牢正在运行的进程被入侵者攻破,入侵者便会发现自己身陷“身陷囹圄”,因为权限不足被困在容器创建的目录中,无非对宿主机进行进一步的破坏。

最新的容器引入了 Open、Solaris Zones、Linux 容器(如 lxc),容器不再仅仅是一个单纯的运行环境。在自己的权限范围内,容器更像是一个完整的宿主机。

Docker 得益于现代 Linux 内核特性,如控件组(control group)、命名空间(namespace)技术,容器和宿主机直接的隔离更加彻底,容器有独立的网络和存储栈,还拥有自己的资源管理能力,是的同一台宿主机中的多个容器可以友好地共存。

容器开销低,和传统的虚拟化以及半虚拟化(paravirtualization)相比,容器运行不需要模拟层(emulation layer)和管理层(hypervisor layer),二手使用操作系统的系统调用接口,着降低了运行单个容器所吸引的开销,也是的宿主机中可以运行更多的容器。

但容器本身比较复杂,不易安装,管理和自动化也很困难,而Docker就是为改变着一切而生的。

Docker简介

Docker是一个能把开发应用程序自动不熟到容器的开源引擎。由Docker 团队编写,基于Apache 2.0 开源协议发行。

在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。

Docker在虚拟化的容器执行环境中增加了一个应用部署引擎,该引擎的目标是提供一个轻量、快速的环境,能够运行开发者的程序,并方便高效地将程序从开发者的笔记本部署到测试环境,然后再部署到生产环境。Docker机器简洁,它所需要的全部环境只是一台仅仅安装了兼容版本的Linux内核和二进制文件最小限的宿主机。而Docker的目标是提供一些这些东西:

提供简单、轻量的建模方式

Docker上手非常快,只要几分钟就能把自己的程序“Docker化”(Dockerize)。Docker依赖于“写时付至”(copy-on-write)
模型,是修改应用程序也非常迅速,可以说是“随心所至,代码即改”。

随后就可以创建容器来运行程序了。大多数Docker容器只需不到1秒钟即可启动。去除了管理程序的开销,性能较高,可以同时运行多个容器。

职责的逻辑分离

使用Docker,开发人员只需关系容器运行的程序,运维人员只需关系如何管理容器。加强了开发人员写代码的环境与程序部署的生产环境的一致性。

快速、高效的开发生命周期

缩短代码从开发、测试、部署、上下的周期,让应用可移植、易构建、易协作。

鼓励使用面向服务的架构

Docker推荐单个容器运行一个应用程序或进程,形成分布式的应用程序模型,这样,程序或服务都可以表示为一系列内部互联的容器,使分布式部署应用程序,扩展或调试程序标的简单。当然也可以在一个容器里运行多个进程的应用程序。

Docker 组件

镜像

Docker 镜像就是一个只读的模板。例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。

镜像是Docker生命周期中的“构建”部分,可以用来创建 Docker 容器。

Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,可以当做容器的“源代码”,它体积很小,便于分享、存储、更新。用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。

镜像是基于联合(union)文件系统的一种层式的结构,由一系列指令一步步构建处理。例如:

  • 添加一个文件
  • 执行一个命令
  • 打开一个端口

容器

Docker利用容器来运行应用。Docker可以帮你构建和部署容器,你只需要把自己的程序或服务打包到容器里即可。容器是基于镜像启动的,容器可以运行多个进程,所以可以认为,镜像是Docker生命周期的构建/打包阶段,容器是启动/执行阶段。

打个比方,容器是集装箱,镜像是货物。

容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。

可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

总结起来,Docker容器就是:

  • 一个镜像格式
  • 一系列标准的操作
  • 一个执行环境

注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。

仓库(registry)

仓库用于保存用户构建的镜像,分为公有、私有。Docker公司运营的公共仓库叫Docker Hub,用户可以在Docker Hub注册账号,保存并分享自己的镜像。 国内的公开仓库有 Docker Pool等。用户也可以在本地网络内创建一个私有仓库。

当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。

注:Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。

Docker学习之路(一)的更多相关文章

  1. docker学习之路-centos下安装docker

    前言 我要在云服务器上做一个asp.net core的webapi应用,使用docker来部署应用,中间用到的任何组件包括nginx和sqlserver 2017都是用docker来装载运行,所以,这 ...

  2. Docker学习之路(三)Docker网络详解

    1. Docker的4种网络模式 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: host模式,使用--net=host ...

  3. Docker学习之路(二)DockerFile详解

    Dockerfile是一个镜像的表示,可以通过Dockerfile来描述构建镜像的步骤,并自动构建一个容器 所有的 Dockerfile 命令格式都是: INSTRUCTION arguments 虽 ...

  4. docker学习之路-build asp.net core 2.2产生 warning MSB3245: Could not resolve this reference.错误的解决办法

    在docker build的时候有时我们可以直接使用dotnet publish来发布,但是如果用docker构建镜像的时候却会出现下面的错误: 解决办法:https://stackoverflow. ...

  5. docker学习之路-nginx镜像(翻译)

    本篇来自https://hub.docker.com/_/nginx/?tab=description 它是docker hub上nginx的官方网站,上面有关于nginx的使用描述等.从这里你可以找 ...

  6. docker 学习之路 将docker容器变为镜像并上传

    环境 ubunt 16.4 去hub.docker.com上注册一个账号,并在账号中注册一个公有public或者私有仓库private 步骤如下 如上图 点击该处进入创建docker库页面 除了名字之 ...

  7. docker学习之路

    环境 : ubuntu 16.4 下载docker 首先使用命令行下载 docker wget -qO- https://get.docker.com/ | sh 启动 下载完成之后进行一个启动,但是 ...

  8. docker学习之路(安装、使用)

    一.docker安装 1.更新现有的yum包 yum update 2.配置docker yum源 [root@docker ~]# cat /etc/yum.repos.d/docker.repo ...

  9. Docker学习总结(18)——阿里超大规模Docker化之路

    12月6-7日,由阿里巴巴集团.阿里巴巴技术发展部.阿里云云栖社区联合主办,以"2016双11技术创新"为主题的阿里巴巴技术论坛上,阿里巴巴研究员林昊分享了阿里超大规模Docker ...

随机推荐

  1. 选择第n大的数(分治法和排列实现)

    个人心得:在买的书上看到的一个经典分治题,题目意思就是给定一个数组,求第k小的数. 第一反应就是排序,然后返回第k-1位置的数就可以了,这样算法的复杂度是nlongn,在快速排序的基础下还是挺不错的. ...

  2. sublime text 3设置浏览器快捷键

    一.设置默认浏览器 1,打开sublime 依次选择 tools > build system > new build system... 2,选择你喜欢的浏览器,右键 > 属性 把 ...

  3. Oracle cursor_sharing 参数 详解

    一. 官网的说明 http://download.oracle.com/docs/cd/E11882_01/server.112/e17110/initparams042.htm#REFRN10025 ...

  4. 发现一个github的奇葩设定

    commit时留下的邮箱,会显示在github的提交记录里,然后居然自动找服务器上的这个邮箱注册的人,显示这个用户名.

  5. Win7旗舰版一直显示检查更新的问题

    最近部门机器从新安装win7 64位 旗舰版之后,每次检查更新,都会一直卡在检查更新的界面过不去,上网搜了一下,看到了网友提供的解决办法, 测试了一下,果然可以.记录下来,以备后用: 到微软官网去下载 ...

  6. 【LigerUI实战】Grid弹出编辑popup

    最近为分公司的项目做外援,做起了全栈的活.被公司自研架构磨灭的几乎忘掉了其他技能,正好新项目决定重新搭个架构,与同事们讨论过后,决定Spring+MyBatis+SpringMVC+CXF+Liger ...

  7. Annotation之一:Java Annotation基本功能介绍

    一.元数据的作用 如果要对于元数据的作用进行分类,目前还没有明确的定义,不过我们可以根据它所起的作用,大致可分为三类: 编写文档:通过代码里标识的元数据生成文档.这是最常见的,也是java 最早提供的 ...

  8. Java-Runoob:Java 开发环境配置

    ylbtech-Java-Runoob:Java 开发环境配置 1.返回顶部 1. Java 开发环境配置 在本章节中我们将为大家介绍如何搭建Java开发环境. Windows 上安装开发环境 Lin ...

  9. JAVA 比较两个日期相差的天数

    在实际的应用中,我们经常会比较两个日期相差的天数,下面我们通过java方法判断两个日期所差的额天数. 具体内容,请看下面的代码: package com.jd.jr.fclient.test; imp ...

  10. php命令执行

    php命令执行通过函来执行外部应用程序,函数有shell_exec(),exec(),system(),passthru() <?php $i = $_GET['cmd']; echo exec ...