快速理解Docker

【云原生】第十篇--Docker主机集群化方案 Docker Swarm Docker Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。...... 阅读详情

作者:刘旭晖 Raymond 转载请注明出处

Email:colorant at 163.com

BLOG:http://blog.youkuaiyun.com/colorant/


是什么

 

简单的说Docker是一个构建在LXC之上的,基于进程容器(Processcontainer)的轻量级VM解决方案

 

拿现实世界中货物的运输作类比, 为了解决各种型号规格尺寸的货物在各种运输工具上进行运输的问题,我们发明了集装箱

 


 

 

Docker的初衷也就是将各种应用程序和他们所依赖的运行环境打包成标准的container/image,进而发布到不同的平台上运行

 


 

 

从理论上说这一概念并不新鲜, 各种虚拟机Image也起着类似的作用

 

Docker container和普通的虚拟机Image相比, 最大的区别是它并不包含操作系统内核.

 

 

 

普通虚拟机将整个操作系统运行在虚拟的硬件平台上, 进而提供完整的运行环境供应用程序运行, 而Docker则直接在宿主平台上加载运行应用程序. 本质上他在底层使用LXC启动一个Linux Container,通过cgroup等机制对不同的container内运行的应用程序进行隔离,权限管理和quota分配等

 

每个container拥有自己独立的各种命名空间(亦即资源)包括:

 PID 进程, MNT 文件系统, NET 网络, IPC , UTS 主机名 等

 

 与LXC有什么不同

 

基本上你可以认为目前的Docker是LXC的一个高级封装,提供了各种辅助工具和标准接口方便你使用LXC,你可以依靠LXC和各种脚本实现与docker类似的功能,就像你不使用APT/yum等工具也可以自己搞定软件包安装一样,你使用他们的关键原因是方便易用!

 

实际使用中,你一般不用关心底层LXC的细节,同时也不排将来docker实现基于非LXC方案的可能性

 

在LXC的基础上, Docker额外提供的Feature包括:标准统一的打包部署运行方案, 历史版本控制, Image的重用,Image共享发布等等

 

 

Container构建方案

 

除了LXC,Docker的核心思想就体现在它的运行容器构建方案上

 


 

为了最大化重用Image,加快运行速度,减少内存和磁盘footprint, Docker container运行时所构造的运行环境,实际上是由具有依赖关系的多个Layer组成的。例如一个apache的运行环境可能是在基础的rootfs image的基础上,叠加了包含例如Emacs等各种工具的image,再叠加包含apache及其相关依赖library的image,这些image由AUFS文件系统加载合并到统一路径中,以只读的方式存在,最后再叠加加载一层可写的空白的Layer用作记录对当前运行环境所作的修改。

 

有了层级化的Image做基础,理想中,不同的APP就可以既可能的共用底层文件系统,相关依赖工具等,同一个APP的不同实例也可以实现共用绝大多数数据,进而以copy on write的形式维护自己的那一份修改过的数据等

 

历史和生态环境

 

Docker项目从启动到现在不过一年多时间,发展势头还是很迅猛的

 

2013.01 做为dotcloud内部项目开始启动

2013.03.27 正式作为public项目发布

2014.1 被BLACK DUCK 评选为2013年10大开源新项目“TOP 10 OPEN SOURCE ROOKIE OF THE YEAR”

 

目前的状态 ( 2014.3 )

 

Docker 0.8.1

10000+ github stars(top 50)

350+ contributors

1500+ fork

 


 

具体应用方面,可以看到百度至少在2013年10月份就已经成功使用Docker支持其BAE平台的Paas服务

 

安装运行和使用

 

Docker虽然是号称build once, runeverywhere。但是实际上还是受其引擎依赖关系的限制的,目前的版本具体来说对系统要求:

 

  • Linux Kernel 3.8+
  • LXC support
  • 64bit OS
  • AUFS

 

