b2c信息网

您现在的位置是:首页 > 热点问题 > 正文

热点问题

docker底层设计与源码分析(docker 分层原理与内部结构)

hacker2022-10-02 17:30:27热点问题79
本文目录一览:1、《Docker源码分析》epub下载在线阅读全文,求百度网盘云资源2、

本文目录一览:

《Docker源码分析》epub下载在线阅读全文,求百度网盘云资源

《Docker源码分析》(孙宏亮)电子书网盘下载免费在线阅读

链接:

提取码:UMRF  

书名:Docker源码分析

豆瓣评分:6.4

作者:孙宏亮

出版社: 机械工业出版社

出版年: 2015-8-1

页数: 264

内容简介

本书是一本引导读者深入了解Docker实现原理的技术普及读物,主要目标是通过对Docker架构和源代码的详细讲解和解剖,帮助读者对Docker的底层实现有一个全面的理解。

作者通过大量的流程图和代码片段对Docker的架构、Docker的重要模块,特别是对Swarm、Machine和Compose这三个模块进行了详细介绍和深度剖析,无论是Docker的使用者还是开发者,通过阅读此书都可以对Docker有更深刻的理解,能够更好的使用或者开发Docker。

作者简介

孙宏亮

硕士,浙江大学毕业,现为DaoCloud软件工程师,主要负责企业级容器云平台的研发工作。数年来一直从事云计算、PaaS领域的研究与实践,是国内较早一批接触Docker的先行者,同时也是Docker技术的推广者。

如何系统地学习Docker?

1Docker 技术可谓是近年最火热的技术之一,铺天盖地的技术论坛和各种讲座,大家都在分享关于如何容器化及如何使用Docker优化自己运维和开发流程的经验。随着Docker技术的逐渐普及,使用Docker已经不再是一个难题。现在更加重要的是生产环境容器化的最佳实践,另外就是容器的编排框架之争。但是,对于技术人员来说,除去Docker 外表的繁华外,什么是容器,容器到底是怎么创建的,容器底层的技术探秘也是非常重要的。2014年开始接触 Docker的时候,经历了从最初的新奇—感叹竟然还有Docker 这样的好工具,到逐渐熟悉Docker的各种功能,尝试在生产环境中使用Docker技术的过程。但是,每每被人问到:“Docker技术到底是怎么实现的呢”我只能粗粗浅浅地说:“Docker是使用Linux Kernel的Namespace 和 Cgroups实现的一种容器技术。”那么,什么是Namespace,什么是Cgroups,Docker是怎么使用它们的,容器到底是怎么一步步被创建出来的.问到这些,我就会支支吾吾地不知所以。由此可见,了解容器技术的底层技术,然后明白它们是如何工作的,尤为重要,这些才是整个容器技术的基石,掌握了这些基石才能更加容易地向上攀登。

2从docker的用途上来考虑,看docker能否解决你工作中遇到的问题。例如在实际开发过程中,经常遇到的持续集成问题,软件开发,测试,部署,如何做成自动化的。配合github Jenkins和docker实现自动化部署,系统持续集成。docker最重要的是编排,如何合理有效稳定的管理各个容器,调度容器。可以看看k8s,自己动手搭建跑跑看。docker本身并没有引入新的技术,都是在linux原有的基础上做的融合。可以关注docker源码分析。UCloud也支持Docker,推出了UDocker产品。UCloud - 专业云计算服务商。

如何学习Docker

如何学习Docker

对于在校学生而言,应该如何去学习docker?毕竟学校没有具体的应用需求作为引导,所以应该如何去研究Docker?还有,Docker的源代码有没有必要去研究?

首先我说明下,我是一位在浙江大学VLIS实验室云计算项目组的学生,使用过Docker,研究过Docker及其源码,也定制过Docker。

对于学生如何学习Docker,我认为首先要看一下学生个人的知识背景、能利用的资源资源、以及个人兴趣和发展方向。

1.学习Docker,如果没有云计算的基本知识,以及内核的基本知识,那么学习并理解起来会稍吃力。作为容器,Docker容器的优势在哪,不足在哪,最好了解容器的实现是怎样的(简单了解);拥有镜像管理,Docker又该如何体现软件开发,集成,部署,发布,再迭代的软件生命周期管理优势。以上两点我认为最为关键,有这两方面的认识势必会对之后的工作帮助巨大。

