为什么有docker
在开发中我们经常会遇到这样的问题:我的代码在本地是好好的,为什么放到另一个环境上就跑不起来了呢?
这时候就牵扯到了另一个因素环境。我们的开发环境受制很多因素,比如我用win或者mac os开发的,但是部署到了centos上面了,造成的环境影响。还有配置,数据库版本,等等一系列的问题。
因为环境的不同,当运维拿到我们的代码的时候就会很头疼。所以急切的希望出现一种技术来统一这些环境。你开发就不要只提交代码给我了,把你的代码连着你的开发环境直接打包丢给我吧。或者说我来弄一套环境,你在我这上面开发。
所以这时候docker就出现了,来解决我们这些一套环境的问题。
什么是docker
我们平时都在说开发应用程序,都是一种狭义的理解,到底何为应用应用程序?对于我们开发人员来说,可执行的war包,jar包,他算一个应用程序。他们又无法独立运行,war包需要依赖tomcat提供的web环境,jar包需要jdk提供的api和环境支持。tomcat,jdk本身不是终端环境,他们又需要依附于操作系统。再往下走硬件环境又是对操作系统的支撑。
docker扩展了应用程序的概念,从狭义上的概念,扩展为广义上。war包、jar包、Tomcat容器、MySQL数据库只能属于狭义上的应用程序,而广义上的应用程序应该包含可以支撑起他的整个依赖环境与配置。
前阵子我需要使用
ShowDoc
,百度安装流程,缺发现他需要依赖
Nginx
做反向代理;同时有需要
Php环境
来动态生成静态页面。我明明只想使用
ShowDoc
这个软件,但是却要这么多的上层依赖,而docker认为单独的一个完整的应用程序应该是:应用程序本身+其所有的依赖环境,docker把这一套东西,全部打包到一个
集装箱
,我们拿到集装箱后可以直接使用,而不需要再依赖于其他环境。
docker三要素
镜像
镜像简单来说就是魔板,Docker镜像(image)就是一个只读的魔板。镜像可以用来创建Docker容器,一个镜像可以创建很多容器。
docerk | 面向对象 |
---|---|
容器 | 对象 |
镜像 | 类 |
User tig = new User();
User jay = new User();
User vae = new User();
容器
镜像的实例,Docker利用容器独立运行的一个或一组应用。容器是镜像创建的运行实例。
它可以被启动,开始,停止。每个容器都是相互隔离,保证安全的平台。
可以把容器看做是一个简易版的Linux环境和运行在其中的应用程序
仓库
仓库(Repository)是几种存放镜像文件的场所。
仓库和仓库注册服务器是由区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含多个镜像,每个镜像有不同的标签(tag)