前言
最近笔者在做的一个微服务项目中需要使用到Docker,而作者之前从未接触到这一方面的技术,所以接下来的内容,我将以一个初学者的角度,为大家呈现关于Docker的学习内容。本篇,我们需要完成的目标有:
- 清楚Docker为什么会出现
- 知晓什么是Docker
- 完成Docker的安装,卸载
- 了解Docket的底层原理
- 对比Docker和虚拟机技术的差异
申明
部分内容来源于网上资源,如若侵犯到您的权益,请联系作者第一时间删除
Docker为什么会出现
一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发+运维之间的协助我们需要关心的问题很多,这也是很多互联网公司不得不面对的问题。特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验。
Docker之所以发展如此迅速,也是因为它给出了一个标准化的解决方案。
环境配置如此麻烦,换一台机器,就要重新来一次,费力费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装 ? 也就是说,安装的时候,把原始环境一模一样的复制过来。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作,在你的电脑上运行失败”的问题。
之前在服务器配置一个应用的运行环境,要安装各种软件,就拿某谷的电商项目为例,Java/Tomcat/Mysql/JDBC驱动包等,安装和配置这些东西有多麻烦就不必多说了。它还不能跨平台。假设我们是在Windows上安装的这些环境,到了Linux又得重新安装。况且就算不跨操作系统,换另一台同样的操作系统的服务器,要移植应用也是非常的麻烦的。
传统上认为,软件编码开发/测试结束以后,所产出的结果即是程序或是能够编译执行的二进制字节码(以Java为例)。而为了让这些程序可以顺利执行,开发团队也得准备完整的部署文件,让运维团队得以部署应用程式,开发需要清楚的告诉运维部署团队,用的全部配置文件+所有软件环境。不过,即便如此,仍然常常发生部署失败的情况。Docker镜像的设计,使得Docker得以打破过去【程序即应用】的观念。透过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。
什么是Docker
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。我们从Logo中也可以发现,容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。
Docker的安装
Docker的基本组成
镜像(image):
docker镜像就好比是一个目标,可以通过这个目标来创建容器服务。例如现在有一个tomcat的镜像,我们需要通过run命令将其运行起来,启动的服务就是一个个容器,其中一个容器的名字我们就可以称作是tomcat01....我们通过一个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。
容器(container):
Docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建的。
容器最基本的使用,包含启动,停止,删除。
我们暂且可以把这个容器理解成就是一个简易的Linux系统。
仓库(repository):
仓库就是存放镜像的地方
仓库类似于Git,分为公有仓库和私有仓库
其中官方仓库 Docker Hub是国外的,而国内很多公司,像阿里云,华为云..都有自己的容器服务,Docker默认使用的是国外的仓库,我们在国内访问就很慢,所以我们在学习的时候就需要配置镜像加速!
安装Docker
环境准备
如果我们想要安装最新的Docker,可以参考官方文档https://docs.docker.com/
上面已经声明:
- Linux要求内核3.0以上
- CentOS 需要是7版本的
那具体如何查看CentOS系统的内核呢
查看系统版本信息
安装
帮助与开发文档:https://docs.docker.com/engine/install/
1、如果安装过旧版本的docker请先卸载
2、需要的安装包
3、设置镜像的仓库
4、更新yum软件包索引(可选)
5、安装docker相关的
需要注意,docker-ce 社区版 而ee是企业版。这里我们使用社区版即可。
6、启动docker
如果我们想要设置为开机自启的话
7、测试是否安装成功
8、测试运行一个helloworld镜像
当看到出现 Hello from Docker! 说明我们第一个测试镜像就运行成功了。至于标黄的部分是什么意思,这里卖个关子,下文会讲解到,注意留意哟~
9、查看已经下载的镜像
10、docker 的卸载(了解)
这个仅做了解学习,当我们需要卸载docker,需要按照下面的步骤执行。
11、配置阿里云镜像加速
上文我们谈到过,docker的镜像仓库默认访问的是国外的官方库,所以为了提速,我们这里配置阿里云的镜像进行加速。
登录阿里云
https://cr.console.aliyun.com/
搜索 “ 容器镜像服务 ”
根据提示,配置镜像加速器
Docker run运行原理图
还记得菌在上边卖的关子吗,当我们在测试运行一个helloworld镜像,大家有想过Docker run的运行原理吗?
以我们运行一个helloworld镜像为例,首先Docker会去本机寻找镜像,如果没有找到,它会去DockerHub上去下载,如果能够找到并下载到本地就会使用这个镜像去执行,否则就会返回找不到该镜像的错误。
Docker的底层原理
1、Docker是怎么工作的?
Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问!
Docker-Server接收到Docker-Client的指令,就会执行这个命令!
2、Docker为什么比VM快?
1、Docker有着比虚拟机更少的抽象层
2、Docker利用的是宿主机的内核,vm需要的是 GuestOS
GuestOS:VM(虚拟机)里的的系统(OS)
HostOS:物理机里的系统(OS)
所以说,新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机是加载 Guest OS,分钟级别的,而docker 是利用宿主机的操作系统,省略了这个复杂的过程,属于秒级别的!
彩蛋
有幸收藏过一份尚硅谷周阳老师制作的Docker思维导图,想获取源文件的朋友,可以在公众号【猿人菌】后台回复“Docker思维导图”获取哟~
下期预告
下一篇文章将为大家带来关于Docker中常用命令的使用,以及在Docker中部署Nginx,Tomcat,ES+Kibana 的教程....敬请期待!
文章持续更新,可以微信搜一搜「 猿人菌 」第一时间阅读,思维导图,大数据书籍,大数据高频面试题,海量一线大厂面经…期待您的关注!