2.关于学习资源,起码的硬件设施总是要有的。Docker及其生态的发展很快,不使用纯理论肯定收效甚微。另外,资源还包括Docker官方,各大电子媒体平台,技术论坛,开源社区等,往往大拿的观点能点破自己的困惑,或者让自己知道哪方面的认识还很欠缺,以及让自己少走很多的弯路。

3.个人兴趣的话,归结为强扭的瓜不甜。起码应该认同Docker的设计价值,以及Docker的未来潜力,当然有依据的批判Docker并带动大家的思考,也是深切关注的表现。

4.个人发展方向,我认为如果需要把Docker当作软件生命周期管理工具的话,那用好Docker最为重要,API及命令的理解与使用是必需的。如果专注系统设计方面,那么除Docker以上的知识与经验之外,若有Docker源码的学习与理解,那么这些肯定会让你的Docker水平提高一个层次。

2014-11-21 8 0

xds2000

学习Docker,最大的好处是跟进新技术发展方向。我觉得在校生应该没有多少硬性需求在Docker的研究上,这也是为什么学校没做具体应用要求的原因。最实际的做法是看一些Docker使用案例,自己实践出一些经验应该会再以后的社会实践中起到作用。

研究docker的源代码,应该到你下定决心从事云计算方面的事业或者研究,那么你就需要以研究者的身份去做仔细的源码分析的工作。

2014-11-21 3 0

刘勃GTDer

我作为参加工作的过来人来说,我认为只有你真正参加工作后,在工作中学习跟有意义,毕竟Docker知识云计算其中的一个软件平台而已,说不来等你毕业了,新的技术出现Docker不一定是唯一选择。

作为学生了解新技术确实无可厚非,一定要能把理论转化为生产力才是正道。

2014-12-15 3 0

9lives - 爱生活,爱云计算。

学习任何一个开源新技术,首先问自己几个问题:

1. 为什要学习它?

2. 学习它需要了解哪些相关知识点?

3. 如何快速学习?

4. 该技术的使用场景是什么?

拿我个人的学习经验来举例(本人之前比较了解OpenStack)

为什要学习docker?

回答:

docker是轻量级虚拟化技术,docker使linux容器技术的应用更加简单和标准化

docker的速度很快,容器启动时毫秒级的

docker将开发和运维职责分清

docker解决了依赖地狱问题

docker支持几乎所有操作系统

docker有着飞速发展的生态圈

很多IT巨头逐渐加入和支持

学习它需要了解哪些相关知识点?

回答:

云计算概念相关(restapi, 微服务,OpenStack)

Linux 系统管理(软件包管理,用户管理,进程管理等)

Linux 内核相关(Cgroup, namespace 等)

Linux 文件系统和存储相关(AUFS,BRFS,devicemapper 等)

Linux 网络(网桥,veth,iptables等)

Linux安全相关(Appmor,Selinux 等)

Linux进程管理(Supervisord,Systemd etc)

Linux容器技术(LXC等)

开发语言(Python, GO,Shell 等)

3.如何快速学习?

回答:个人体会最好有一个实际的需求或项目来边实践边学习,入门可以参考(第一本docker书)写的不错,非常适合入门。除此之外,阅读牛人的blog比如官方blog

最后,参与社区互动也是很好的学习方式。

该技术的使用场景是什么? 回答:docker非常适用于dev/test CI/CD 场景,用完就扔。还有就是PasS了。

欢迎大家讨论。

2015-05-21 3 0

西弗尔 - 要么牛逼,要么滚蛋

你好!我也是在校的学生,也在自己学习docker,多多交流啊!

2015-05-23 1 1

田浩浩 - wizmacau developer

https:// github.com /llitfkitfk/docker-tutorial-cn/

BTW: 熟读docker文档

2014-11-21 0 0

tuxknight

楼上各位说的都很好,我再补充一点:

找份相关的实习工作

2015-07-22 0 0

lancer

工作和研究是两个方向我个人认为,工作需要通过你的实际效能为企业带来经济效益,而研究的话可以专注某个点。但是研究离不开工作,因为工作可以让你更好的理会技术带来的价值,以及如何提供更好的服务,用户使用场景需要那些技术的突破。有了这些认识,然后更加专注的研究某个技术点,这样或许可以说技术和商业是分不开的。

2015-08-25 0 0

绿剑色影

docker现在十分火热,值得学习一下。

如何编译Docker源码

