猛禽的编程艺术

编程是一门艺术

docker实践入门之一

前戏……呃,前言

docker是什么?

docker是一种容器技术,它的主要功能就是能够让进程在一个隔离的容器环境里运行——在进程看来,它有一整套“独立”的OS环境,包括文件系统,类似于虚拟机。

docker不是什么?

docker 不是虚拟机,它只是一套虚拟运行环境,实际上在host机上用ps可以看到容器里面的进程。实际上docker里用到的环境都是来自于host机,只是相 对隔离而已,类似于python的virtualenv,在每个独立的env里,python程序有独立的python解释器和相应的site- packages,看似隔离的环境,但实际上还是运行在host机上。只是docker的容器隔离比python的环境隔离更高一些,但又比虚拟机的完全 隔离更低一些。

docker有什么用途?

docker最大的用途就是方便了部署。以python应用为例,如果在一台机器上部署多个应用时,如果不同的应用有不同的依赖,比如使用了不同版本的python或者不同版本的包,就会冲突。

当然python有virtualenv可以较好地实现隔离,但是并不是所有的应用都是用python写的,而且即使python应用也还是需要依赖别的应用程序,比如数据库。比如一个应用需要mysql5.0另一个应用需要mysql5.6,一样会面临冲突的问题。

用虚拟机虽然也可以解决这样的问题,但是代价太大,且不说虚拟化造成的性能损失,还有每个虚拟机里都需要安装完整的OS。

微服务

实 际上,docker的最佳实践就是每个进程(实际上是指每个运行的应用程序,但一个应用程序本身可能会开好几个工作进程,比如webserver)开一个 容器。 所以在这点上,它与virtualenv还不太一样,对于venv来说,如果两个应用的依赖一样,也完全可以跑在一个venv里,但是docker并不是 这样。

比如nginx开一个容器,mysql开一个容器,redis开一个容器,每个应用开一个容器。然后把它们互联起来。对host机来 说,它的环境是干净的,只是跑着几个docker容器。对于每个容器来说,其中的程序所用的环境也是干净的,只有它们用到的依赖,保证不会有不必要的冲 突。每个容器做的事情也是清楚的:对外提供某个服务,或者依赖某个外部服务。所有的服务都是通过docker的虚拟网络建立连接。

其实这种就是所谓的“微服务”架构,每个container就是一个微服务。

Container和Image

说了半天容器,它到底是什么?

前 面说过,容器(container)是一个虚拟运行环境,这里的关键在于它是一个“运行”环境,即是一个“动态”的概念,只在运行时存在,一个容器就是一 个运行的image,其中构造了一个虚拟的OS环境(相比之下虚拟机是构造一个虚拟的硬件环境,venv只是构造了一个虚拟的python运行环境),应 用就运行在这个虚拟OS环境中。

那么image又是什么?

image就是一个静态的container。如果你对image和container还不是很理解的话,可以把它们类比成程序和进程:

image就相当于程序,是一个静态的东西,container则相当于进程,就是把程序运行起来的一个实例,一个程序可以启动成多个进程,就像一个image可以启动成多个container。

当然,实际上image和container并不完全等同于程序和进程。因为一个container还可以通过docker的commit命令保存成一个image,这是进程做不到的。

安装及使用说明

docker的安装(略,详见官网,现在docker已经被解封了,不用再像两年前我刚开始玩docker时那么折腾)

docker的使用(略,常用命令见官方文档)

阅读更多
个人分类: 通用技术
想对作者说点什么? 我来说一句

Docker入门实践.pdf 最新版

2018年03月04日 6.47MB 下载

docker入门实践(中文版).pdf

2017年03月09日 5.44MB 下载

Docker 入门实践.pdf

2018年02月14日 6.73MB 下载

Docker入门实践》高清版

2017年11月08日 1.41MB 下载

docker入门实践(第二版).pdf

2018年03月13日 6.54MB 下载

docker入门实践

2018年06月14日 3.35MB 下载

Docker入门实践

2018年01月24日 1.78MB 下载

Docker入门实践

2018年06月07日 3.37MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