网站发布网(发布号)

当前的位置:网站发布网 > 科技 > 正文

看完这篇,妈妈还会担心你Docker入不了门?

51cto博客. 2019-06-13 02:22  WZFBW.COM

上周对象突然心血来潮说想养个小宠物,我问想养啥她又说随便,你看着办!!!

看完这篇,妈妈还会担心你Docker入不了门?

这我真的比较难办啊!但是咱们程序员能有个对象就不错了,还不赶紧宠着,我只能照办咯!

我去到了一家宠物店,半天也没有找到合适的目标。正在我犹豫彷徨之时,看到了老板门口鱼缸里面的金鱼游来游去还挺顺眼!

于是我问老板:

我:老板,金鱼多少钱?

老板:加鱼缸一起 100 块钱不讲价!

我:这...便宜一点咯!

老板:小伙子看你骨骼惊奇,定是个养鱼的奇才,2 块钱卖给你吧!但是鱼缸可不能给你!

我:那,你帮我打包一条吧,帮我拿个袋子装着就好了!

于是我兴高采烈的拎着小金鱼就回家了,找了个大罐子养着!对象看到我买的小金鱼后露出了幸福的笑容~

第二天早上对象把我从睡梦中摇醒:“嘤嘤嘤,人家的小鱼动不了了,你赔~~~ ”。

于是我很愤怒的跑去宠物店找老板索赔:

我:你们家卖的鱼有问题,回去就不行了!

老板:不可能,昨天在我们这都活蹦乱跳的!

我:就是你们家的鱼有问题!

老板:肯定是你自己买的鱼缸有问题!

我:手持两把锟斤拷,口中疾呼烫烫烫。

老板:脚踏千朵屯屯屯,笑看万物锘锘锘?

这一幕,似曾相识!像极了我们在开发中的场景:

测试:xx,你的代码在生产环境上运行有问题。

我:不可能,我本地都运行得好好的。

测试:你自己上生产环境上看。

我:我不看,我的代码在本地没问题,肯定是运维的锅,你去找运维!

或许很多开发人员都有过上面的经历,程序在本地运行都很正常,一上到生产环境就崩了。

这是因为程序跟小金鱼一样也会“水土不服”!而导致程序水土不服的原因一般就是环境和配置的差异!

加上现在互联网高并发、大流量的访问,一个应用往往需要部署到集群的多台机器上,并且集群扩容缩容的需求也比较频繁。

如果按照传统的方式部署,那每一台服务器上都需要装各种软件...然后进行各种配置...我仿佛看到了“工作 996,生病 ICU”在向运维工程师招手!

那有没有一种方案不仅能屏蔽环境的差异,并且还能快速部署呢?

既然“水土不服”那我把程序及整个“水土”都打包迁移,就看你服不服。而 Docker 就是这样的一种让你服技术!

昂,上面的对象是我自己 New 的(* ̄︶ ̄)...

Hello Docker

Docker 是什么呢?百度百科是这样跟我说的:

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

这段话已经很概括的描述了 Docker 是什么,Docker 能干嘛,Docker 的基本特性!

相信刚开始接触 Docker 的你跟我也一样,看了几遍都很懵逼!没关系,看完全文再回头看这段话,或许就有不一样的体会了!

我们先看看 Docker 官方给出的“定妆照”:

看完这篇,妈妈还会担心你Docker入不了门?

如果非要我用一句话描述这张图片,还在上幼儿园的我会说:“一条可爱的鲸鱼背着多个集装箱,畅游在大海里 ”!

而现在我会说:“Docker 是一个运行在操作系统上的软件,这个软件上面可以运行多个相互隔离的容器”!

不同的表述,同一个意思!这条可爱的鲸鱼就是咱们的 Docker,而大海就是我们的操作系统,多个集装箱就是在 Docker 上运行的容器!什么是容器咱们后面会说~

假如你想漂洋过海来看我,你可以选择自己造一条船,这样你就得自己备足很多干粮,还得准备很多其他的必需品才能出发!

但是现在有一条鲸鱼游过来对你说,我这里有很多集装箱,里面有你所需要的一切,你选一个适合你的进来就可以了,我会带你乘风破浪的!

看到这里,你是否对 Docker 有个初步的印象了呢?至少知道了:Docker 是什么?为什么需要 Docker?

与传统虚拟机对比

前面我们说过 Docker 可以实现虚拟化,那 Docker 与我们平时用的虚拟机有什么区别和联系呢?

在那些年我们还买不起云服务器的时候,如果我们想学 Linux 那就得先安装一个创建虚拟机的软件。

然后在软件上面创建虚拟机,再分配内存、分配磁盘、安装 Linux 操作系统等等一系列的操作,最后等个分把钟让虚拟机运行起来~

为什么传统虚拟机启动会那么慢呢?因为传统虚拟机技术是虚拟出一套硬件后,在其上面运行一个完整的操作系统,然后在该系统上面再运行所需要的应用程序,并且虚拟机的资源需要提前分配,一旦分配这些资源将全部被占用。

但是 Docker 容器内的应用程序是直接运行于宿主的内核,容器没有自己的内核,更加不会对硬件进行虚拟。

因此 Docker 容器比传统的虚拟机更为轻便!但是 Docker 容器技术也是参考虚拟机一步一步的迭代优化过来的!

我们来看看官方给出的 Docker 容器和传统虚拟机的对比图:

看完这篇,妈妈还会担心你Docker入不了门?

图中也能看出来,Docker 就是一个运行在操作系统上的软件!

以后如果想在 Windows 上面学习 Linux,只需要在本地安装一个 Windows 版本的 Docker,然后看完本文的剩下的部分,就能轻轻松松的玩转 Linux 啦!

不过在 Windows 上安装 Docker 也需要先安装一个虚拟机~

基本组成要素

前面对 Docker 的基本概念有了个大致印象,但是到目前为止,可能你对 Docker 的认识还比较空泛,那下面部分我们就从 Docker 的基本组成要素来更深入的走进 Docker!Docker 是一个 Client-Server 的结构!

先看看官网给出的架构图:

看完这篇,妈妈还会担心你Docker入不了门?

这张图里面概括了 Docker 的所有的元素!我们就逐一分析 Docker 客户端、Docker 服务、仓库、镜像、容器等概念!

Docker 客户端

最左边是 Docker 的客户端,类似我们操作 MySQL 的工具 Navcat,只不过我们这里的是没有图形化界面的命令终端。

Docker 客户端是用户与 Docker 服务交互的窗口!我们能看到图中就是各种操作的命令!

Docker 服务

中间的是 Docker 后台运行的服务,一个称为 Docker Daemon 的守护进程。可以理解为我们 MySQL 的服务,我们的操作命令都是在这部分进行处理!

Docker Deamon 监听着客户端的请求,并且管理着 Docker 的镜像、容器、网络、磁盘(图中只列出了镜像与容器)等对象。

同样,Docker 的客户端与服务可以运行在同一机器上,也可以用某台机器上的客户端远程连接另一台机器上的 Docker 服务,这跟我们的 MySQL 一样的呢。

仓库

右边部分是注册仓库,在远古时代做开发的都知道,我们以前需要一个第三方包的时候需要去网上下载对应的 Jar 包,很麻烦不说,还容易下的包是不稳定的版本。

有了 Maven 之后,我们只要在 Maven 配置文件中引入对应的依赖,就可以直接从远程仓库中下载对应版本的 Jar 包了。

Docker 中的仓库与 Maven 的仓库是一个概念,可以远程下载常用的镜像,也可以 Push 包到远程仓库(如图中的 Redis、Nginx 等镜像),同一个镜像又可以有多个版本,在 Docker 中称为 Tag!

镜像&容器

前面我们有多次提到镜像和容器,这是 Docker 里面很核心的两个概念。那镜像和容器分别是什么呢?镜像和容器的关系是什么呢?

①镜像

官方给出的定义是:Docker 镜像是一个只读模板,可以用来创建 Docker 容器。

镜像是一种轻量级的、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件。

它包含运行某个软件所需要的所有的内容,包括代码、运行时、库、环境变量、配置文件等。

我们开发的 Web 应用需要 JDK 环境、需要 Tomcat 容器、需要 Linux 操作系统,那我们可以把我们所需要的一切都进行打包成一个整体(包括自己开发的 Web 应用+JDK+Tomcat+CentOS/Ubuntu+各种配置文件)。

打包后的镜像在某台机器上能运行,那它就能够在任何装有 Docker 的机器上运行。

任何镜像的创建会基于其他的父镜像,也就是说镜像是一层套一层,比如一个 Tomcat 镜像,需要运行在 CentOS/Ubuntu 上。

那我们的 Tomcat 镜像就会基于 CentOS/Ubuntu 镜像创建(在后面的操作部分我们可以通过命令查看)。

猜你喜欢

Copyright © 2019 WWW.WZFBW.COM 网站发布网(发布号).COM Corporation, All Rights Reserved.

网站发布网(发布号)-自媒体平台 版权所有