本文根据docker官方给出的docker代码编译环境搭建指南做更深入的分析。官方给出的指导比较简单,但是由于国内的网络问题经常会编译失败,了解了编译步骤后,也可以结合自身遇到的网络问题进行“规避”。

docker的编译环境实际上是创建一个docker容器,在容器中对代码进行编译。 如果想快速的查看编译环境搭建指导,而不关注环境搭建的机制和细节,可以直接跳到最后一章“总结”。

前提

机器上已经安装了docker,因为编译环境是个docker容器,所以要事先有docker(daemon),后面会创建个编译环境容器,在容器里面编译代码。本文中使用物理机,物理机上运行着docker (daemon)。

机器(物理机)上安装了git 。 后续使用git下载docker源码

机器(物理机)上安装了make。

下载ubuntu 14.04的docker镜像

下载docker源码

git clone

会把代码下载到当前目录下,后面会把代码拷贝到容器中。

编译前分析

官方给的编译方法是make build 和 make binary等。下面先分析Makefile,看懂Makefile后,编译环境的准备流程就比较清楚了。

Makefile

在下载的docker源码中可以看到它的Makefile,Makefile中比较关键的几个参数:

DOCKER_MOUNT := $(if $(BIND_DIR),-v "$(CURDIR)/$(BIND_DIR):/go/src/github.com/docker/docker/$(BIND_DIR)") DOCKER_MOUNT 表示创建容器时的mount参数。因为编译环境是一个容器,在后续的步骤中启动容器时使用DOCKER_MOUNT参数,会将物理机上的目录mount给容器容器,容器中该目录是编译生成docker二进制文件的目录。

DOCKER_FLAGS := docker run --rm -i --privileged $(DOCKER_ENVS) $(DOCKER_MOUNT) 这是后面创建docker容器时的命令行的一部分,其中包含了前面的DOCKER_MOUNT参数。

DOCKER_IMAGE := docker-dev$(if $(GIT_BRANCH),:$(GIT_BRANCH)) 这是docker image参数,镜像的名字是docker-dev,以当前git中docker版本作为tag名。这个镜像是在make build一步做出来的。

DOCKER_RUN_DOCKER := $(DOCKER_FLAGS) "$(DOCKER_IMAGE)" 创建docker容器的命令行,组合了前面的DOCKER_FLAGS 和 DOCKER_IMAGE 。 从命令行中可以看出,启动容器使用的参数有 --rm -i --privileged,使用了一些环境变量,还有使用了-v参数把物理机上目录mount给容器,在容器中编译好二进制文件后放到该目录中,在物理机上就能获得docker二进制文件。启动的的docker 容器镜像名字是docker-dev。下文会介绍docker-dev镜像是怎么来的。

由于官方给出的“构建编译环境”的方法是执行 make build,下面在Makefile中看到build分支是这样的:

make build时会调用 docker build -t "$(DOCKER_IMAGE)" . 去制作一个叫做DOCKER_IMAGE的镜像。

进行源码编译的方式是执行 make binary来编译代码,在Makefile中make binary的分支如下:

make binary除了进行 make build以外,会执行$(DOCKER_RUN_DOCKER),即上文提到的docker run命令行。由于执行过了build,会build出来docker-dev镜像,所以在docker run时直接使用前面build出来的镜像。docker run时的命令行参数是hack/make.sh binary。make binary的过程实际上是创建一个容器,在容器中执行hack/make.sh binary脚本。接下来会详细介绍make build和make binary所做的内容。

make build

根据官方的指导,先执行make build来搭建编译环境。上面分析了,make build实际上是制作了一个镜像,这个镜像里会包含编译代码所需的环境。下面来介绍下这个镜像。

Dockerfile

在和Makefile相同的目录下(源码的根目录),有Dockerfile。执行make build 相当于调用docker build,使用的就是该Dockerfile。Dockerfile中的几个主要步骤(有些步骤这里略过):

FROM ubuntu:14.04 使用ubuntu 14.04作为基础镜像;在宿主机上,要事先下载好ubuntu 14.04镜像。

安装一些编译需要的软件;

用git下载lvm2源码,并编译安装;

下载并安装GO 1.5.1;

安装GO相关的tools 可以做code coverage test 、 go lint等代码检查

安装registry和notary server;

安装docker-py 后面跑集成测试用的

将物理机的contrib/download-frozen-image.sh 脚本拷贝到镜像中/go/src/github.com/docker/docker/contrib/

