Docker 的优点和注意事项
Docker 从 2013 年发展到现在,它的普及率已经可以和最常用的 MySQL 和 Redis 并驾齐驱了,Docker 是什么?它有什么优点?
1)什么是 Docker ?
Docker 是一个开源(开放源代码)的应用容器引擎,可以方便地对容器进行管理。可通过 Docker 打包各种环境应用配置,比如安装 JDK 环境、发布自己的 Java 程序等,然后再把它发布到任意 Linux 机器上。
Docker 中有三个重要的概念,具体如下:
- 镜像(Image):一个特殊的文件操作系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数(如匿名卷、环境变量、用户等), 镜像不包含任何动态数据,其内容在构建之后也不会被改变。
- 容器(Container):它是用来运行镜像的。例如,我们拉取了一个 MySQL 镜像之后,只有通过创建并启动 MySQL 容器才能正常的运行 MySQL,容器可以进行创建、启动、停止、删除、暂停等操作。
- 仓库(Repository):用来存放镜像文件的地方,我们可以把自己制作的镜像上传到仓库中,Docker 官方维护了一个公共仓库 Docker Hub,你也可以点击这里查询并下载所有的公共镜像。
在 Docker 出现之前,我们如果要发布自己的 Java 程序,就需要在服务器上安装 JDK(或者 JRE)、Tomcat 容器,然后配置 Tomcat 参数,对 JVM 参数进行调优等操作。然而如果要在多台服务器上运行 Java 程序,则需要将同样繁杂的步骤在每台服务器都重复执行一遍,这样显然比较耗时且笨拙的。
后来有了虚拟机的技术,我们就可以将配置环境打包到一个虚拟机镜像中,然后在需要的服务器上装载这些虚拟机,从而实现了运行环境的复制,但虚拟机会占用很多的系统资源,比如内存资源和硬盘资源等,并且虚拟机的运行需要加载整个操作系统,这样就会浪费掉好几百兆的内存资源,最重要的是因为它需要加载整个操作系统所以它的运行速度就很慢,并且还包含了一些我们用不到的冗余功能。
因为虚拟机的这些缺点,所以在后来就有了 Linux 容器(Linux Containers,LXC),它是一种进程级别的 Linux 容器,用它可以模拟一个完整的操作系统。相比于虚拟机来说,Linux 容器所占用的系统资源更少,启动速度也更快,因为它本质上是一个进程而非真实的操作系统,因此它的启动速度就比较快。
而 Docker 则是对 Linux 容器的一种封装,并提供了更加方便地使用接口,所以 Docker 一经推出就迅速流行起来。Docker 和虚拟机(VM)区别如下图所示:
Docker 具备以下 6 个优点:
- 轻量级:Docker 容器主要利用并共享主机内核,它并不是完整的操作系统,因此它更加轻量化;
- 灵活:它可以将复杂的应用程序容器化,因此它非常灵活和方便;
- 可移植:可以在本地构建 Docker 容器,并把它部署到云服务器或任何地方进行使用;
- 相互隔离,方便升级:容器是高度自给自足并相互隔离的容器,这样就可以在不影响其他容器的情况下更换或升级你的 Docker 容器了;
- 可扩展:可以在数据中心内增加并自动分发容器副本;
- 安全:Docker 容器可以很好地约束和隔离应用程序,并且无须用户做任何配置。</