目录
2010年,几个的年轻人,就在美国的旧金山成立了一家公司 dotcloud。 从事LXC(Linux Container容器)有关的容器技术!Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源。他们将自己的技术(容器化技术)命名就是 Docker。 为了在IT巨头的夹缝中活下去,2013年,dotCloud的创始人将dotCloud的核心引擎开源。 2014年6月9日,Docker1.0发布!1.0版本的发布,标志着docker平台已经足够成熟稳定,并可以被应用到生产环境。
我们进行微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。
分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。
在数百上千台服务中重复部署,环境不一定一致,会遇到各种问题
在大型项目设计时组件较多,运行环境也较为复杂,部署时会碰到一些问题:
依赖关系复杂,容易出现兼容性问题
开发、测试、生产环境有差异
?我们希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销。
Docker的出现使得Docker得以打破过去「程序即应用」的观念。透过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。
Docker是基于Go语言实现的云开源项目。
Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。
Docker通常是指 Docker Engine,它是一个客户端 - 服务器应用程序,由 Docker守护进程、一个REST API指定与守护进程交互的接口、和一个命令行接口(CLI)与守护进程通信(通过封装REST API)。Docker Engine 从 CLI 中接受docker 命令,例如 docker run 、docker ps 来列出正在运行的容器、docker images 来列出镜像,等等。
docker由以下部分组成:
镜像就是把一个应用在硬盘上的文件、及其运行环境、部分系统函数库文件一起打包形成的文件包。这个文件包是只读的。
容器就是将这些文件中编写的程序、函数加载到内存中允许,形成进程,只不过要隔离起来。因此一个镜像可以启动多次,形成多个容器进程。 ?
Docker是一个CS架构的程序,由两部分组成:
服务端(server):Docker守护进程,负责处理Docker指令,管理镜像、容器等
客户端(client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令。
?
开源应用程序非常多,打包这些应用往往是重复的劳动。为了避免这些重复劳动,人们就会将自己打包的应用镜像,例如Redis、MySQL镜像放到网络上,共享使用,就像GitHub的代码共享一样。
DockerHub:DockerHub是一个官方的Docker镜像的托管平台。这样的平台称为Docker Registry。
我们可以将自己的镜像共享到DockerHub,面也可以从DockerHub拉取镜像: