Docker 前沿概述
Docker 前沿概述
什么是Docker?
Docker是基于Go语言实现的开源容器项目。Docker是一个为开发者和系统管理员提供的开发,部署和运行的容器应用程序。Linux使用容器开发应用程序的这种方式称为容器化。Docker项目已加入Linux基金会,并遵循Apache2.0 协议,全部开源代码再http://github.com/docker 项目仓库进行维护。
Docker的基本概念
Docker中包括三个基本概念:容器(Container)、镜像(Image)、仓库(Repository)
容器(Container) -- 镜像运行时的实体
先来看看容器较为官方的解释:容器就是将软件打包成基本单元,用来开发、交付和部署。
- 容器镜像是轻量的、可执行的软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。
- 容器化软件是基于Linux和Windows的应用,在任何环境中都能够始终如一地运行。
- 容器赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同环境上运行不同软件时的冲突。
镜像(Image) -- 一个特殊的文件系统
Docker中的Image镜像相当于是一个文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数。
镜像可以基于Dockerfile构建,Dockerfile是一个描述文件,里面包含若干条命令,每条命令都会对基础文件系统创建新的层次结构。
用户可以通过编写Dockerfile创建新的镜像,也可以直接从类似github的Docker Hub上下载镜像使用。
仓库(Repository) -- 集中存放镜像文件的地方
如果你使用过 git 和 github 就很容易理解Docker的仓库概念。Docker仓库相当于一个 github 上的代码库。
Docker 仓库是用来包含镜像的位置,Docker提供一个注册服务器(Registry)来保存多个仓库,每个仓库又可以包含多个镜像。
它们的范围大小依次是 仓库 > 镜像 > 容器
下面再来说说虚拟机
前面说到,容器在Linux上本机运行,并与其他容器共享主机的内核。它运行一个独立的进程,不占用任何其他可执行文件的内存,使其轻量级。
相比之下,虚拟机运行一个完整的客户操作系统,通过虚拟机管理程序对主机资源进行虚拟访问。通常,VM提供的环境比大多数应用程序需要的资源更多。
下面这幅图很好的表述了这一点

容器和虚拟机的比较
这或许也就能解释 Docker 如此流行的原因
- Docker容器很快,启动和停止可以在秒级实现,这相比传统的虚拟机方式(数分钟)要快得多;
- Docker容器对系统资源需求很少,一台主机可以运行数千个Docker容器;
- Docker通过类似Git设计理念的操作来方便用户获取、分发和更新应用镜像,存储复用,增量更新;
- Docker通过Dockerfile支持灵活的自动化创新和部署机制,以提高工作效率,并标准化流程。
下图是Docker容器技术与传统虚拟机技术的比较:
| 特性 | 容器 | 虚拟机 |
|---|---|---|
| 启动速度 | 秒级 | 分钟级 |
| 性能 | 接近原生 | 较弱 |
| 内存代价 | 很小 | 较多 |
| 硬盘使用 | 一般为MB | 一般为GB |
| 运行密度 | 单机支持上千个容器 | 一般为几十个 |
| 隔离性 | 安全隔离 | 完全隔离 |
| 迁移性 | 优秀 | 一般 |
Docker 解决了什么样的问题
一项技术或者软件的流行都是为了解决某种问题应用而生的,那么话说回来了,Docker解决了什么问题呢?
- 组织有序:如果没有Docker,一台机器就可能像是一个装满垃圾的抽屉,应用程序依赖各种资源,一些应用程序依赖各种代码库,语音,图像等。这种依赖关系很像分布式各个系统的调用网一样混乱不堪,如果用一张图来表示一下,就像是下面这样

但是Docker解决了这个问题,应用程序的各种依赖和环境都直接部署在Docker的容器中,起到隔离一切的目 的,就像是下图所示的这样

提高可移植性:另一个软件的问题是,应用程序的依赖不仅只是资源的依赖,还有可能是系统环境的依赖,操作系统之间的移植性一直是软件用户的一个主要问题。虽然Linux和OS X之间可能会有某种兼容性,但是在Windows环境下开发的软件移植到Linux会很困难。
Docker解决了这一点,因为Docker可运行在原生的Linux环境下,在OS X和Windows环境中通过单独的虚拟机也可以运行。
这种新的移植性在几个方面有助于用户使用:第一,它将软件以前无法使用的地方彻底解锁。第二,它可以在任何系统上运行相同的软件。第三,软件维护人员可以集中精力在单一平台和一套依赖关系中编写他们的软件,这节省了大量的时间。
保护你的机器:Docker就像是物理的牢房,容器里的任何东西只能访问它内部的东西。容器限制了一个程序对其他程序带来的影响范围、可访问的数据和系统资源的影响范围。下图说明了容器内部运行和外部运行软件的区别

下面就开始你的Docker搭建之旅吧!!!
准备你的docker环境
我为你准备了下面四种环境的docker安装教程,你可以根据教程来实现安装
Ununtu Docker安装:https://www.runoob.com/docker/ubuntu-docker-install.html
CentOS Docker安装:https://www.runoob.com/docker/centos-docker-install.html
Windows Docker安装:https://www.runoob.com/docker/windows-docker-install.html
MacOS Docker安装:https://www.runoob.com/docker/macos-docker-install.html
测试Docker 版本
- 安装完成后,运行
docker --version确保你的系统已经支持了docker

- 运行
docker info(没有 - )以查看有关Docker安装的更多详细信息:

等等
测试Docker 安装
- 测试你的安装工作通过运行一个简单的docker 映像,hello-world:

- 列出来你机器上下载的hello-world 映像

- 列出显示其消息后退出的hello-world容器(由图像生成)。如果它仍在运行,则不需要--all选项:

回顾和备忘单
列出Docker CLI 命令
docker
docker container --help
显示docker version 和 info
docker --version
docker version
docker info
执行docker图像
docker run hello-world
列出docker 映像
docker image ls
列出docker容器
docker container ls
docker container ls --all
docker container ls -aq
公众号提供 优质Java资料 以及CSDN免费下载 权限,欢迎你关注我

参考:
http://dockone.io/article/6051
DOCKER 概念及基本用法
《Docker实战》
Docker 前沿概述的更多相关文章
- Docker基本原理概述
Docker基本原理概述 Docker是一个用于开发,交付和运行应用程序的开放平台.Docker能够将应用程序与基础架构分开,从而可以快速交付软件.借助Docker,可以以与管理应用程序相同的方式来管 ...
- docker 网络概述及网络模式详解
docker 网络概述及网络模式详解 1.网络概述 2.网络模式详解 1.网络概述: Docker 网络实现原理 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0) ...
- Docker(1)--概述
Docker概述 Docker是一个用于开发,交付和运行应用程序的开放平台.Docker使您能够将应用程序与基础架构分开,从而可以快速交付软件.借助Docker,您可以以与管理应用程序相同的方式来管理 ...
- 001.Docker简介概述
一 简介 Docker最初是dotCloud公司的一个内部项目,诞生于 2013 年初,由google公司开源的Go语言开发. Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移 ...
- Docker 开发概述
This page lists resources for application developers using Docker. Develop new apps on Docker If you ...
- Docker的概述
什么是Docker 1.容器技术 在计算机的世界中,容器拥有一段漫长且传奇的历史.容器与管理程序虚拟化(hypervisor virtualization,HV)有所不同,管理程序虚拟化通过中间层将一 ...
- docker 框架概述
docker的框架 docker 使用传统的client-server架构模式,用户端通过docker client 与docker daemon 建立通信,并将请求发送给后者,而docker后端时 ...
- Docker之概述
我们常常需要将应用程序部署在独立的系统环境中,而使用物理机器部署会浪费大量的物理资源.能否讲物理机器虚拟成一个一个容器,而将程序部署在各自的容器中?Docker是一个能够把开发的应用程序自动部署到容器 ...
- Docker 01 概述
参考源 https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0 https://www.bilibili.com/vid ...
随机推荐
- [深度学习]TensorFlow安装
virtualenv 可以用来建立一个专属于项目的python环境,保持一个干净的环境.只需要通过命令创建一个虚拟环境,不用的时候通过命令退出,删除.实践证明用虚拟环境能避免很多糟心的事. 下面介绍一 ...
- 免费rar/zip解压缩工具BandZip
今天为大家推荐一款解压缩类软件--BandZip bandzip是我认为的最好用的解压缩软件,速度快没广告 能够秒杀其他的压缩类软件 下载地址 bandzip点我 1 BandZip简介 BandZi ...
- spark 源码分析之十四 -- broadcast 是如何实现的?
本篇文章主要剖析broadcast 的实现机制. BroadcastManager初始化 BroadcastManager初始化方法源码如下: TorrentBroadcastFactory的继承关系 ...
- Cookie起源与发展
上一篇我们在讲优酷弹幕爬虫的时候,引入了一个新的知识点:Cookie,由于篇幅有限当时只是简单的给大家介绍了一下它的作用,今天我们就来全面了解一下Cookie(小饼干)以及相关的知识! 相信很多同学肯 ...
- 云开发新能力,支持 HTTP 调用 API
今天来上班打开电脑,总感觉微信开发文档哪里有点不太一样,研究了半天原来是云开发又多了神级功能--HTTP API! HTTP API是什么?简单来说就是通过云开发HTTP API,可以不需要通过微信小 ...
- 【bfs】单向公路-C++
描述 某地区有许多城镇,但并不是每个城镇都跟其他城镇有公路连接,并且有的公路并不能双向行驶.现在我们把这些城镇间的公路分布及允许的行驶方向告诉你,你需要编程解决通过公路是否可以从一个城镇到达另一个城镇 ...
- 快速掌握mongoDB(四)—— C#驱动MongoDB用法演示
前边我们已经使用mongo shell进行增删查改和聚合操作,这一篇简单介绍如何使用C#驱动MongoDB.C#驱动MongoDB的本质是将C#的操作代码转换为mongo shell,驱动的API也比 ...
- JS时间处理,获取天时分秒。以及浏览器出现的不兼容问题
//获取时间的天,小时,分钟,秒 function ToTime(second) { second = second / ; var result ; ) % ; ) % ; * )); ) { re ...
- Excel催化剂开源第37波-音视频文件元数据提取(分辨率,时长,采样率等)
上一篇提到图片元信息Exif的提取,当然还有一类音视频文件,也同样存储着许多宝贵的元数据,那就开源到底呗,虽然自己找寻过程也是蛮艰辛坎坷的,大家看后有收获,只求多多传播下,让前人的工作可以更有价值. ...
- TinycoreLinux的安装使用
下载 http://www.tinycorelinux.net/7.x/x86_64/release/ distribution_files/ 05-Apr-2016 07:29 - src/ 24- ...