以上要求,以ubuntu为例,需要12.04 配合 3.8kernel升级, 或者 ubuntu 13.04+

 

在ubuntu12.04上,基本安装步骤如下

 

sudoapt-get update sudo apt-get install linux-image-generic-lts-raringlinux-headers-generic-lts-raring

sudoapt-key adv --keyserver keyserver.ubuntu.com --recv-keys36A1D7869245C8950F966E92D8576A8BA88D21E9

sudosh -c "echo deb http://get.docker.io/ubuntudocker main\ > /etc/apt/sources.list.d/docker.list"

sudoapt-get update

sudoapt-get install lxc-docker

 

如果你在安装之前想要先体验一下docker的基本操作命令等的话, 可以尝试一下这个在线的live教程https://www.docker.io/gettingstarted/#h_tutorial

 

常用命令

 

分类列一下常用的CLI命令

 

  • 仓库相关

 

search/ pull / push / login etc.

例:docker pull ubuntu 从仓库下载ubuntuimage

 

  • Images 操作相关

 

images/ rmi / build / export  / import / save /load etc.

例:docker images -t 以树形结构列出当前本地Image

 

  • 运行相关

 

run / start / stop / restart / attach /kill etc.

docker run -i -t ubuntu /bin/bash  启动ubuntu image,并交互式的运行shell

 

  • 杂项

 

Docker diff  / commit

Dockerinfo / ps / inspect / port / logs / top / history etc.

 

 

具体docker命令的使用参见 http://docs.docker.io/en/latest/reference/commandline/

 

常见问题

 

  • 使用Non root 用户

 

目前版本的docker由于使用Socket进行通讯,因此需要root用户权限 sudo xxx,或者将需要使用Dockerclient的用户加入docker用户组

sudogpasswd -a ${USER} docker

 

  • 网络相关问题

 

当你在网关背后需要通过代理连接docker的index数据库时,可以手动加上http_proxy环境变量来启动dockerdaemon

 

HTTP_PROXY=http://proxy_server:port docker -d &

 

更好的做法是修改/etc/default/docker ( on ubuntu ), 添加 exporthttp_proxy=proxy_server:port

 

同样,docker container 如果无法自动正确的从host环境中获得DNS的配置,则需要手动指定DNS服务器地址,这可以通过 docker -run --dns=xxx 来实现,也可以修改/etc/default/docker 添加例如 DOCKER_OPTS="-dns 8.8.8.8"

 

  • 特权模式

 

在正常情况下 在container内部你没有权限操作device设备,而当前版本中,container内部部分文件例如/etc/hosts;/etc/hostname; /etc/resolve.conf等文件是动态通过mount动态以只读的形式加载上来的,理论上说你应该找到合适的方法去保证这些自动生成并加载的文件的正确性 (例如 通过--dns 设置 resolve.conf ),但是如果由于特殊原因你需要手动修改,那么你可以通过特权模式启动 docker client :docker run --privileged ,然后你可以卸载这些文件,自己再创建新的版本

 

  • 过多的层级依赖关系

 

以Layer的方式实现APP和相关library的cheap reuse和fast update是Docker的关键所在,不过受目前AUFS文件系统的限制,默认Layer的层级最多只能达到127(曾经只有42),在实际使用中有多种情况可能导致你的container的层级关系快速增长到这个极限值,撇开这么多layer叠加以后AUFS的效率不谈,更多情况下是你无法再更新构建你的image了

 

  1. 使用Dockerfile构建Image时,每条指令都会给最终的Image增加一层layer依赖关系.
  2. 以修改,提交,再修改再提交的方式不停的调整,更新你的Image
  3. 从仓库中下载的别人的Image已经包含众多的层级依赖关系,而你需要进一步更新以创建你自己的版本

 

