都8210年了,还不知道docker就过分了

571 阅读4分钟

软件开发最大的麻烦事之一,就是环境配置。特别是万恶的windows,经常出现一些奇怪的问题。 特别是新人入职,要装一大堆环境,就比如我们团队,后端是Go,要装啥环境我不太清楚。前端的话,需要装php,redis,node,nginx,mysql 这5个。 一个一个下载安装?还得注意版本问题 太烦了。

这时候可以写一份docker配置,新人入职,按文档一路走下来,顺风顺水的话1个小时就能装完跑项目了。

多舒服(@ο@) 哇~ ( ⊙ o ⊙ )啊!

下面是一些关于 docker 的介绍

一、解决的问题

由于不同的机器有不同的操作系统,以及不同的库和组件,在将一个应用部署到多台机器上需要进行大量的环境配置操作。

Docker 主要解决环境配置问题,它是一种虚拟化技术,对进程进行隔离,被隔离的进程独立于宿主操作系统和其它隔离的进程,我们称之为容器。使用 Docker 可以不修改应用程序代码,不需要开发人员学习特定环境下的技术,就能够将现有的应用程序部署在其他机器中。应用运行在容器里,容器可以很轻易地copy。

二、与虚拟机的比较

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

启动速度

启动虚拟机需要先启动虚拟机的操作系统,再启动应用,这个过程非常慢;

而启动 Docker 相当于启动宿主操作系统上的一个进程。就跟你打开吃饭的家伙一样快速。

占用资源

虚拟机是一个完整的操作系统,需要占用大量的磁盘、内存和 CPU,一台机器只能开启几十个的虚拟机。

Docker 只是一个进程,只需要将应用以及相关的组件打包,在运行时占用很少的资源,一台机器可以开启成千上万个 Docker

三、优势

除了启动速度快以及占用资源少之外,Docker 具有以下优势:

更容易迁移

开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些 bug 并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 「这段代码在我机器上没问题啊」 这类问题。

更容易维护

对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。 使用分层技术和镜像,使得应用可以更容易复用重复部分。复用程度越高,维护工作也越容易。

更容易扩展

可以使用基础镜像进一步扩展得到新的镜像,并且官方和开源社区提供了大量的镜像,通过扩展这些镜像可以非常容易得到我们想要的镜像。

四、使用场景

持续集成

持续集成指的是频繁地将代码集成到主干上,这样能够更快地发现错误。

Docker 具有轻量级以及隔离性的特点,在将代码集成到一个 Docker 中不会对其它 Docker 产生影响。

使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合 持续集成系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署系统进行自动部署。

而且使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。

提供可伸缩的云服务

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

搭建微服务架构

Docker 轻量级的特点使得它很适合用于部署、维护、组合微服务。

五、镜像与容器

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

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

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