提交 e176d775 编写于 作者: K Kou Shuang

Docker概念

上级 d9534ba9
- 公众号和Github待发文章:[数据库:数据库连接池原理详解与自定义连接池实现](https://www.fangzhipeng.com/javainterview/2019/07/15/mysql-connector-pool.html)
- [基于JDBC的数据库连接池技术研究与应用](http://blog.itpub.net/9403012/viewspace-111794/)
- [数据库连接池技术详解](https://juejin.im/post/5b7944c6e51d4538c86cf195)
数据库连接本质就是一个 socket 的连接。数据库服务端还要维护一些缓存和用户权限信息之类的 所以占用了一些内存
连接池是维护的数据库连接的缓存,以便将来需要对数据库的请求时可以重用这些连接。为每个用户打开和维护数据库连接,尤其是对动态数据库驱动的网站应用程序的请求,既昂贵又浪费资源。**在连接池中,创建连接后,将其放置在池中,并再次使用它,因此不必建立新的连接。如果使用了所有连接,则会建立一个新连接并将其添加到池中。**连接池还减少了用户必须等待建立与数据库的连接的时间。
操作过数据库的朋友应该都知道数据库连接池这个概念,它几乎每天都在和我们打交道,但是你真的了解 **数据库连接池** 吗?
### 没有数据库连接池之前
我相信你一定听过这样一句话:**Java语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁**
......@@ -16,7 +16,7 @@
**下面的学习路线以及方法是笔主根据个人学习经历总结改进后得出,我相信照着这条学习路线来你的学习效率会非常高。**
学习某个知识点的过程中如果不知道看什么书的话,可以查看这篇文章 :[Java 学习必备书籍推荐终极版!](../data/java-recommended-books.md "Java 学习必备书籍推荐终极版!")
学习某个知识点的过程中如果不知道看什么书的话,可以查看这篇文章 :[Java 学习必备书籍推荐终极版!](https://github.com/Snailclimb/JavaGuide/blob/master/docs/data/java-recommended-books.md)
另外,很重要的一点:**建议使用 Intellij IDEA 进行编码,可以单独抽点时间学习 Intellij IDEA 的使用。**
......
**本文只是对Docker的概念做了较为详细的介绍,并不涉及一些像Docker环境的安装以及Docker的一些常见操作和命令。**
<!-- TOC -->
- [一 先从认识容器开始](#一-先从认识容器开始)
- [1.1 什么是容器?](#11-什么是容器)
- [先来看看容器较为官方的解释](#先来看看容器较为官方的解释)
- [再来看看容器较为通俗的解释](#再来看看容器较为通俗的解释)
- [1.2 图解物理机,虚拟机与容器](#12-图解物理机虚拟机与容器)
- [二 再来谈谈 Docker 的一些概念](#二-再来谈谈-docker-的一些概念)
- [2.1 什么是 Docker?](#21-什么是-docker)
- [2.2 Docker 思想](#22-docker-思想)
- [2.3 Docker 容器的特点](#23-docker-容器的特点)
- [2.4 为什么要用 Docker ?](#24-为什么要用-docker-)
- [三 容器 VS 虚拟机](#三-容器-vs-虚拟机)
- [3.1 两者对比图](#31-两者对比图)
- [3.2 容器与虚拟机总结](#32-容器与虚拟机总结)
- [3.3 容器与虚拟机两者是可以共存的](#33-容器与虚拟机两者是可以共存的)
- [四 Docker基本概念](#四-docker基本概念)
- [4.1 镜像(Image):一个特殊的文件系统](#41-镜像image一个特殊的文件系统)
- [4.2 容器(Container):镜像运行时的实体](#42-容器container镜像运行时的实体)
- [4.3仓库(Repository):集中存放镜像文件的地方](#43仓库repository集中存放镜像文件的地方)
- [五 最后谈谈:Build Ship and Run](#五-最后谈谈build-ship-and-run)
- [六 总结](#六-总结)
<!-- /TOC -->
> **Docker 是世界领先的软件容器平台**,所以想要搞懂Docker的概念我们必须先从容器开始说起。
## 一 先从认识容器开始
## 一 认识容器
**Docker 是世界领先的软件容器平台**,所以想要搞懂Docker的概念我们必须先从容器开始说起。
### 1.1 什么是容器?
......@@ -64,7 +39,7 @@
---
> 相信通过上面的解释大家对于容器这个既陌生又熟悉的概念有了一个初步的认识,下面我们就来谈谈Docker的一些概念。
**相信通过上面的解释大家对于容器这个既陌生又熟悉的概念有了一个初步的认识,下面我们就来谈谈Docker的一些概念。**
## 二 再来谈谈 Docker 的一些概念
......@@ -111,7 +86,7 @@
---
> 每当说起容器,我们不得不将其与虚拟机做一个比较。就我而言,对于两者无所谓谁会取代谁,而是两者可以和谐共存。
**每当说起容器,我们不得不将其与虚拟机做一个比较。就我而言,对于两者无所谓谁会取代谁,而是两者可以和谐共存。**
## 三 容器 VS 虚拟机
......@@ -141,11 +116,9 @@
---
> Docker中非常重要的三个基本概念,理解了这三个概念,就理解了 Docker 的整个生命周期。
## 四 Docker基本概念
Docker 包括三个基本概念
**Docker中有非常重要的三个基本概念,理解了这三个概念,就理解了 Docker 的整个生命周期。**
- **镜像(Image)**
- **容器(Container)**
......@@ -178,7 +151,7 @@ Docker 包括三个基本概念
  按照 Docker 最佳实践的要求,**容器不应该向其存储层内写入任何数据** ,容器存储层要保持无状态化。**所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录**,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此, **使用数据卷后,容器可以随意删除、重新 run ,数据却不会丢失。**
### 4.3仓库(Repository):集中存放镜像文件的地方
### 4.3 仓库(Repository):集中存放镜像文件的地方
  镜像构建完成后,可以很容易的在当前宿主上运行,但是, **如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry就是这样的服务。**
......@@ -196,7 +169,7 @@ Docker 包括三个基本概念
---
> Docker的概念基本上已经讲完,最后我们谈谈:Build, Ship, and Run。
**Docker的概念基本上已经讲完,最后我们谈谈:Build, Ship, and Run。**
## 五 最后谈谈:Build Ship and Run
如果你搜索Docker官网,会发现如下的字样:**“Docker - Build, Ship, and Run Any App, Anywhere”**。那么Build, Ship, and Run到底是在干什么呢?
......@@ -209,13 +182,40 @@ Docker 包括三个基本概念
**Docker 运行过程也就是去仓库把镜像拉到本地,然后用一条命令把镜像运行起来变成容器。所以,我们也常常将Docker称为码头工人或码头装卸工,这和Docker的中文翻译搬运工人如出一辙。**
## 六 总结
### 七 简单了解一下Docker底层原理
本文主要把Docker中的一些常见概念做了详细的阐述,但是并不涉及Docker的安装、镜像的使用、容器的操作等内容。这部分东西,希望读者自己可以通过阅读书籍与官方文档的形式掌握。如果觉得官方文档阅读起来很费力的话,这里推荐一本书籍《Docker技术入门与实战第二版》。
Docker 技术是基于 LXC(Linux container- Linux容器)虚拟容器技术的。
> LXC,其名称来自Linux软件容器(Linux Containers)的缩写,一种操作系统层虚拟化(Operating system–level virtualization)技术,为 Linux 内核容器功能的一个用户空间接口。它将应用软件系统打包成一个软件容器(Container),内含应用软件本身的代码,以及所需要的操作系统核心和库。通过统一的名字空间和共用 API 来分配不同软件容器的可用硬件资源,创造出应用程序的独立沙箱运行环境,使得Linux用户可以容易的创建和管理系统或应用容器。
LXC 技术主要是借助Linux内核中提供的CGroup功能和 name space 来实现的,通过 LXC 可以为软件提供一个独立的操作系统运行环境。
**cgroup 和 namespace 介绍:**
- **namespace 是 Linux 内核用来隔离内核资源的方式。** 通过 namespace 可以让一些进程只能看到与自己相关的一部分资源,而另外一些进程也只能看到与它们自己相关的资源,这两拨进程根本就感觉不到对方的存在。具体的实现方式是把一个或多个进程的相关资源指定在同一个 namespace 中。Linux namespaces 是对全局系统资源的一种封装隔离,使得处于不同 namespace 的进程拥有独立的全局系统资源,改变一个 namespace 中的系统资源只会影响当前 namespace 里的进程,对其他 namespace 中的进程没有影响。
(以上关于 namespace 介绍内容来自https://www.cnblogs.com/sparkdev/p/9365405.html ,更多关于namespace 的呢内容可以查看这篇文章 )。
- **CGroup 是 Control Groups 的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组 (process groups) 所使用的物力资源 (如 cpu memory i/o 等等) 的机制。**
(以上关于 CGroup 介绍内容来自 https://www.ibm.com/developerworks/cn/linux/1506_cgroup/index.html ,更多关于CGroup 的呢内容可以查看这篇文章 )。
**cgroup 和 namespace 两者对比:**
两者都是将进程进行分组,但是两者的作用还是有本质区别。namespace是为了隔离进程组之间的资源,而cgroup是为了对一组进程进行统一的资源监控和限制。
## 八 总结
本文主要把Docker中的一些常见概念做了详细的阐述,但是并不涉及Docker的安装、镜像的使用、容器的操作等内容。这部分东西,希望读者自己可以通过阅读书籍与官方文档的形式掌握。如果觉得官方文档阅读起来很费力的话,这里推荐一本书籍《Docker技术入门与实战第二版》。
## 九 推荐阅读
- [10分钟看懂Docker和K8S](https://zhuanlan.zhihu.com/p/53260098)
- [从零开始入门 K8s:详解 K8s 容器基本概念](https://www.infoq.cn/article/te70FlSyxhltL1Cr7gzM)
## 十 参考
- [Linux Namespace和Cgroup](https://segmentfault.com/a/1190000009732550)
- [LXC vs Docker: Why Docker is Better](https://www.upguard.com/articles/docker-vs-lxc)
- [CGroup 介绍、应用实例及原理描述](https://www.ibm.com/developerworks/cn/linux/1506_cgroup/index.html)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册