运行contrib/download-frozen-image.sh 制作镜像 实际上这一步只是下载了3个镜像的tar文件。注意:docker build相当于创建一个临时的容器(在临时的容器中执行Dockerfile中的每一步,最后在保存成镜像),“运行contrib/download-frozen-image.sh 制作镜像”这个动作出现在Dockerfile中,相当于在docker build所创建的临时的容器中下载docker镜像,有docker-in-docker容器嵌套的概念。下一小节会对download-frozen-image.sh脚本做详细分析。

ENTRYPOINT ["hack/dind"] 做出来的镜像,使用它启动的容器可以自动运行源码目录中的hack/dind脚本。 dind这个脚本是a wrapper script which allows docker to be run inside a docker container 。后面的小节会对hack/dind脚本做详细的分析。

COPY . /go/src/github.com/docker/docker 把物理机上的docker源码文件打入到镜像中

download-frozen-image.sh脚本

上一小节里提到,在Dockerfile中,有一步会调用contrib/download-frozen-image.sh ,它主要作用是下载3个镜像的tar包,供后续docker load。在Dockerfile中的调用方式如下:

download-frozen-image.sh脚本中会依次解析参数,其中/docker-frozen-images作为base dir,后面下载的东西全放到这里。之后的3个参数是镜像,里面包含了镜像名(例如busybox)、镜像tag(例如latest)、镜像id(例如d7057cb020844f245031d27b76cb18af05db1cc3a96a29fa7777af75f5ac91a3),后面会在循环中依次下载这3个镜像的tar文件。

download-frozen-image.sh脚本中会通过curl从registry上获取如下信息:

token:获取token,后面curl获取的其他信息时都需要使用token。例如本例中 token='signature=9088f0552b1b147364e07bdd48857dd77c0d94ee,repository="library/busybox",access=read'

ancestryJson:把镜像相关联的历史层次的id也都获取到,因为每一层的tar都需要下载。本例中 ancestryJson='["d7057cb020844f245031d27b76cb18af05db1cc3a96a29fa7777af75f5ac91a3", "cfa753dfea5e68a24366dfba16e6edf573daa447abf65bc11619c1a98a3aff54"]'

这里可以看到这个镜像只有2层,两层的id这里都列了出来。 每个镜像包含的层数不同,例如。第三个镜像jess/unshare共有10层。

VERSION、json、tar: 每一层镜像id的目录下,都下载这3个文件,其中VERSION文件内容目前都是“1.0”,json文件是该层镜像的json文件,tar文件是该层镜像的真正内容,以.tar保存。

下载好的各层镜像目录结构如下:

$ls

$tree

hack/dind脚本

在Dockerfile中,ENTRYPOINT ["hack/dind"] ,表示在镜像启动后,运行该脚本,下面分析一下这个脚本的功能。

脚本在代码根目录下的hack目录中,作者对脚本的描述是 DinD: a wrapper script which allows docker to be run inside a docker container.

就是可以在docker容器中创建docker容器。它就做了一个事,那就是在容器中创建好cgroup目录,并把各个cgroup子系统mount上来。

为了方便理解,我们可以先看看物理机。在宿主机上如果创建docker容器,需要宿主机上必须事先mount cgroup子系统,因为cgroup是docker容器的一个依赖。同理docker-in-docker也要求外层的docker容器中有cgroup子系统,dind脚本在容器启动后,先去/proc/1/cgroup中获取cgroup子系统,然后依次使用mount命令,将cgroup mount上来,例如mount -n -t cgroup -o "cpuset" cgroup "/cgroup/cpuset"

最终在运行make build后,会制作出一个叫docker-dev的镜像。

make binary

执行make binary 就可以编译出docker二进制文件。编译出来的二进制文件在源码目录下的bundles/1.10.0-dev/binary/docker-1.10.0-dev ,其中还包含md5和sha256文件。

Makefile中的binary

Makefile中关于make binary流程是

先执行build,即上一节介绍的,制作docker-dev编译环境镜像。

再执行DOCKER_RUN_DOCKER,创建容器,DOCKER_RUN_DOCKER就是执行docker run,使用docker-dev镜像启动容器,并且会mount -v 将容器生成二进制文件的路径与宿主机共享。DOCKER_RUN_DOCKER在“编译前分析”一章中有介绍。启动的容器运行的命令行是 hack/make.sh binary 。docker run完整的形式如下:

