2017-05-12
什么是Docker
Docker是一个容器,能够为封装在其中的应用提供所有运行需要的的环境,实现一次打包,不同地方运行的目的。这有点像java虚拟机的一次编译,不同平台都可以运行,前提是只要安装了JVM。同样,只有在安装了Docker的机器上才能够运行Docker的容器。Docker的出现方便了开发和测试人员,不用重复搭建相同的服务依赖环境,以保证开发和测试的一致。开发人员利用Docker打包开发完成的应用,再交付给测试人员,测试直接对容器暴露的端口进行访问测试即可。
Docker与Virtual Machine的区别
Docker能够封装应用成一个容器,并运行在其他环境下,多少有点虚拟化的味道。用过VMWare的朋友自然知道构建一个虚拟机后,能够打包移植到其他的宿主机(虚拟机寄宿的实体机)上运行。如果把VMWare视作docker,每台虚拟机就可以视作Container。然而,Docker更关注容器中服务的依赖环境搭建,利用linux的命名空间和Cgroup来隔离环境,而不像虚拟机从底端搭建完整的操作系统进行环境隔离。
上图是VM的架构,下边是Docker的架构。
仔细分析可以看出,每个VM的应用都构建在该VM中的操作系统之上。每个VM都必须有一个操作系统。而Docker剥离了这个Guest OS层,抽象成了Docker,从此容器中只有服务(应用)所有的与宿主机的交互都交给了一个Docker。同时,Docker能够配置网络环境,便于容器之间的通信。
安装docker并打包运行第一个应用
安装
公司统一使用CentOS 7作为生产环境,参考docker官方文档的centos安装部分。注意:linux下的docker只能安装在64位系统上的。可以通过以下命令查看系统版本:
Docker当前分为社区版和企业版(收费版),就目前学习阶段,社区版足以。
Docker的安装可以通过添加yum的仓库依赖来安装或者是下载对应的rpm包。我们使用第一种。
- 配置yum的依赖
以上命令添加docker的依赖。
如果发生yum-config-manager命令找不到的错误,则yum install yum-utils
更新yum仓库缓存
yum makecache fast
- 安装Docker
yum install docker-ce
- 启动Docker
service docker start
敲入以上命令能够下载并运行一个docker自带的hello-world镜像,若能够看到上述信息,即表示安装成功。
Hello docker
现在我们来写一个Docker的小容器。
Docker通过一个Dockerfile文件对容器进行配置,创建一个Dockerfile文件并填入以下内容。
其中app是我们即将要创建的python应用,而requirements.txt是这个应用所需的模块,通过pip进行安装。我们添加两个文件,app.py和requirements.txt。
现在Dockerfile, app.py, requirements.txt三个文件在一个文件夹下。通过以下命令打包成一个image
通过docker images
命令可以看到新build的image。
运行这个image
4000:80表示将宿主机的4000端口映射成container的80端口。访问宿主机的ip和4000端口,等效于访问容器80端口的服务。
运行成功后,在浏览器中输入对应的ip和4000端口,可以看到如下页面。
成功开启容器大门。