1.背景

在实际开发中我们经常遇到这样的情况:

1.开发的时候测试好的程序已发布到线上就出问题;

2.线上的集群环境需要扩容时非常麻烦,比如说要装jdk、mysql、redis等,如果扩容100台服务器,简直是要崩溃的感觉;

那么有没有这样一个工具,直接把我线下的环境(代码+运行环境)直接打包到线上运行,这样就避免了环境不一样和安装环境麻烦的事情,因此docker就挺身而出,来解决这个棘手的问题。

2.简介

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

源码:https://github.com/docker/docker-ce

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源;

Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上;

Docker也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。

参考文献百度百科:https://baike.baidu.com/item/docker/13344470

更多的介绍可以参看官方网站

重要理念:一次封装处处运行,程序即应用

3.docker架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

Docker 容器通过 Docker 镜像来创建。

几个重要概念:

1.镜像:Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。

2.容器:容器是独立运行的一个或一组应用,是镜像运行时的实体。

3.仓库:仓库可看成一个代码控制中心,用来保存镜像,作用类似于之前的maven仓库。

官方文档的详细介绍:https://docs.docker.com/get-started/overview/

容器与镜像的关系类似于面向对象编程中的对象与类。

4.docker安装

4.1.安装环境


CentOS Docker 安装
Docker支持以下的CentOS版本:
CentOS 7 (64-bit),要求系统为64位、系统内核版本为 3.10 以上。
CentOS 6.5 (64-bit) 或更高的版本,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。

区别:除了启动方式有一点点不一样,其他几乎都一样的,不用担心,可以根据自己的环境选择一种安装。

centos6的安装

https://www.cnblogs.com/newAndHui/p/13508784.html

centos7的安装

https://www.cnblogs.com/newAndHui/p/13508221.html

4.2.运行hello-world 镜像,并理解docker运行原理

执行:docker run hello-world

运行: docker run hello-world 原理

我们再次看到这幅图,也表示他的重要性,其实原理很简单,就是典型的“缓存思想”:

1.客户端发出 docker run hello-world 命令

2.服务端收到命令后,查看本机是否有hello-world这个镜像

  2.1.如果有这个镜像,就直接实例化为hello-world容器,即镜像实例化为容器;

  2.2.如果没有这个镜像,那么就要去镜像仓库拉取hello-world镜像,然后在执行2.1.的步骤

  2.3.如果拉取这镜像失败,镜像仓库没有这个镜像,那么就要报错。

大家可以结合着这幅图理解:

先理解什么是:docker 客户端,docker 服务端,镜像仓库

在理解什么是:镜像,容器

最后理解:这些关系

docker的工作原理

1.Docker是一个Client-Server结构的系统;

2.Docker守护进程(daemon)运行在主机上, 然后通过Socket连接从客户端访问;

3.守护进程从客户端接受命令并管理(对容器进行CRUD)运行在主机上的容器。

面试题:

docker与虚拟机的区别

vm虚拟机:

server - 表示真实电脑。
Host OS - 真实电脑的操作系统,例如:Windows,Linux
Hypervisor - 虚拟机平台,模拟硬件,如VMWare,VirtualBox
Guest OS - 虚拟机平台上安装的操作系统,例如CentOS Linux
App - 虚拟机操作系统上的应用,例如nginx

docker容器:

server - 表示真实电脑。
Host OS - 真实电脑的操作系统,例如:Windows,Linux
Docker Engine - 新一代虚拟化技术,不需要包含单独的操作系统。
App - 所有的应用程序现在都作为Docker容器运行。

区别描述:

1.docker有着比虚拟机更少的抽象层。由亍docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。

2.docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。

为了避免引寻、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,返个新建过程是分钟级别的。

而docker由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个docker容器只需要几秒钟。

系统化学习docker教程:

https://www.cnblogs.com/newAndHui/p/13508771.html

完美!

