内容简介:相信不少人听过这么一句话:人类的本质是复读机。在软件开发领域也一样,我们总是想寻找更好地方式复制优秀的逻辑或系统。最核心的方法是抽取通用逻辑和组件,把差异化的东西接口化或配置化,达到复用的效果。如
1 前言
相信不少人听过这么一句话:
人类的本质是复读机。
在软件开发领域也一样,我们总是想寻找更好地方式复制优秀的逻辑或系统。最核心的方法是抽取通用逻辑和组件,把差异化的东西接口化或配置化,达到复用的效果。如 Java
的 Build Once, Run Everywhere
,还有 Spring
的强大的抽象能力。这是应用层面的复用, Docker
则在系统层面作文章,让我们可以快速复制一个系统(如CentOS)或一个服务(如Kafka)。
2 Docker 的便利与优势
利用 Docker
,我们可以很快的使用别人已经建立好的镜像来发布一个完整的系统或某个组件。它至少提供了以下便利:
Docker
复制一个系统,我们可以通过增加一台物理机,或者通过虚拟机技术运行多个系统,现在有了 Docker
,还可以通过它来启动一个系统。与其它方式相比, Docker
有以下优势:
-
启动速度快,秒级的启动速度;
-
性能好,近似物理机的性能,不会有过多资源损失和性能浪费;
-
体量小,镜像可以做得更小(MB级),不像虚拟机的几GB;
-
跨平台,能在Linux/Unix/Mac/Windows系统下运行;
-
利于CI/CD,有成熟的技术实践;
-
社区活跃,有大公司背书,应用广泛,镜像资源丰富。
3 Docker核心概念
3.1 镜像Image
说起镜像,不由想起当年拿着U盘捣鼓各种系统的日子。那时会找各种系统的 iso文件
,下载速度还特别慢,几GB的文件呢。那些 iso文件
,就是镜像文件。但这些镜像文件是相对于物理机系统或虚拟机技术而言的,而不是 Docker
的镜像文件。
对于 Docker
而言,镜像会被统一管理,在本地有特定的地方存放镜像,不同的系统位置不一样。一般而言,是无须自己管理镜像文件的, Docker
会有效地管理和组织。列出所有镜像命令如下:
docker images 或docker image ls
Docker
由镜像启动容器,就像通过 iso文件
安装启动系统一样。镜像是通用的,因此也是可以共享的。一般我们可以通过复用别人做好的优秀镜像来提高开发效率。我们只需要在别人镜像的基础上做定制开发即可。例如我们可拉取一个带 JDK
的 Linux
镜像,然后把自己的 Java 应用添加上去,形成自己新的镜像。
为了提高复用率与速度,我们将镜像分层,如下图所示:
如镜像B是基于镜像A打包而成的,则镜像B比镜像A多一层。镜像B包含了镜像A的所有层级。这样做的好处是,不用管理一个大的镜像,而管理层级变化。假如本机已经下载了镜像E,则本机已经有(A, B, C, E),当需要拉取F的时候,不再需要拉取(A, B)了。这利用了 Docker
的缓存技术,另外,在构建新镜像时,同样也使用了缓存。
标签Tag是镜像的重要概念,一般用于标记版本号,对于同一个镜像源名,可以有多个标签,如 redis:5.0.8
、 redis:latest
, 5.0.8
和 latest
都是标签名,默认使用 latest
。
3.2 容器Container
有了镜像后,就可以创建容器了。启动一个容器,就像启动一个进程一样快速,可以通过 docker run
命令启动,如下:
$ docker run hello-world Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
容器提供了软件硬件环境,会消耗物理机资源,同时它还具有状态,相互隔离。可以从一个镜像启动多个不同的容器,如从 Ubuntu
镜像启动多个 Ubuntu
系统。可以通过命令 docker ps
查看当前运行的容器,已经停止的容器不会显示出来。当容器停止时,容器文件并不会消失,可以通过 docker ps -a
查看所有容器。
可以简单理解镜像与容器的关系:
镜像是容器的模板,是没运行没状态的文件,启动容器需要镜像。容器是运行着的、带状态的相互隔离的服务。可以由一个镜像启动多个容器,也可以从一个容器创建一个镜像,但这并不说明两者是可逆的相互转换。
3.3 仓库Repository
仓库很容易理解,就是存放镜像的地方。既然镜像是通用的,可以共享,那就需要一个共享的地方,仓库承担着这样一个责任。这跟 maven
、 npm
等是同样的道理。最大、最常用的仓库当然是官方仓库 Docker Hub
,但国内访问速度也相当感人,可以通过使用国内仓库解决这个问题,如使用阿里的仓库。这跟 GitHub
、 maven
也是何其相似。
我们可以从仓库拉取别人的镜像,也可以把自己构建的镜像推送到仓库上。
4 总结
本次主要讲解一下 Docker
的概念,实践与命令以后再一一道来。
欢迎访问 南瓜慢说 www.pkslow.com 获取更多精彩文章!
欢迎关注微信公众号< 南瓜慢说 >,将持续为你更新...
多读书,多分享;多写作,多整理。
以上所述就是小编给大家介绍的《Docker入门——理解Docker的核心概念》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- redux入门到深度理解
- 深度学习入门必须理解这25个概念
- 直观理解深度学习基本概念(小白入门深度学习)
- Vue入门学习之技术分享-2(深入理解Vue组件)
- 理解这九个基本概念,你就初步入门了机器学习
- 软件工程入门-轻松理解依赖注入 (DI) 和 IoC 容器
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JAVASCRIPT权威指南(第四版)
David Flanagan / 张铭泽、等 / 机械工业出版社 / 2003-1-1 / 99.00
《JavaScript权威指南》全面介绍了JavaScript语言的核心,以及Web浏览器中实现的遗留和标准的DOM。它运用了一些复杂的例子,说明如何处理验证表单数据、使用cookie、创建可移植的DHTML动画等常见任务。本书还包括详细的参考手册,涵盖了JavaScript的核心API、遗留的客户端API和W3C标准DOM API,记述了这些API中的每一个JavaScript对象、方法、性质、......一起来看看 《JAVASCRIPT权威指南(第四版)》 这本书的介绍吧!