前两者在一定程度上还是你自己可能把控的,最后一种情况就没办法了。这个问题最终必将影响Docker的实际可用性,目前的解决方案包括:

 

  • 使用Dockerfile时,尽可能合并多个操作:例如使用 "&&" 或 ";" 合并运行多个shell命令;将多个shell命令写成脚本,在dockerfile中添加并运行这个脚本
  • 通过Export再Import Image,丢弃所有历史信息和依赖关系,创建一个全新的image

 

将来可能的解决方案包括:

 

  • 在Dockerfile中添加对多步操作的合并提交的支持
  • 外部的image Flat工具的支持,目标是能够保留历史信息等
  • 非AUFS的其它Storage解决方案

 

 

 

Future development

 

虽然Docker目前默认使用LXC和AUFS,但是Docker的核心思想本身,并不强制绑定这两者,0.8版本已经可以使用BTRFS,而整个Docker框架也改成了插件式的架构,便于添加替换各个功能模块

 


 

 

例如更多的Storage方案的支持,规避AUFS当前的问题,除了LXC以外更多的虚拟化方案等

容器部署解决方案Docker 容器部署解决方案Docker容器部署解决方案Docker容器部署解决方案Docker容器部署解决方案Docker容器部署解决方案Docker容器部署解决方案Docker容器部署解决方案Docker容器部署解决方案Docker 立即下载

相关推荐

信捷 XDH Ethercat 正负极限配置详解与实战技巧

本文详细解析了信捷XDH系列PLC通过EtherCAT总线配置伺服电机正负硬极限的完整流程与实战技巧。内容涵盖硬件开关选型安装、EtherCAT IO信号映射、软件参数设置(包括关键的极性配置)、调试验证方法,以及硬极限与软极限的协同策略。重点阐述了如何避免常见配置错误,确保运动控制系统的最后一道物理安全防线可靠有效,为工程师提供从理论到实践的全面指导。

wdx012345的博客 601

快速理解Docker - 容器级虚拟化解决方案

简单的说Docker是一个构建在LXC之上的,基于进程容器(Processcontainer)的轻量级VM解决方案

colorant的专栏 23万+

Nangate 45nm FreePDK开源工艺库:从RTL到GDSII全流程实战

在数字IC设计中,标准单元库是连接逻辑综合与物理实现的基石,它定义了每个单元的逻辑功能、时序延迟与物理尺寸。开源EDA工具链的成熟,使得个人也能借助免费工艺套件完整跑通芯片设计流程。Nangate 45nm FreePDK作为一套经典的开源工艺库,凭借结构清晰、配套完善的特性,成为学习数字后端和时序收敛的理想训练场。从综合工具Yosys读取Liberty文件进行逻辑映射,到OpenROAD执行布局布线与时钟树综合,再到使用OpenSTA分析关键路径延迟,这套流程涵盖了数字设计最核心的环节。通过亲手操作,开发

weixin_29168393的博客 277

【无标题】

Compiler Explorer 能从 Web 浏览器以交互方式运行编译器并与程序集交互。

wbsu2004的博客 5531

触摸开关原理图_反激式开关电源PCB设计要点

由于最近工作中经常用到反激开关电源,就顺便做个有关反激电源PCB Layout方面的简单总结。关于变压器和补偿环路的设计原理和方法,可以参考之前的文章,链接如下:电子小白菜:反激电源变压器设计篇之详细设计步骤​zhuanlan.zhihu.com电子小白菜:反激电源变压器设计篇之基础原理​zhuanlan.zhihu.com电子小白菜:【干货分享】开关电源环路补偿设计步骤讲解​zhuanlan.z...

weixin_39574868的博客 1160

BlockUI专栏目录

BlockUI是一个设计NX对话框的工具,是官方推荐使用的对话框制作方法,能够与NX自身风格相统一,并且在实际开发中经常被使用。BlockUI可以帮助用户快速创建NX对话框,支持多种控件类型,如按钮、文本框、标签等。通过使用BlockUI,用户可以轻松地自定义对话框的布局、样式和交互行为。此外,BlockUI还提供了一些高级功能,如动态更新、条件显示和事件处理等,以帮助用户创建更加复杂和灵活的对话框。本专栏讲述了使用BlockUI制作NX对话框的方法,介绍了每个控件的功能,并且分享一些常用操作的源码。

