容器简介

管理程序虚拟化(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. kafka系列之(3)——Coordinator与offset管理和Consumer Rebalance

    from:http://www.jianshu.com/p/5aa8776868bb kafka系列之(3)——Coordinator与offset管理和Consumer Rebalance 时之结绳 ...

  2. WCF Restful 服务 Get/Post请求

    Restful  Get方式请求: Restful服务 Get请求方式:http://localhost:10718/Service1.svc/Get/A/B/C http://localhost:1 ...

  3. java 执行JavaScript 以及容器化的问题

    1. 可选方案     a. jdk 6 开始内置的Rhino 引擎   b. jdk8 替换的nashorn (性能高,对于ECMA 支持更好)   c. java 版的nodejs vertx.i ...

  4. checkStype和findBugs校验

    IDEA可以直接在setting中下载checkStyle和findBugs <plugin> <groupId>org.codehaus.mojo</groupId&g ...

  5. Spring aop 记录操作日志 Aspect 自定义注解

    时间过的真快,转眼就一年了,没想到随手写的笔记会被这么多人浏览,不想误人子弟,于是整理了一个优化版,在这里感谢智斌哥提供的建议和帮助,话不多说,进入正题 所需jar包 :spring4.3相关联以及a ...

  6. List<Map> 排序

    import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.u ...

  7. python一个简单的web服务器和客户端

    服务器:      当客户联系时创建一个连接套接字      从这个连接接收HTTP请求(*)      解释该请求所请求的特定文件      从服务器的文件系统获取该文件      并发送文件内容 ...

  8. gen_server模块

    转自http://www.xuebuyuan.com/2132233.html

  9. Erlang基础 -- 介绍 -- Wordcount示例演示

    在前两个blog中,已经说了Erlang的历史.应用场景.特点,这次主要演示一个Wordcount的示例,就是给定一个文本文件,统计这个文本文件中的单词以及该单词出现的次数. 今天和群友们讨论了一个问 ...

  10. jetty中war包解压路径

    这是个很奇怪的问题,如果下载好了jetty直接放入war包运行,项目会被解压到C盘的临时文件夹中.但是如果你在${JETTY_HOME}文件夹,也就是jetty解压后的根目录中新建,注意是新建一个wo ...