Docker学习之路(一)

容器简介

管理程序虚拟化(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 这样的托管服务。

时间: 2024-11-06 04:30:23

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

Docker   学习之路(一)

Docker  学习之路(一) 一.基础环境 系统版本:CentOS Linux release 7.3.1611 (Core) 内核版本:3.10.0-514.26.2.el7.x86_64(Docker官方要求3.8以上内核版本,所以建议升级至最高内核版本) 二.YUM安装Docker # vim /etc/yum.repos.d/docker.repo 添加如下内容: [dockerrepo] name=Docker Repository baseurl=https://yum.docke

Docker 学习之路

一.前言 Docker是对我来说是项新的技术,这里打算记录下学习Docker的点滴经过,一些知识点在阮一峰前辈的文章中都介绍的很详细了,我在后面所记录的单纯是为了自己的理解与记忆.阮一峰前辈的文章写的很好,我也是看了他的文章入门的. 链接如下: http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html http://www.ruanyifeng.com/blog/2018/02/docker-wordpress-tutorial.ht

docker学习之路

环境 : ubuntu 16.4 下载docker 首先使用命令行下载 docker wget -qO- https://get.docker.com/ | sh 启动 下载完成之后进行一个启动,但是会出现错误 提示用户没有权限 ubuntu默认是非root用户,非root用户会提示错误信息所以最简单的办法是使用 sudo su 进入root用户模式执行以下命令 开启docker start sudo service docker start 重启docker服务 service docker

docker学习之路 深入容器(三)

1.自动重启容器,如果由于某些错误导致容器停止运行,可以用--restart来决定是否重启 docker run  --restart=always  --name=ubuntu-test -d ubuntu /bin/bash always - 无论容器退出代码是什么 docker都会自动重启该容器 on-failure 只有容器退出代码非0,就会重启,另外还可以设置重启次数 --restart=on-failure:5 2.获取更多容器信息 docker inspect ubuntu-tes

AWS 学习之路(技术专业人员Training and Certification)架构解决方案1

AWS 学习之路--技术专业人员架构解决方案1·(1h) 摘要主题: DevOps和云迁移. 将AWS云架构与传统架构进行比较. 联系用于生成各个解决方案的AWS服务,了解可能的迁移策略和技术含义. 第一部分:基于AWS的DevOps DevOps和传统架构的区别: 传统架构: DevOps模型: 独立环境 两团队协作额(开发运维团队) 线性开发 经常沟通 工程师执行开发和运营 提高效率 流程和完成方式延迟对客户的交付 改进服务质量 端到端模型 也可能会涉及QA和安全团队 开发和基础设施是每个团

Azure云平台学习之路(三)——Cloud Services

1.什么是云服务? 能够部署高度可用的且可无限缩放的应用程序和API.简而言之,就是你写的CMD程序按照一定的框架进行少量修改就能运行在Azure云平台上. 2.Azure云服务有什么特点? (1)专注应用程序而不是硬件,PaaS的一种. (2)支持多种框架和语言. (3)集成了运行状况监视和负载平衡. (4)自动缩放优化成本和性能 3.建立云服务之前,我们需要建立一个云存储,来记录我们的程序的日志信息(当然,这不是必须的) (1)选择左边导航栏的"存储".主面板上显示的是所有已有的存

linux学习之路之LVM

试想一种情况,当初我们在规划磁盘的时候,只给某一个磁盘或分区之划分了30G的容量,但是后来,随着业务的需求,该磁盘或者分区的使用量会越来越大,等到以后再有数据存放时,发现该磁盘或者分区的容量不够用,此时该怎么办了?可以新增一个磁盘,经过格式化,挂载等过程就可以使用这个磁盘了,再将原来磁盘的数据完全的复制过来.等到后来又发现,规划的磁盘又太大了,然后又使用上述方法来减少磁盘的大小.虽然这种方法可行,但是效率低,比较复杂.不应该是我们首选的方法. 当然,我们可以这样做,将多个磁盘或者分区(PV)组合

我的算法学习之路

关于 严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口--况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的. 这篇文章讲了什么? 我这些年学习数据结构和算法的总结. 一些不错的算法书籍和教程. 算法的重要性. 初学 第一次接触数据结构是在大二下学期的数据结构课程.然而这门课程并没有让我入门--当时自己正忙于倒卖各种MP3和耳机,对于这些课程根本就不屑一顾--反正最后考试划个重点也能过,于是这门整个计算机专业本

一个女大学生的代码学习之路(二)

首先说一下,写这种文章是由于我在四月四日晚上,在手动搭建自己的第一个ssh项目的时候,遇到了一个配置的问题,怎么解决也弄不好,当时是四号晚上九点,我看了一眼表,我就想两个小时之内,我要是能搞定就算行了,但是其实,我搞到三点才OK(凌晨),那时候已经是五号了,转天是一家子去扫墓的时候,结果我居然以这种一个理由没有去,理由是我太累了么?我只是就是搭了一个架子,就是由于我的包太混乱了,导致不兼容,所以tomcat总也不启动,你可能认为好笑,这么简单一个问题怎么就费这多多时间呢,但是作为一个刚接触三框架