暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Starting Docker

程序媛小庄 2021-10-26
598

小伙伴们好久不见鸭,eee...最近偷懒了

今天介绍一下现在非常流行的技术-Docker,现在出去面试或者在公司开发docker几乎要成为必须掌握的技术了,一起来看看吧。


Docker官网


官方网站:https://www.docker.com/

中文网站:https://www.docker.org.cn/


什么是Docker


Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、 bare metal、OpenStack 集群和其他的基础应用平台。

上面说了一堆,Docker简单总结来说就是一种容器技术。而容器是用来装东西的。抛开容器这个概念,在使用Python进行web开发是,使用较多的两种就是Django web项目和flask web项目,不管使用哪种框架在程序开发的过程中大概率都会对数据进行操作,就会应用到MySQL Redis等,既然项目中用到了就需要在自己的电脑或者是服务器上进行安装才能使自己的web服务正常运行。

同时还存在一个问题,如果本地开发环境是windows而生产环境是Linux,如果不小心软件版本不一致,可能就会出现经典的一幕在我电脑上跑得好好的,怎么到服务器上就不行呢!

docker就提供了颠覆式的容器化技术,在Python web应用中同样使用MySQL Redis,却不是直接使用安装在本地的软件,而是面向docker容器,在docker容器中安装web应用中所需要的软件程序。

因此使用docker有一个非常大的好处:能够保证程序的环境高度一致。


为什么是Docker


可能有小伙伴有疑问了,还是觉得之前的方式好,web应用中用到就安装,如果使用Docker不是多了一步吗?在开发程序前还要安装Docker,总觉得多了一步。那为什么docker还这么火呢?XDM可以考虑一下下述几种情况:


我电脑上跑得好好的,怎么到服务器上就不行呢?

我们以Python web程序为例,一个Python web程序可能会涉及很多应用软件,比如redis MySQL rabbitmq等环境,当这些其中某一项版本不一致时,可能就会导致web应用无法正常运行,而Docker可以将程序和使用的软件环境直接打包
在一块,无论在哪个机器上都保证了环境一致。

服务器自己的程序挂了,结果发现是别人的程序除了问题把内存吃完了,自己的程序内存不够崩了?

这种也是比较常见的一种情况,自己的项目重要程度一般,和别人共用一台服务器,所以不可避免的会受到其他程序的干扰,导致自己的程序出现问题。Docker就很好的解决了环境隔离的问题,别人程序不会影响到自己的程序。

访问频次非常高的web应用,公司需要多部署几十台服务器,运维XDM要哭了~

在没有Docker的情况下,要在短时间内部署几十台服务器,运维XDM表示臣妾办不到~而且还不能保证每台服务器的环境一致,就会出现各种问题。使用Docker只需要将程序打包成镜像,你要多少台服务器,轻轻松松搞得定,按时下班不香吗?

因此总结下来使用Docker好处多多,具体为以下几点:

1. 一致的运行环境,程序能够更加方便的迁移
2. 对进程进行封装隔离,容器与容器之间互不影响,是操作系统级别的隔离
3. 非常轻松的通过镜像复制N过个一模一样的容器

Docker与虚拟机


又有XD问了,说Docker是操作系统级别的隔离,运行一个服务就相当于运行一个操作系统,那么一台机器上运行多个服务真的OK吗?毕竟操作系统是那么一个大家伙。

Docker如果想要使用就必须建立在硬件的基础之上,比如自己的笔记本,但是我们不会直接去操作笔记本的硬件,而是通过在笔记本上安装操作系统帮助我们操作计算机的硬件。如果想要使用docker,又必须在操作系统上安装docker引擎,才可能运行各种docker容器。

如果在不使用docker的前提下,在windows环境中更好的模拟生产环境,通常会在计算机中安装虚拟机软件(VMware),安装完虚拟机软件之后必须在该软件上安装操作系统(centos),在这个基础上在安装MySQL redis等软件。

那么docker会不会像虚拟机一样非常占用系统资源呢?

虚拟机必须携带操作系统才能运行,本身很小的虚拟机程序因为携带了庞大的操作系统就会变得的非常笨重并且非常占用宿主机的资源。在调用宿主机的计算机硬件资源时,虚拟机需要虚拟化内存整个调用过程是虚拟内存->虚拟物理内存->真正的物理内存。

而Docker是不携带操作系统的,因此docker应用非常轻巧,因此不会非常多的占用系统资源。docker利用docker引擎直接调用宿主机的资源,此时过程是虚拟内存->真正的物理内存。


下面是docker与虚拟机的一个对比:


传统虚拟机docker
磁盘占用几个GB到几十个GB几十MB到几百MB
CPU和内存虚拟操作系统非常占用CPU 和内存docker引擎占用极低
启动速度从开机到运行项目大概几分钟从开启容器到运行项目十几秒
安装管理专门的运维人员简单的命令操作
应用部署每次部署都累得要死要活从第二次部署开始非常方便简单
耦合性多个应用安装到一起互相影响每个应用一个容器


小庄卖瓜


如果想要了解更多python知识,欢迎关注小庄微信公众号,我们一起学(zi)习(kua)吧~~~


文章转载自程序媛小庄,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论