docker系统化学习图文教程的更多相关文章

  1. docker系统化学习图文+视频教程

    1.背景 博客对应的视频课程: 9.9元在线学习:https://study.163.com/course/courseMain.htm?share=2&shareId=40000000033 ...

  2. Step by Step 真正从零开始,TensorFlow详细安装入门图文教程!帮你完成那个最难的从0到1

    摘要: Step by Step 真正从零开始,TensorFlow详细安装入门图文教程!帮你完成那个最难的从0到1 安装遇到问题请文末留言. 悦动智能公众号:aibbtcom AI这个概念好像突然就 ...

  3. 如何从零开始系统化学习视觉SLAM?

    由于显示格式问题,建议阅读原文:如何从零开始系统化学习视觉SLAM? 什么是SLAM? SLAM是 Simultaneous Localization And Mapping的 英文首字母组合,一般翻 ...

  4. 基于VirtualBox安装Ubuntu图文教程

    基于VirtualBox虚拟机安装Ubuntu图文教程 一. 下载安装VirtualBox 官网下载VirtualBox,目前版本:VirtualBox 5.1.8 for Windows hosts ...

  5. MapGIS6.7安装图文教程(完美破解)

    mapgis安装比较简单,主要注意在安装的时候,先打开软件狗,然后再进行软件安装,一般就不会照成其他安装失败的现象,有时候安装之前没有打开软件狗也安装成功了,也有这情况,不过软件使用也需要软件狗的支持 ...

  6. 【简单易懂的AMV图文教程-2】VEGAS基础进阶——认识关键帧

    [简单易懂的AMV图文教程-2]VEGAS基础进阶--认识关键帧 经过了上一期VEGAS基础教程的学习,相信大家都能独立完成一些比较简单的纯剪辑作品了.今天在这里为大家继续介绍VEGAS的一大基础应用 ...

  7. 使用Android Studio搭建Android集成开发环境(图文教程)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  8. PHPStorm+XDebug进行调试图文教程以及解析wamp的php.ini设置不生效的原因

    这篇文章主要为大家详细介绍了PHPStorm+XDebug进行调试图文教程,内容很丰富,具有一定的参考价值,感兴趣的小伙伴们可以参考一下   笔者的开发环境如下:Windows8.1+Apache+P ...

  9. 代码文档生成工具-Doxygen生成CHM和RTF图文教程

    Doxygen是一种开源跨平台的,以类似JavaDoc风格描述的文档系统,可以从一套归档源文件开始,生成chm格式的文档.本文主要讲解如何在winddows下安装doxygen.     1.下载do ...

随机推荐

  1. spring boot+spring security集成以及Druid数据库连接池的问题

    贴工程目录,其中bll目录下是service+dao层,common是一些公用的模块及功能类,web是controller层 用到了druid及Redis,工具及配置类目录(本文不介绍如何配置drui ...

  2. linux:apache-配置基于域名的虚拟机主机

    一个http服务要配置多个站点,就需要用到虚拟机主机. 虚拟机主机一般有三类:1.基于域名 2.基于端口 3.基于ip 举例操作基于域名配置三个站点: 域名 站点目录 www.eejind.com   ...

  3. python之os模块使用

    python中os模块的常用语法 1.查看当前路径及路径下的目录 os.getcwd():返回当前路径(不包括文件名) os.listdir():返回当前路径下的所有目录列表. os.listdir( ...

  4. [POJ1050]To the Max(最大子段和)

    题目链接 http://poj.org/problem?id=1050 题意 求最大子矩阵和. 题解 即求二维的最大子段和.二维数组sumRec[I][j]存储原始数组数据rec[0][j] to r ...

  5. 算法数据结构 | 三个步骤完成强连通分量分解的Kosaraju算法

    强连通分量分解的Kosaraju算法 今天是算法数据结构专题的第35篇文章,我们来聊聊图论当中的强连通分量分解的Tarjan算法. Kosaraju算法一看这个名字很奇怪就可以猜到它也是一个根据人名起 ...

  6. 口罩预约管理系统——数据库设计(前端+PHP+MySQL)

    目录 一.背景 二.口罩预约管理系统介绍 三.数据库设计 四.MySQL创建数据库以及数据表 五.数据库设计总结 一.背景 2020年的疫情影响了我们的生产生活,政府不断加大力度联防联控,遏制疫情的蔓 ...

  7. ASP.NET Core 3.x启动时运行异步任务(一)

    这是一个大的题目,需要用几篇文章来说清楚.这是第一篇.   一.前言 在我们的项目中,有时候我们需要在应用程序启动前执行一些一次性的逻辑.比方说:验证配置的正确性.填充缓存.或者运行数据库清理/迁移等 ...

  8. JavaCV与OpenCV的区别和使用中遇到的问题

    写这篇随笔的原因是因为我用了JavaCV一段时间后项目情况糟透了,可能大家很熟悉OpenCV,也有一部分人熟悉JavaCV,但是我相信真正把JavaCV用到生产上的不是太多. 我参与图片处理项目快一个 ...

  9. 1000000 / 60S 的 RocketMQ 不停机,扩容,平滑升级!

    一.背景 1.各业务系统持续迭代过程中,JDK.SpringBoot.RocketMQ Client 等框架也进行了升级,高版本的 RocketMQ Client 发送的消息到低版本中,在控制台中午无 ...

  10. 面试官写了个双冒号: : 问我这是什么语法?Java中有这玩意?

    一:简洁 方法引用分为三种,方法引用通过一对双冒号:: 来表示,方法引用是一种函数式接口的另一种书写方式 静态方法引用,通过类名::静态方法名, 如 Integer::parseInt 实例方法引用, ...