什么是Docker
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
为什么要用Docker
1.更快速的交付和部署
通常,应用的开发环境和生产环境不同,在从开发发布到运维部署的过程中会产生兼容性问题。Docker可以将应用直接封装,所以可以直接运行在不同环境。
2.更高效的虚拟化
Docker项目的目标是实现轻量级的操作系统虚拟化解决方案。相比传统的虚拟机(虚拟化整个世界),Docker更像是只虚拟了一个环境。
虚拟机是一个运行在宿主机之上的完整的操作系统,虚拟机运行自身操作系统会占用较多的CPU、内存、硬盘资源。
Docker只包含应用程序以及依赖库,基于libcontainer运行在宿主机上,并处于一个隔离的环境中,这使得Docker更加轻量高效,启动容器只需几秒钟之内完成。由于Docker轻量、资源占用少,使得Docker可以轻易的应用到构建标准化的应用中。
3.更轻松的迁移和扩展
Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
4.更简单的管理
使用Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
Docker的主要概念
1.Docker Image
Docker镜像是只读的,包含运行所需的文件。镜像是容器运行的基本资源,所以容器需要使用镜像创建。镜像可以通过Dockerfile创建,也可以通过Docker hub/registry下载。
如上图,我们想构造一个安装了emacs和Apache的Ubuntu镜像。需要使用一个现有的Ubuntu作为基础镜像。然后加入emacs功能,生成一个新镜像。然后再加入Apache,再生成一个新镜像。整个过程就是在父镜像的上面叠加镜像生成新的镜像。镜像本身是只读,但是在容器中,会在镜像顶端添加一个读写层,我们想要运行数据就在这个层。
2.Docker Container
Docker容器是一个运行的应用,通过镜像创建,多个容器之间是相互隔离的。
3.Docker hub/registry
共享和管理Docker镜像,用户可以上传或者下载上面的镜像,官方地址为https://registry.hub.docker.com/,也可以搭建自己私有的Docker registry。我们可以通过现有的镜像,瞬间构建一个运行环境的Docker容器。
Dockerfile
Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。有了Dockerfile,当我们需要定制自己额外的需求时,只需在 Dockerfile 上添加或者修改指令,重新生成 image 即可,省去了敲命令的麻烦。
一开始必须要指明所基于的镜像名称,接下来一般会说明维护者信息;后面则是镜像操作指令,例如 RUN 指令。每执行一条RUN 指令,镜像添加新的一层,并提交;最后是CMD 指令,来指明运行容器时的操作命令。
Docker部署实战
准备工作:
为Docker部署编写一个demo——一个返回Hello Docker的SpringBoot Web应用:
编写DockerFile:
定义maven docker构建配置:
开始部署:
- 打jar包 -> 生成镜像 -> 运行镜像
- 将demo上传至虚拟机,使用命令mvn package打包
- 使用mvn package docker:build生成镜像
- 使用docker run 运行镜像
- 进行测试