docker运行虚拟环境 docker和虚拟环境_虚拟化技术

docker解决的问题:

由于不同的机器有不同的操作系统,以及不同的库和组件,将应用部署到多台服务器上需要进行大量的环境配置操作。
docker主要解决环境配置问题,它是一种虚拟化技术,对进程进行隔离,被隔离的进程独立于宿主机操作系统和其它隔离的进程。使用docker可以不用修改程序代码,就能够实现将应用程序部署到不同的机器上。

docker和虚拟机的区别:

虚拟机也是一种虚拟化技术,它与docker最大的区别在于它是通过模拟硬件并在硬件上安装操作系统实现的。

docker运行虚拟环境 docker和虚拟环境_docker运行虚拟环境_02

启动速度

启动虚拟机需要启动虚拟机的操作系统,在启动相应的应用,这个过程会非常慢。
而启动docker相当于启动宿主操作系统上的一个进程。

占用资源

虚拟机是一个完整的操作系统,需要占用大量的磁盘空间,内存和CPU,一台机器只能开启几十个虚拟机。而docker只是一个进程,只需要将应用以及相应组件打包,在运行时占用很少的资源,一台机器可以开启上千个。

docker运行虚拟环境 docker和虚拟环境_docker_03

优势

除了启动速度比虚拟机更快和占用资源较少外,docker还具有以下优势:

更容易迁移:

docker可以提供一致性的运行环境,可以在不同的机器上进行迁移,而不用担心环境变化导致无法运行。

更容易维护:

docker使用分层技术和镜像,使得应用可以更容易重复使用重复部分。复用程度越高,维护也就越容易。

更容易扩展:

可以使用基础镜像进一步扩展得到新得镜像,并且官方和开源社区提供了大量的镜像,因此可以有效提高开发效率。

使用场景:

持续集成:集成概念

持续集成是指频繁的将代码集成到主干上,这样能够更快的发现错误。
Docker具有轻量级以及隔离性的特点,将代码集成到一个docker中不会对其它docker产生影响。

提供可伸缩的云服务

根据应用的负载情况,可以很容易的增加或者减少docker。

镜像和容器的关系:

镜像是一种静态的结构,可以看成面向对象中的类,而容器是镜像的一个实例。

镜像包含容器运行时所需要的代码以及其它组件,它是一种分层结构,,每一层都是只读的(read-onlylayers)。 构建镜像时,会一层层构建,前一层是后一层的基础。镜像的这种分层存储结构很适合镜像的复用以及定制化镜像

在构建容器时,通过在镜像的基础上添加一个可写层,用来保存容器运行过程中的修改。

docker运行虚拟环境 docker和虚拟环境_环境配置_04

使用容器的一些做法
  • 不要在容器中保存数据(Don’t store data in containers)
  • 将应用打包到镜像再部署而不是更新到已有容器(Don’t ship your application in two pieces)
  • 不要产生过大的镜像 (Don’t create large images)
  • 不要使用单层镜像 (Don’t use a single layer image)
  • 不要从运行着的容器上产生镜像 (Don’t create images from running containers )
  • 不要只是使用 “latest”标签 (Don’t use only the “latest” tag)
  • 不要在容器内运行超过一个的进程 (Don’t run more than one process in a single container )
  • 不要在容器内保存 credentials,而是要从外面通过环境变量传入 ( Don’t store credentials in the image. Use environment variables)
  • 不要使用 root 用户跑容器进程(Don’t run processes as a root user )
  • 不要依赖于IP地址,而是要从外面通过环境变量传入 (Don’t rely on IP addresses )

参考资料

理解docker镜像docker从入门到实战