原文地址: http://blog.jboost.cn/2019/07/13/docker-1.html 

1. 前言

接触Docker也有两年多了,断断续续玩过一些应用场景,如安装一些常用工具服务,部署业务项目,基于gitlab+jenkins pipeline+docker的CI/CD实现等。了解其基本知识与操作,但不能说深度掌握,故借此系列进行梳理与学习,也希望对有意学习Docker的人提供参考。

2. Docker简介

Docker最初是dotCloud公司(后来也改名为Docker)的一个内部项目,于2013年3月开源。Docker使用Google推出的Go语言实现,基于Linux内核的cgroup、namespace、Union FS等技术(先不用急着了解这些都是啥),对进程进行隔离,是操作系统层面的虚拟化技术。相对于传统的硬件层面的虚拟化技术(虚拟机),Docker显得更为轻量化。下图为传统虚拟机与Docker的结构对比

由上图可看出传统虚拟机技术是在硬件层面虚拟出一套硬件(CPU、内存、磁盘、网卡等)后,在其上运行一个完整的操作系统,再在操作系统上运行应用进程;而Docker的应用进程是直接运行在宿主机的内核上,也不需要进行硬件虚拟,因此,Docker要比传统虚拟机更为轻便。

总结Docker相对传统虚拟化技术的优势如下:

  1. 更高的资源利用率:Docker不需要硬件虚拟与运行完整操作系统的开销,所以资源利用率更高,同样配置的主机,采用Docker往往可以运行更多数量的应用。
  2. 更高效的使用体验:在操作系统上安装一些常用软件,如mysql,redis等,往往需要折腾好一阵,有些还要手动安装各种依赖,而采用Docker,可能几行命令就可以让一个服务快速运行起来。
  3. 一致的运行环境:Docker镜像功能可以把程序运行需要的环境进行封装,确保程序在开发、测试、生产环境都能保持一致性,避免因环境不一致导致程序运行异常。
  4. CI/CD支持:使用Docker可以定制镜像来实现持续集成、持续部署,如基于gitlab + jenkins pipeline + docker的自动化部署。
  5. 更轻松的维护:因为Docker保证了运行环境的一致性,因此应用的迁移或缩放将变得很容易;Docker的分层存储与镜像技术,也使得应用重复部分的复用变得更简单,基于基础镜像可以进一步扩展定义自己的镜像,也可以直接使用官方镜像来使用。

3. Docker的基本架构

Docker的基本架构图如下

主要包括几部分:

  1. Docker daemon(Docker守护进程 dockerd):Docker的执行引擎,负责监听处理Docker客户端请求与管理Docker相关对象,如镜像、容器、网络、数据卷等。一个Docker守护进程可与其它Docker守护进程进行通信,作为Docker服务进行管理。
  2. Docker client(Docker客户端 docker):Docker客户端(docker CLI命令)是大多数用户用来与Docker守护进程交互的方式,比如你在命令行执行docker run,Docker客户端将发送该命令请求到Docker守护进程,由守护进程执行。Docker客户端可通过REST API, UNIX Socket或网络接口来与Docker守护进程进行通信,并且可与多个Docker守护进程进行通信。
  3. Docker Registry(Docker注册中心):用来存储Docker镜像的仓库,类似于Maven的Nexus。Docker官方提供了一个公共镜像仓库Docker Hub( https://hub.docker.com/ ),docker相关命令默认会从Docker Hub上搜索与下载镜像,我们可以配置一些国内镜像仓库地址来进行加速,甚至搭建自己的私有镜像仓库。
  4. Docker Objects:Docker管理的对象,主要包括镜像、容器、网络、数据卷等。

4. Docker的用途

根据第二部分Docker的优势及笔者的经验来看,目前Docker主要用于

  1. 常用软件服务的搭建运行,如Mysql、Redis、Nginx等
  2. 业务服务的发布部署,尤其是基于SpringBoot的微服务
  3. CI/CD实现,结合Gitlab的webhook,Jenkins的pipeline,实现自动化集成与部署
  4. 快速的弹性伸缩,在容器集群化管理的场景中,如Swarm、K8s解决方案中,可基于容器对服务进行快速的弹性伸缩来应对业务量的突发情况
  5. 执行环境封装,如一些深度学习框架模型,打成Docker镜像的方式进行发布,可以快速在不同的环境中运行起来

5. 总结

在微服务架构、DevOps这些概念盛行的时代,容器化技术变得越来越重要,几乎成为每一位开发人员需要掌握的技能。本系列文章是笔者基于自身实践及相关文献参考,对Docker相关技术进行整理,欢迎关注,共同学习。

我的个人博客地址:http://blog.jboost.cn
我的微信公众号:jboost-ksxy (一个不只有技术干货的公众号,欢迎关注,及时获取更新内容)
———————————————————————————————————————————————————————————————

Docker笔记(一):什么是Docker的更多相关文章

  1. docker笔记(2)——docker镜像操作

    操作环境:mac OS 10.14.6 docker版本:10.03.1 终端:iterm2 3.3 时间:2019年8月 docker 镜像,是运行容器的模板,通过pull操作会向指定仓库获取镜像, ...

  2. Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境

    首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...

  3. Docker笔记一:Docker介绍

    目录 什么是Docker? Docker的核心概念 Docker镜像命令 Docker容器命令 Docker实战 查看我的镜像 启动Redis Docker中国镜像加速 血与泪的教训 什么是Docke ...

  4. Docker笔记(二):Docker管理的对象

    原文地址:http://blog.jboost.cn/2019/07/14/docker-2.html 在Docker笔记(一):什么是Docker中,我们提到了Docker管理的对象包含镜像.容器. ...

  5. Docker笔记(四):Docker镜像管理

    原文地址:http://blog.jboost.cn/2019/07/16/docker-4.html 在Docker中,应用是通过容器来运行的,而容器的运行是基于镜像的,类似面向对象设计中类与对象的 ...

  6. Docker笔记(七):常用服务安装——Nginx、MySql、Redis

    开发中经常需要安装一些常用的服务软件,如Nginx.MySql.Redis等,如果按照普通的安装方法,一般都相对比较繁琐 —— 要经过下载软件或源码包,编译安装,配置,启动等步骤,使用 Docker ...

  7. Docker笔记(八):数据管理

    前面(哪个前面我也忘了)有说过,如果我们需要对数据进行持久化保存,不应使其存储在容器中,因为容器中的数据会随着容器的删除而丢失,而因通过将数据存储于宿主机文件系统的形式来持久化.在Docker容器中管 ...

  8. Docker笔记(九):网络管理

    Docker的应用运行在容器中,其相互之间或与外部之间是如何通信的,涉及到哪些知识点,本文对相关内容进行整理.因网络这块牵涉的面较多,因此只从日常使用或理解的角度出发,过于专业的就不深入探讨了. 1. ...

  9. Docker笔记(十一):Dockerfile详解与最佳实践

    Dockerfile是一个文本文件,包含了一条条指令,每条指令对应构建一层镜像,Docker基于它来构建一个完整镜像.本文介绍Dockerfile的常用指令及相应的最佳实践建议. 1. 理解构建上下文 ...

  10. 【Linux】【自学笔记】Linux下面docker安装mysql

    写在前面: 捣腾继续,之前把一个SpringBoot的程序安装在docker上面,参考链接:https://www.cnblogs.com/aki-stones/p/2019-11-01-note.h ...

随机推荐

  1. WPF DataGrid自动生成列

    <Window x:Class="DataGridExam.MainWindow"        xmlns="http://schemas.microsoft.c ...

  2. HTTP协议-请求报文

  3. wpf 复制/剪切到本地系统剪切板中以供右键粘贴用

    原文:wpf 复制/剪切到本地系统剪切板中以供右键粘贴用   http://www.cnblogs.com/yhdkzy/archive/2012/11/27/2790655.html   /// & ...

  4. git 创建一个空分支

    创建一个分支 使用参数 --orphan,这个参数的主要作用有两个,一个是拷贝当前所在分支的所有文件,另一个是没有父结点,可以理解为没有历史记录,是一个完全独立背景干净的分支. 参考git的帮助文档, ...

  5. vagrant up 无法加载映像目录

    错误代码显示: ==> default: Attempting graceful shutdown of VM... ==> default: Clearing any previousl ...

  6. WAMP采用别名时ThinkPHP5项目设置方法

    打开public目录下的.htaccess文件,并在其中添加 RewriteBase /xxx<IfModule mod_rewrite.c> Options +FollowSymlink ...

  7. 规则“Microsoft Visual Studio 2008 的早期版本”失败。此计算机上安装了 Microsoft Visual Studio 2008 的早期版本。请在安装 SQL Server 2008 前将 Microsoft Visual Studio 2008 升级到 SP1。

    今天重装了一下系统后,需要装开发工具,我用的开发工具是Visual Studio2008 和SQL Server2008R2,装完Visual Studio2008的时候在装数据库的时候却出现这样的问 ...

  8. 微信小程序把玩(二十三)modal组件

    原文:微信小程序把玩(二十三)modal组件 modal弹出框常用在提示一些信息比如:退出应用,清楚缓存,修改资料提交时一些提示等等. 常用属性: wxml <!--监听button点击事件-- ...

  9. delphi7 stringgrid 点列头排序

    最近在做stringgrid的项目, 下面delphi7 正常使用,均摘抄网路,但做过细微调整才能正常使用 首先排序的过程 procedure Quicksort(Grid: TStringGrid; ...

  10. Office Add-In 应用类型及平台支持

    原文地址: http://simpeng.net/office-add-in/office-add-in-%e5%ba%94%e7%94%a8%e7%b1%bb%e5%9e%8b%e5%8f%8a%e ...