王牌飞行员_里海的博客 1634

docker

文章目录docker简介基本概念Image(镜像)Container (容器)Repository (仓库)安装 dockerdocker images获取镜像设置镜像标签docker containers创建 docker 容器提交容器进入容器导出容器导入容器 docker 简介 使用容器让创建,部署,运行应用程序更简单的一个工具 Docker 属于 Linux 容器的一种封装,提供简单易用的...

xiaogeldx的博客 353

复旦微实现串口在线升级BOOT.BIN

将该 demo 生成的 app(升级用)和 fsbl、最简化 bit 文件(可选)打包成 BOOT.BIN,作为 golden image 烧写在 qspi flash 偏移 0 地址开始的位置,其中最简化 bit 文件为在线升级功能提供必要的物理通道(如果不需要,可以不打包该文件),golden image 一旦发布基本不需要进行升级,由该 golden image 负责和上位机进行通信交互,完成业务 app、业务 bit 文件、uboot 以及操作系统 image 等文件在线升级,在qspi flash

wangjie36的博客 3174

docker 介绍及基础命令

# Docker   学习目标: - 掌握Docker基础知识,能够理解Docker镜像与容器的概念 - 完成Docker安装与启动 - 掌握Docker镜像与容器相关命令 - 掌握Tomcat Nginx 等软件的常用应用的安装 - 掌握docker迁移与备份相关命令 - 能够运用Dockerfile编写创建容器的脚本 - 能够搭建与使用docker私有仓库   ​ # 1...

不积跬步无以至千里,不积小流无以成江河 815

材料仿真软件:Materials Studio_(14).电学性质计算

设置计算参数,包括 k 点网格、交换相关泛函等。

kkchenjj的博客 1864

cesium 深度图(获取区域最高最低点位)

文章摘要: Cesium深度图技术可用于获取区域地形高程数据,核心实现步骤包括:1)通过离屏相机构建独立渲染环境,使用正交投影确保采样精度;2)采用离屏渲染技术获取均匀分布的地形点数据。关键技术点包含多边形外包矩形计算、后台相机配置(5km高度正交投影)、1024×1024像素离屏视图设置,以及深度数据解析(RGBA格式转换和三维坐标还原)。该方法避免了主视图干扰,可精准获取区域内地形高程信息,为填挖方分析等应用提供基础数据支持。

God's asylum的博客 283

AI如何帮你快速理解Docker命令:以docker -v为例

Docker作为容器化工具,命令体系非常庞大。光是常用命令就有几十个,每个命令又有多个参数组合。这样的基础命令,每次用都要查参数含义,特别麻烦。后来尝试用AI辅助学习,效果出奇的好,这里分享下我的实践过程。实际体验下来,从开发到上线只用了几分钟。对于想快速验证想法的小伙伴,这种轻量化平台确实能省去不少折腾。最近在学Docker时发现,虽然官方文档很全,但直接看手册效率太低。

CrystalwaveEagle34的博客 587

高频网络协议与编程IO相关面试基本问题和知识点整理

网络IO相关基本高频面试基本问题和知识点整合

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 173万+

Docker快速理解及简介

docker快速理解及简介

韩金群的博客 324

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

docker快速理解

先举例说明一下什么是docker思想。 为什么Docker这么有价值?在回答这个问题之前,我们先想一个相似的问题,为什么现在以阿里、京东一类的电商平台能够占据中国互联网的半壁江山? 传统的商业模式存在有两大弊端:   买卖双方相对分散,加大了需求手机、营销、运送的成本; 买卖双方信息部队称,对交易产生了一直作用。 电子商务的出现则是将商品从卖方到买方的流通过程变得集中化、标准化、透明化 ...