docker run --rm -i --privileged -e BUILDFLAGS -e DOCKER_CLIENTONLY -e DOCKER_DEBUG -e DOCKER_EXECDRIVER -e DOCKER_EXPERIMENTAL -e DOCKER_REMAP_ROOT -e DOCKER_GRAPHDRIVER -e DOCKER_STORAGE_OPTS -e DOCKER_USERLANDPROXY -e TESTDIRS -e TESTFLAGS -e TIMEOUT -v "/home/mubai/src/docker/docker/bundles:/go/src/github.com/docker/docker/bundles" -t "docker-dev:master" hack/make.sh binary

hack/make.sh脚本

上一节提到的make binary中创建的容器启动命令是hack/make.sh binary,运行容器中的(docker源码目录下的)hack/make.sh脚本,参数为binary。

make.sh中根据传入的参数组装后续编译用的flags(BUILDFLAGS),最后根据传入的参数依次调用 hack/make/目录下对应的脚本。例如我们的操作中传入的参数只有一个binary。那么在make.sh的最后,会调用hack/make/binary脚本。

hack/make/binary脚本中,就是直接调用go build进行编译了,其中会使用BUILDFLAGS LDFLAGS LDFLAGS_STATIC_DOCKER等编译选项。

如果最终生成的docker二进制文件不在bundles/1.10.0-dev/binary/目录下,那么可能是编译参数BINDDIR设置的不正确,可以在执行make binary时增加BINDDIR参数,例如

make BINDDIR=. binary , 将BINDDIR设置为当前目录。

总结

编译步骤总结:

1、编译前在物理机上安装好make、git,并下载好docker代码。下载好ubuntu:14.04镜像

2、执行make build 。这步执行完会在物理机上创建出一个docker-dev的镜像。

3、执行make binary 。 这步会使用docker-dev镜像启动一个容器,在容器中编译docker代码。编译完成后在物理机上直接可以看到二进制文件。默认二进制文件在 bundles/1.10.0-dev/binary/目录下

4、docker代码里有很多test,可以使用此套编译环境执行test,例如 make test 。 更多参数可以看Makefile

搭建环境心得:

1、在make build时,使用Dockerfile创建制作镜像,这个镜像有40多层,其中一层失败就会导致整个build过程失败。由于Dockerfile中很多步骤是要连到国外的网站去下载东西,很容易失败。好在docker build有cache机制,如果前面的层成功了,下次重新build时会使用cache跳过,节省了很多时间。所以如果make build中途失败(一般是由于国内连国外的网络原因),只要重新执行make build就会在上次失败的地方继续,多试几次可以成功。

2、如果其他人已经build出了docker-dev镜像,可以把它下载到自己的环境上。这样在自己make build时,会跳过那些已经在本地存在的层,可以节省时间。

3、每一次编译会自动删除掉前面已经生成的二进制文件,所以不用担心二进制文件不是最新的问题。

Docker自学教程

Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

一个完整的Docker有以下几个部分组成:

Docker核心解决的问题是利用LXC来实现类似VM的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。同VM的方式不同, LXC 其并不是一套硬件虚拟化方法 - 无法归属到全虚拟化、部分虚拟化和半虚拟化中的任意一个,而是一个操作系统级虚拟化方法, 理解起来可能并不像VM那样直观。所以我们从虚拟化到docker要解决的问题出发,看看他是怎么满足用户虚拟化需求的。

用户需要考虑虚拟化方法,尤其是硬件虚拟化方法,需要借助其解决的主要是以下4个问题:

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类形

Docker面向对象容器对象镜像类

Docker采用 C/S架构 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。

Docker daemon 一般在宿主主机后台运行,等待接收来自客户端的消息。 Docker 客户端则为用户提供一系列可执行命令,用户用这些命令实现跟 Docker daemon 交互。

Docker 特性

在docker的网站上提到了docker的典型场景:

由于其基于LXC的轻量级虚拟化的特点,docker相比KVM之类最明显的特点就是启动快,资源占用小。因此对于构建隔离的标准化的运行环境,轻量级的PaaS(如dokku), 构建自动化测试和持续集成环境,以及一切可以横向扩展的应用(尤其是需要快速启停来应对峰谷的web应用)。

Docker并不是全能的,设计之初也不是KVM之类虚拟化手段的替代品,简单总结几点:

针对1-2,有windows base应用的需求的基本可以pass了; 3-5主要是看用户的需求,到底是需要一个container还是一个VM, 同时也决定了docker作为 IaaS 不太可行。

针对6,7虽然是docker本身不支持的功能,但是可以通过其他手段解决(disk quota, mount --bind)。总之,选用container还是vm, 就是在隔离性和资源复用性上做权衡。

另外即便docker 0.7能够支持非AUFS的文件系统,但是由于其功能还不稳定,商业应用或许会存在问题,而AUFS的稳定版需要kernel 3.8, 所以如果想复制dotcloud的成功案例,可能需要考虑升级kernel或者换用ubuntu的server版本(后者提供deb更新)。这也是为什么开源界更倾向于支持ubuntu的原因(kernel版本)

Docker并非适合所有应用场景,Docker只能虚拟基于Linux的服务。Windows Azure 服务能够运行Docker实例,但到目前为止Windows服务还不能被虚拟化。

可能最大的障碍在于管理实例之间的交互。由于所有应用组件被拆分到不同的容器中,所有的服务器需要以一致的方式彼此通信。这意味着任何人如果选择复杂的基础设施,那么必须掌握应用编程接口管理以及集群工具,比如Swarm、Mesos或者Kubernets以确保机器按照预期运转并支持故障切换。

Docker在本质上是一个附加系统。使用文件系统的不同层构建一个应用是有可能的。每个组件被添加到之前已经创建的组件之上,可以比作为一个文件系统更明智。分层架构带来另一方面的效率提升,当你重建存在变化的Docker镜像时,不需要重建整个Docker镜像,只需要重建变化的部分。

可能更为重要的是,Docker旨在用于弹性计算。每个Docker实例的运营生命周期有限,实例数量根据需求增减。在一个管理适度的系统中,这些实例生而平等,不再需要时便各自消亡了。

针对Docker环境存在的不足,意味着在开始部署Docker前需要考虑如下几个问题。首先,Docker实例是无状态的。这意味着它们不应该承载任何交易数据,所有数据应该保存在数据库服务器中。

其次,开发Docker实例并不像创建一台虚拟机、添加应用然后克隆那样简单。为成功创建并使用Docker基础设施,管理员需要对系统管理的各个方面有一个全面的理解,包括Linux管理、编排及配置工具比如Puppet、Chef以及Salt。这些工具生来就基于命令行以及脚本。

《Docker全攻略》epub下载在线阅读,求百度网盘云资源

《Docker全攻略》张涛电子书网盘下载免费在线阅读  

链接:

密码:rm80  

书名:Docker全攻略

作者名:张涛

出版社:电子工业出版社

出版年份: 2016-4

页数:540

内容介绍:

Docker 是一个充满挑战性和趣味性的开源项目,它彻底释放了Linux 虚拟化的威力,极大地缓解了云计算资源供应紧张的局面。与此同时,Docker 也成倍地降低了云计算供应成本,让应用的部署、测试和开发变成了一件轻松、高效和有意思的事情。《Docker全攻略》由浅入深,从基本原理入手,系统讲解了Docker 的原理、构建与操作。同时讲解了Docker 在实际生产环境中的使用,最后还探讨了Docker 的底层实现技术和基于Docker 的相关开源技术。前4 章为基础内容,供用户理解Docker 和配置Docker 运行环境。第5 章到第9 章为Docker 基本操作,主要讲解了Docker命令操作实例和Docker 命令实现原理。第10 到第12 章为Docker 高级操作,介绍了Docker 内核相关知识点,适合高级用户参考其内核运行机制。第13 章到第15 章给出了Docker 典型应用场景和实践案例。

发表评论

评论列表

  • 孤央并安(2022-10-03 04:24:24)回复取消回复

    在的不足,意味着在开始部署Docker前需要考虑如下几个问题。首先,Docker实例是无状态的。这意味着它们不应该承载任何交易数据,所有数据应该保存在数据库服务器中。 其次,开发Docker实例并不像创建一台虚拟机、添加应用然后克隆那样简单。为成功创建并使用Docker基础设施,管理员需要对系统

  • 北槐辞慾(2022-10-02 23:26:36)回复取消回复

    源码目录下的bundles/1.10.0-dev/binary/docker-1.10.0-dev ,其中还包含md5和sha256文件。 Makefile中的binary Makefile中关于make binary流程是 先执行build,即上一节介绍的,制