docker凭借其易于使用和部署的优势以及高效的资源利用率已经成为了服务部署、运行维护的首选利器。
本文,我们就来全面了解一下docker是什么,以及如何构建和使用docker。
2.什么是docker2.1docker镜像docker通常指docker镜像,docker镜像包含了所有docker容器运行所需要的文件和指令,是一个或一个以上docker容器的封装。
docker镜像就是我们最终用来部署的可移植、可运行docker程序。
他通过Dockerfile配置打包过程的各种参数。Dockerfile就是docker的配置文件,它包含一系列docker命令行工具执行的命令行指令,换句话说,docker镜像正是在docker命令行工具执行Dockerfile后生成的。
2.2docker命令行工具上面提到了docker命令行工具,他是一组随着docker一起被安装到系统的命令集合。通过执行这些命令行工具,就可以通过Dockerfile构建出docker镜像,同时,也可以实现将docker镜像上传到docker仓库、从docker仓库下载docker镜像,以及启动或终止docker容器等多种操作。
2.3docker仓库这里提到了docker仓库,docker仓库就是一个存储docker镜像的仓库,十分类似java的maven仓库或是python的pip仓库,在我们完成docker镜像构建后,上传到docker镜像仓库以后,就可以实现镜像的备份、共享或是管理了。
一个公有的Docker仓库,是运行潜在用户下载、安装和运行软件的很好的方式,只需要将应用程序打包为Docker镜像,上传到公有的Docker仓库中,你的用户就可以访问并使用它。
Docker公司已将Docker仓库作为一项托管服务,提供了私有和公有两种服务。一些云服务商,比如AWS、AZure和Google,也提供了Docker仓库服务器,可以上传自己的Docker镜像。很容易的就能在云基础设施上的虚拟机或Kubernetes中使用这些镜像。
一旦docker镜像打包好,他就可以被部署启动了,每个运行的实例,就被成为是一个docker容器。
实际上,linux操作系统本身有一系列的容器化特性,支持应用相互隔离、容器化的使用资源,docker便是这些特性的封装。这是他和虚拟机最大的不同。
2.4DockerComposeDockerCompose提供将多个Docker容器链接成一个组合的功能,这个组合中的所有容器可以被一次性全部部署、启动或停止。
3.为什么使用docker3.1Docker容器vs虚拟机提到操作系统虚拟化的应用,我们最先想到的一定是虚拟机技术了,那么docker容器和虚拟机又有什么不同呢?
对于虚拟机来说,每个虚拟机内是必须要运行一个独立的操作系统的,而docker容器则不然,他内部并不具有一个操作系统,虽然docker容器内部的文件系统是独立的,但容器是直接运行在linux操作系统上的,因此,docker容器相比于虚拟机,占用空间是很小的。同时,由于没有了占用很大资源的虚拟操作系统,docker的运行效率也得以显著提升。
3.2docker的优势通过上面的描述,我们知道了docker是什么,那么我们为什么要使用docker呢?
易于使用--先前服务是如何配置的,使用docker后也按同样方式配置Dockerfile即可。
一处配置处处使用--如果你需要把同样的镜像部署到多个机器上,你只需要把镜像上传上去然后启动即可。
便于管理--k8s、dockerswarm等集群管理工具都可以非常轻松的管理docker组成的集群,除此之外,很多云平台都是以docker容器为单位进行服务的治理的,这让普通用户去搭建云服务变得非常轻松。
有利于商业应用--对于商业应用来说,使用docker让你可以轻松的把自己的服务安装在客户的服务器上,而不用去顾虑千差万别的实际环境。
4.Dockerfile要创建docker镜像,我们首先需要配置dockerfile,Dockerfile相当于是构建docker镜像的一个清单,他包含以下信息:
用于构建docker镜像的基础镜像;
docker镜像包含的一系列工具和应用信息;
需要放入docker镜像的文件;
需要在防火墙中打开的网络协议及端口等信息。
在把种种信息描述全部写入到Dockerfile以后,docker已经完全清楚如何去构建你的docker镜像了,这就是Dockerfile存在的意义。
5.构建DockerFile下面是一个Dockerfile的例子:
#ThebaseimageFROMubuntu:latest#Moreinstructionsherethatinstallsoftwareandcopyfilesintotheimage.COPY/myapp/target/myapp.jar/myapp/myapp.jar#The