SmallTenMr的博客 305

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

AI如何帮你快速理解Docker exec命令?

它的内置编辑器支持代码高亮,还能一键部署Node.js应用,让我可以快速验证学习成果。对于Docker这样的复杂技术,有个能即时交互的学习环境真的很重要。整个学习过程让我体会到,AI辅助开发不仅能降低学习曲线,还能通过即时反馈加深理解。好在现在有了AI辅助开发工具,让我能够快速掌握这个命令的精髓。AI可以演示如何正确使用这个组合,避免新手常见的终端卡死问题。AI工具还能智能识别常见错误,比如容器不存在、命令拼写错误等,并给出修复建议。AI不仅能列出这些场景,还能针对每个场景给出具体的使用示例。

ObsidianRaven13的博客 393

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

快速理解Docker容器

在容器技术没有出来之前,开发运维在进行交付的时候经常出现,开发环境执行正常,生产环境部署运行出现问题,很多原因就是因为环境导致。还有部署环境太过于复杂,交付成本太高。容器技术的出现就像工业的集装箱技术,大大提高了交付效率。 一、容器核心技术 一谈到容器,我们都会想到 Docker。 Docker 现在几乎是容器的代名词。确实,是 Docker 将容器技术发扬光大。同时,我们也需要...

javaQQ561487941的博客 225

快速理解docker

Docker是一个开源的容器引擎,也是当前大火的微服务的一种实现方案。docker能够将一个应用程序或者说app的全部运行环境打包进一个容器中。而容器是可以根据镜像批量生产的。也就是说,通过docker,开发者只需要将需要的应用以及依赖包全部按照docker规范编写dockerfile文件,就能制作出一个专属镜像,通过这个镜像,不管是在windows,还是linux上,都可义实例化一个完全一样的容

SummerMangoZz的博客 844

什么是docker,怎么能快速理解docker?

先举例说明一下什么是docker思想。为什么Docker这么有价值?在回答这个问题之前,我们先想一个相似的问题,为什么现在以阿里、京东一类的电商平台能够占据中国互联网的半壁江山?传统的商业模式存在有两大弊端:买卖双方相对分散,加大了需求手机、营销、运送的成本;买卖双方信息部队称,对交易产生了一直作用。电子商务的出现则是将商品从卖方到买方的流通过程变得集中化、标准化、透明化集中化:买家足不出户就能从...

白粥的屋云记 2178

快速理解什么是镜像、容器、docker、k8s

快速理解什么是镜像、容器、docker、k8s

空山新雨后,天气晚来秋 2855

从零到一:用Docker快速搭建SiameseUniNLU中文理解服务

本文介绍了如何在星图GPU平台上自动化部署nlp_structbert_siamese-uninlu_chinese-base特征提取模型二次构建镜像,快速搭建中文自然语言理解服务。该镜像支持命名实体识别、情感分类等八大任务,典型应用于电商评论情感分析、客服对话信息抽取等场景,显著降低NLP服务部署门槛。

weixin_35414484的博客 351

快速理解docker名词

容器编排器(docker composer):类似于运行多个虚拟机,每个容器运行某一个功能的服务,互相配合,非常适合于后端的微服务架构。容器引擎(container engine):类似于vmware或者virtualbox。容器(container):类似于运行起来的虚拟机。镜像(image):类似于虚拟机.vm文件。

撬动未来的支点的专栏 207

Docker 命令(快速理解)

最近在看docker,整理了部分命令出来,我都是用大白话写出来的,快速理解!言简意赅,后续继续补充。。。大家将就着看。 #service docker start 开启docker #service docker restart 重启docker 使用Docker 中国加速器: vi /etc/docker/daemon.json #添加后: { "registry-mi...

那杯热咖啡 1072
上一篇: 十大正在快速演进的Docker项目
下一篇: 暂别博客,明年3月份后再来
minimicall
博客等级 码龄18年 407粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值